Fix TODO by replacing atoi by strtol

Fix TODO in bindings.c.
There is no problem to use atoi here since either keycode 0 or button0 is invalid.
But strtol is more flexible and is recommanded for conversion.
This commit is contained in:
hwangcc23 2015-06-25 22:33:50 +08:00
parent dfe2c9c310
commit 478dc5dc38
1 changed files with 7 additions and 5 deletions

View File

@ -63,10 +63,11 @@ Binding *configure_binding(const char *bindtype, const char *modifiers, const ch
new_binding->symbol = sstrdup(input_code); new_binding->symbol = sstrdup(input_code);
} else { } else {
// TODO: strtol with proper error handling char *endptr;
new_binding->keycode = atoi(input_code); long keycode = strtol(input_code, &endptr, 10);
new_binding->keycode = keycode;
new_binding->input_type = B_KEYBOARD; 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); ELOG("Could not parse \"%s\" as an input code, ignoring this binding.\n", input_code);
FREE(new_binding); FREE(new_binding);
return NULL; return NULL;
@ -256,10 +257,11 @@ void translate_keysyms(void) {
TAILQ_FOREACH(bind, bindings, bindings) { TAILQ_FOREACH(bind, bindings, bindings) {
if (bind->input_type == B_MOUSE) { 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; 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); ELOG("Could not translate string to button: \"%s\"\n", bind->symbol);
continue; continue;