chiark / gitweb /
vol_id: export encoded strings
[elogind.git] / udevinfo.c
index e892b1092e311687058b5e3c2ec4dd20c5f37bac..cda229244d9b59aadaea86d55fca32d098271016 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,20 +146,17 @@ 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);
 }
 
-static void export_name_devpath(struct udevice *udev) {
-       printf("%s=%s/%s\n", udev->dev->devpath, udev_root, udev->name);
-}
-
-static void export_record(struct udevice *udev) {
-       print_record(udev);
-       printf("\n");
-}
-
-static void export_db(void fnct(struct udevice *udev)) {
+static void export_db(void) {
        LIST_HEAD(name_list);
        struct name_entry *name_loop;
 
@@ -171,7 +168,8 @@ static void export_db(void fnct(struct udevice *udev)) {
                if (udev_db == NULL)
                        continue;
                if (udev_db_get_device(udev_db, name_loop->name) == 0)
-                       fnct(udev_db);
+                       print_record(udev_db);
+                       printf("\n");
                udev_device_cleanup(udev_db);
        }
        name_list_cleanup(&name_list);
@@ -180,13 +178,17 @@ static void export_db(void fnct(struct udevice *udev)) {
 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;
@@ -196,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);
@@ -263,7 +267,7 @@ int main(int argc, char *argv[], char *envp[])
 
        /* get command line options */
        while (1) {
-               option = getopt_long(argc, argv, "aden:p:q:rVh", options, NULL);
+               option = getopt_long(argc, argv, "aen:p:q:rVh", options, NULL);
                if (option == -1)
                        break;
 
@@ -319,11 +323,8 @@ int main(int argc, char *argv[], char *envp[])
                case 'a':
                        action = ACTION_ATTRIBUTE_WALK;
                        break;
-               case 'd':
-                       export_db(export_name_devpath);
-                       goto exit;
                case 'e':
-                       export_db(export_record);
+                       export_db();
                        goto exit;
                case 1:
                        printf("%s\n", UDEV_VERSION);