]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/udev/udev-builtin-keyboard.c
udev: replace strtoul by safe_ato*
[thirdparty/systemd.git] / src / udev / udev-builtin-keyboard.c
index cd766a8b6a5c76f0c2d7e358b2b50dfb66539cdc..a739e69e03f81d48551f73de7d4f592212b4987c 100644 (file)
@@ -60,9 +60,9 @@ static int map_keycode(sd_device *dev, int fd, int scancode, const char *keycode
                 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));
@@ -70,9 +70,9 @@ static int map_keycode(sd_device *dev, int fd, int scancode, const char *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;
@@ -170,17 +170,15 @@ static int builtin_keyboard(sd_device *dev, int argc, char *argv[], bool test) {
         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;
                         }
 
@@ -207,9 +205,9 @@ static int builtin_keyboard(sd_device *dev, int argc, char *argv[], bool test) {
                         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;
                         }
 
@@ -238,7 +236,6 @@ static int builtin_keyboard(sd_device *dev, int argc, char *argv[], bool test) {
                         (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)