chiark / gitweb /
libudev: fix sysnum logic for digit-only device names
[elogind.git] / udev / lib / libudev-device.c
index daf2217765ee373efc0b326696f77d7b27cd07f8..b5d42354e548d31c33f4304f6e35ef6049d362dd 100644 (file)
@@ -75,7 +75,7 @@ static size_t devpath_to_db_path(struct udev *udev, const char *devpath, char *f
        return util_path_encode(&filename[start], len - start);
 }
 
-static int device_read_db(struct udev_device *udev_device)
+int udev_device_read_db(struct udev_device *udev_device)
 {
        struct stat stats;
        char filename[UTIL_PATH_SIZE];
@@ -220,7 +220,7 @@ static void device_load_info(struct udev_device *device)
 {
        device->info_loaded = 1;
        udev_device_read_uevent_file(device);
-       device_read_db(device);
+       udev_device_read_db(device);
 }
 
 void udev_device_set_info_loaded(struct udev_device *device)
@@ -936,8 +936,13 @@ int udev_device_set_syspath(struct udev_device *udev_device, const char *syspath
        }
 
        /* trailing number */
-       while (isdigit(udev_device->sysname[--len]))
+       while (len > 0 && isdigit(udev_device->sysname[--len]))
                udev_device->sysnum = &udev_device->sysname[len];
+
+       /* sysname is completely numeric */
+       if (len == 0)
+               udev_device->sysnum = NULL;
+
        return 0;
 }