chiark / gitweb /
release 115
[elogind.git] / udevinfo.c
index 52c49b824f364fc7b6b63936790bf726893da89c..d0b1c447f4d65f2692b026996333dbf58f8f0328 100644 (file)
@@ -93,7 +93,7 @@ static void print_all_attributes(const char *devpath, const char *key)
                                continue;
                        }
 
-                       replace_untrusted_chars(value);
+                       replace_chars(value, ALLOWED_CHARS_INPUT);
                        printf("    %s{%s}==\"%s\"\n", key, dent->d_name, value);
                }
        }
@@ -146,6 +146,12 @@ static void print_record(struct udevice *udev)
        printf("N: %s\n", udev->name);
        list_for_each_entry(name_loop, &udev->symlink_list, node)
                printf("S: %s\n", name_loop->name);
+       if (udev->link_priority != 0)
+               printf("L: %i\n", udev->link_priority);
+       if (udev->partitions != 0)
+               printf("A:%u\n", udev->partitions);
+       if (udev->ignore_remove)
+               printf("R:%u\n", udev->ignore_remove);
        list_for_each_entry(name_loop, &udev->env_list, node)
                printf("E: %s\n", name_loop->name);
 }
@@ -172,13 +178,17 @@ static void export_db(void) {
 static int lookup_device_by_name(struct udevice *udev, const char *name)
 {
        LIST_HEAD(name_list);
+       int count;
        struct name_entry *device;
        int rc  = -1;
 
-       if (udev_db_get_devices_by_name(name, &name_list) <= 0)
+       count = udev_db_get_devices_by_name(name, &name_list);
+       if (count <= 0)
                goto out;
 
-       /* select the device that matches the dev_t of name */
+       info("found %i devices for '%s'", count, name);
+
+       /* select the device that seems to match */
        list_for_each_entry(device, &name_list, node) {
                char filename[PATH_SIZE];
                struct stat statbuf;
@@ -188,16 +198,18 @@ static int lookup_device_by_name(struct udevice *udev, const char *name)
                        continue;
                info("found db entry '%s'", device->name);
 
+               /* make sure, we don't get a link of a differnt device */
                strlcpy(filename, udev_root, sizeof(filename));
                strlcat(filename, "/", sizeof(filename));
                strlcat(filename, name, sizeof(filename));
                if (stat(filename, &statbuf) != 0)
                        continue;
-               if (statbuf.st_rdev == udev->devt) {
-                       info("found '%s', dev_t matches", udev->name);
-                       rc = 0;
-                       break;
+               if (major(udev->devt) > 0 && udev->devt != statbuf.st_rdev) {
+                       info("skip '%s', dev_t doesn't match", udev->name);
+                       continue;
                }
+               rc = 0;
+               break;
        }
 out:
        name_list_cleanup(&name_list);
@@ -253,7 +265,6 @@ int main(int argc, char *argv[], char *envp[])
                goto exit;
        }
 
-       /* get command line options */
        while (1) {
                option = getopt_long(argc, argv, "aen:p:q:rVh", options, NULL);
                if (option == -1)
@@ -267,7 +278,7 @@ int main(int argc, char *argv[], char *envp[])
                                strlcpy(name, &optarg[strlen(udev_root)+1], sizeof(name));
                        else
                                strlcpy(name, optarg, sizeof(name));
-                       dbg("name: %s\n", name);
+                       dbg("name: %s", name);
                        break;
                case 'p':
                        /* remove /sys if given */
@@ -275,10 +286,9 @@ int main(int argc, char *argv[], char *envp[])
                                strlcpy(path, &optarg[strlen(sysfs_path)], sizeof(path));
                        else
                                strlcpy(path, optarg, sizeof(path));
-                       dbg("path: %s\n", path);
+                       dbg("path: %s", path);
                        break;
                case 'q':
-                       dbg("udev query: %s\n", optarg);
                        action = ACTION_QUERY;
                        if (strcmp(optarg, "name") == 0) {
                                query = QUERY_NAME;
@@ -401,7 +411,7 @@ int main(int argc, char *argv[], char *envp[])
        case ACTION_ATTRIBUTE_WALK:
                if (path[0] != '\0') {
                        if (print_device_chain(path) != 0) {
-                               fprintf(stderr, "device not found\n");
+                               fprintf(stderr, "no valid sysfs device found\n");
                                rc = 4;
                                goto exit;
                        }
@@ -412,7 +422,7 @@ int main(int argc, char *argv[], char *envp[])
                                goto exit;
                        }
                        if (print_device_chain(udev->dev->devpath) != 0) {
-                               fprintf(stderr, "device not found\n");
+                               fprintf(stderr, "no valid sysfs device found\n");
                                rc = 4;
                                goto exit;
                        }