chiark / gitweb /
vol_id: fix language in manpage
[elogind.git] / udev / udevadm-trigger.c
index 3cf8c7a3d6e1d58b45dd29a76be29e91c4a1c394..c88534600d78811408ce721757d4ddb88422e1cf 100644 (file)
@@ -62,52 +62,33 @@ static void exec_list(struct udev_enumerate *udev_enumerate, const char *action)
        }
 }
 
-static int enumerate_scan_failed(struct udev_enumerate *udev_enumerate)
+static int scan_failed(struct udev_enumerate *udev_enumerate)
 {
        struct udev *udev = udev_enumerate_get_udev(udev_enumerate);
-       char base[UTIL_PATH_SIZE];
-       DIR *dir;
-       struct dirent *dent;
-
-       util_strlcpy(base, udev_get_dev_path(udev), sizeof(base));
-       util_strlcat(base, "/.udev/failed", sizeof(base));
-
-       dir = opendir(base);
-       if (dir != NULL) {
-               for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
-                       char syspath[UTIL_PATH_SIZE];
-                       size_t start;
-                       struct udev_device *device;
-
-                       if (dent->d_name[0] == '.')
-                               continue;
-                       start = util_strlcpy(syspath, udev_get_sys_path(udev), sizeof(syspath));
-                       util_strlcat(syspath, dent->d_name, sizeof(syspath));
-                       util_path_decode(&syspath[start]);
-                       device = udev_device_new_from_syspath(udev, syspath);
-                       if (device == NULL)
-                               continue;
-                       udev_enumerate_add_device(udev_enumerate, device);
-                       udev_device_unref(device);
-               }
-               closedir(dir);
-       }
+       struct udev_queue *udev_queue;
+       struct udev_list_entry *list_entry;
+
+       udev_queue = udev_queue_new(udev);
+       if (udev_queue == NULL)
+               return -1;
+       udev_list_entry_foreach(list_entry, udev_queue_get_failed_list_entry(udev_queue))
+               udev_enumerate_add_syspath(udev_enumerate, udev_list_entry_get_name(list_entry));
        return 0;
 }
 
 int udevadm_trigger(struct udev *udev, int argc, char *argv[])
 {
        static const struct option options[] = {
-               { "verbose", 0, NULL, 'v' },
-               { "dry-run", 0, NULL, 'n' },
-               { "type", 1, NULL, 't' },
-               { "retry-failed", 0, NULL, 'F' },
-               { "action", 1, NULL, 'c' },
-               { "subsystem-match", 1, NULL, 's' },
-               { "subsystem-nomatch", 1, NULL, 'S' },
-               { "attr-match", 1, NULL, 'a' },
-               { "attr-nomatch", 1, NULL, 'A' },
-               { "help", 0, NULL, 'h' },
+               { "verbose", no_argument, NULL, 'v' },
+               { "dry-run", no_argument, NULL, 'n' },
+               { "type", required_argument, NULL, 't' },
+               { "retry-failed", no_argument, NULL, 'F' },
+               { "action", required_argument, NULL, 'c' },
+               { "subsystem-match", required_argument, NULL, 's' },
+               { "subsystem-nomatch", required_argument, NULL, 'S' },
+               { "attr-match", required_argument, NULL, 'a' },
+               { "attr-nomatch", required_argument, NULL, 'A' },
+               { "help", no_argument, NULL, 'h' },
                {}
        };
        enum {
@@ -175,7 +156,7 @@ int udevadm_trigger(struct udev *udev, int argc, char *argv[])
                                val[0] = 0;
                                val = &val[1];
                        }
-                       udev_enumerate_add_match_attr(udev_enumerate, attr, val);
+                       udev_enumerate_add_match_sysattr(udev_enumerate, attr, val);
                        break;
                case 'A':
                        util_strlcpy(attr, optarg, sizeof(attr));
@@ -184,7 +165,7 @@ int udevadm_trigger(struct udev *udev, int argc, char *argv[])
                                val[0] = 0;
                                val = &val[1];
                        }
-                       udev_enumerate_add_nomatch_attr(udev_enumerate, attr, val);
+                       udev_enumerate_add_nomatch_sysattr(udev_enumerate, attr, val);
                        break;
                case 'h':
                        printf("Usage: udevadm trigger OPTIONS\n"
@@ -199,8 +180,7 @@ int udevadm_trigger(struct udev *udev, int argc, char *argv[])
                               "  --subsystem-nomatch=<subsystem> exclude devices from a matching subystem\n"
                               "  --attr-match=<file[=<value>]>   trigger devices with a matching attribute\n"
                               "  --attr-nomatch=<file[=<value>]> exclude devices with a matching attribute\n"
-                              "  --help                          print this text\n"
-                              "\n");
+                              "  --help\n\n");
                        goto exit;
                default:
                        goto exit;
@@ -209,7 +189,7 @@ int udevadm_trigger(struct udev *udev, int argc, char *argv[])
 
        switch (device_type) {
        case TYPE_FAILED:
-               enumerate_scan_failed(udev_enumerate);
+               scan_failed(udev_enumerate);
                exec_list(udev_enumerate, action);
                goto exit;
        case TYPE_SUBSYSTEMS: