From: Michael Stapelberg Date: Tue, 30 Jun 2015 18:50:28 +0000 (-0700) Subject: Merge pull request #1768 from hwangcc23/atoi2strtol X-Git-Tag: 4.11~86 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=f76838794d703860914cb1a2b0ab44d03b7780c8;hp=8df7e4ecb9dff2781b3afc3bffaf054cbc1c9c6a;p=i3%2Fi3 Merge pull request #1768 from hwangcc23/atoi2strtol Fix TODO in src/bindings.c --- diff --git a/src/bindings.c b/src/bindings.c index 5815908c..63ca0836 100644 --- a/src/bindings.c +++ b/src/bindings.c @@ -63,10 +63,11 @@ Binding *configure_binding(const char *bindtype, const char *modifiers, const ch new_binding->symbol = sstrdup(input_code); } else { - // TODO: strtol with proper error handling - new_binding->keycode = atoi(input_code); + char *endptr; + long keycode = strtol(input_code, &endptr, 10); + new_binding->keycode = keycode; new_binding->input_type = B_KEYBOARD; - if (new_binding->keycode == 0) { + if (keycode == LONG_MAX || keycode == LONG_MIN || keycode < 0 || *endptr != '\0' || endptr == input_code) { ELOG("Could not parse \"%s\" as an input code, ignoring this binding.\n", input_code); FREE(new_binding); return NULL; @@ -256,10 +257,11 @@ void translate_keysyms(void) { TAILQ_FOREACH(bind, bindings, bindings) { if (bind->input_type == B_MOUSE) { - int button = atoi(bind->symbol + (sizeof("button") - 1)); + char *endptr; + long button = strtol(bind->symbol + (sizeof("button") - 1), &endptr, 10); bind->keycode = button; - if (button < 1) + if (button == LONG_MAX || button == LONG_MIN || button < 0 || *endptr != '\0' || endptr == bind->symbol) ELOG("Could not translate string to button: \"%s\"\n", bind->symbol); continue;