chiark / gitweb /
udevadm: test - handling trailing '/' in devpath
authorKay Sievers <kay.sievers@vrfy.org>
Wed, 18 Mar 2009 17:42:16 +0000 (18:42 +0100)
committerKay Sievers <kay.sievers@vrfy.org>
Wed, 18 Mar 2009 17:42:16 +0000 (18:42 +0100)
On Wed, Mar 18, 2009 at 16:00, Matthias Schwarzott <zzam@gentoo.org> wrote:
found out how the error occurs:
It is a difference between
A. udevadm test /sys/class/mem/null/
and
B. udevadm test /sys/class/mem/null

Case A was the case that showed the error behaviour. It seems udevadm is
confused by the trailing slash. This behaviour seems to be there since ages.

configure.ac
udev/lib/libudev-device.c
udev/udevadm-test.c

index 5e6213f..001f338 100644 (file)
@@ -16,7 +16,7 @@ test "$prefix" = NONE && test "$exec_prefix" = NONE && exec_prefix=
 
 dnl /* libudev version */
 LIBUDEV_LT_CURRENT=1
-LIBUDEV_LT_REVISION=0
+LIBUDEV_LT_REVISION=1
 LIBUDEV_LT_AGE=1
 AC_SUBST(LIBUDEV_LT_CURRENT)
 AC_SUBST(LIBUDEV_LT_REVISION)
index 1a9d0a1..e13cbe5 100644 (file)
@@ -303,7 +303,7 @@ struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *
        /* path is not a root directory */
        subdir = &syspath[len+1];
        pos = strrchr(subdir, '/');
-       if (pos == NULL || pos < &subdir[2]) {
+       if (pos == NULL || pos[1] == '\0' || pos < &subdir[2]) {
                dbg(udev, "not a subdir :%s\n", syspath);
                return NULL;
        }
index 664d72f..c53c273 100644 (file)
@@ -94,12 +94,14 @@ int udevadm_test(struct udev *udev, int argc, char *argv[])
        if (strncmp(syspath, udev_get_sys_path(udev), strlen(udev_get_sys_path(udev))) != 0) {
                util_strlcpy(filename, udev_get_sys_path(udev), sizeof(filename));
                util_strlcat(filename, syspath, sizeof(filename));
-               syspath = filename;
+       } else {
+               util_strlcpy(filename, syspath, sizeof(filename));
        }
+       util_remove_trailing_chars(filename, '/');
 
-       dev = udev_device_new_from_syspath(udev, syspath);
+       dev = udev_device_new_from_syspath(udev, filename);
        if (dev == NULL) {
-               fprintf(stderr, "unable to open device '%s'\n", syspath);
+               fprintf(stderr, "unable to open device '%s'\n", filename);
                rc = 2;
                goto exit;
        }