unsigned scan;
unsigned key;
} map;
- char *endptr;
const struct key_name *k;
unsigned keycode_num;
+ int r;
/* translate identifier to key code */
k = keyboard_lookup_key(keycode, strlen(keycode));
keycode_num = k->id;
} else {
/* check if it's a numeric code already */
- keycode_num = strtoul(keycode, &endptr, 0);
- if (endptr[0] !='\0')
- return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "Failed to parse key identifier '%s'", keycode);
+ r = safe_atou(keycode, &keycode_num);
+ if (r < 0)
+ return log_device_error_errno(dev, r, "Failed to parse key identifier '%s': %m", keycode);
}
map.scan = scancode;
if (r < 0)
return log_device_error_errno(dev, r, "Failed to get device name: %m");
- FOREACH_DEVICE_PROPERTY(dev, key, value) {
- char *endptr;
-
+ FOREACH_DEVICE_PROPERTY(dev, key, value)
if (startswith(key, "KEYBOARD_KEY_")) {
const char *keycode = value;
unsigned scancode;
/* KEYBOARD_KEY_<hex scan code>=<key identifier string> */
- scancode = strtoul(key + 13, &endptr, 16);
- if (endptr[0] != '\0') {
- log_device_warning(dev, "Failed to parse scan code from \"%s\", ignoring", key);
+ r = safe_atou_full(key + 13, 16, &scancode);
+ if (r < 0) {
+ log_device_warning_errno(dev, r, "Failed to parse scan code from \"%s\", ignoring: %m", key);
continue;
}
unsigned evcode;
/* EVDEV_ABS_<EV_ABS code>=<min>:<max>:<res>:<fuzz>:<flat> */
- evcode = strtoul(key + 10, &endptr, 16);
- if (endptr[0] != '\0') {
- log_device_warning(dev, "Failed to parse EV_ABS code from \"%s\", ignoring", key);
+ r = safe_atou_full(key + 10, 16, &evcode);
+ if (r < 0) {
+ log_device_warning_errno(dev, r, "Failed to parse EV_ABS code from \"%s\", ignoring: %m", key);
continue;
}
(void) override_abs(dev, fd, evcode, value);
} else if (streq(key, "POINTINGSTICK_SENSITIVITY"))
(void) set_trackpoint_sensitivity(dev, value);
- }
/* install list of force-release codes */
if (release_count > 0)