chiark / gitweb /
udevadm: settle - fix typo
[elogind.git] / udev / udevd.c
index 9a278ce1f39023487edbbda54a5a2d9afe8f1d66..d08cf30f29b806340f3e5099193fc831a607314d 100644 (file)
@@ -645,12 +645,14 @@ int main(int argc, char *argv[])
        struct sigaction act;
        const char *value;
        int daemonize = 0;
        struct sigaction act;
        const char *value;
        int daemonize = 0;
+       int resolve_names = 1;
        static const struct option options[] = {
                { "daemon", no_argument, NULL, 'd' },
                { "debug-trace", no_argument, NULL, 't' },
                { "debug", no_argument, NULL, 'D' },
                { "help", no_argument, NULL, 'h' },
                { "version", no_argument, NULL, 'V' },
        static const struct option options[] = {
                { "daemon", no_argument, NULL, 'd' },
                { "debug-trace", no_argument, NULL, 't' },
                { "debug", no_argument, NULL, 'D' },
                { "help", no_argument, NULL, 'h' },
                { "version", no_argument, NULL, 'V' },
+               { "resolve-names", required_argument, NULL, 'N' },
                {}
        };
        int rc = 1;
                {}
        };
        int rc = 1;
@@ -683,8 +685,22 @@ int main(int argc, char *argv[])
                        if (udev_get_log_priority(udev) < LOG_INFO)
                                udev_set_log_priority(udev, LOG_INFO);
                        break;
                        if (udev_get_log_priority(udev) < LOG_INFO)
                                udev_set_log_priority(udev, LOG_INFO);
                        break;
+               case 'N':
+                       if (strcmp (optarg, "early") == 0) {
+                               resolve_names = 1;
+                       } else if (strcmp (optarg, "late") == 0) {
+                               resolve_names = 0;
+                       } else if (strcmp (optarg, "never") == 0) {
+                               resolve_names = -1;
+                       } else {
+                               fprintf(stderr, "resolve-names must be early, late or never\n");
+                               err(udev, "resolve-names must be early, late or never\n");
+                               goto exit;
+                       }
+                       break;
                case 'h':
                case 'h':
-                       printf("Usage: udevd [--help] [--daemon] [--debug-trace] [--debug] [--version]\n");
+                       printf("Usage: udevd [--help] [--daemon] [--debug-trace] [--debug] "
+                              "[--resolve-names=early|late|never] [--version]\n");
                        goto exit;
                case 'V':
                        printf("%s\n", VERSION);
                        goto exit;
                case 'V':
                        printf("%s\n", VERSION);
@@ -736,7 +752,7 @@ int main(int argc, char *argv[])
        }
        udev_monitor_set_receive_buffer_size(kernel_monitor, 128*1024*1024);
 
        }
        udev_monitor_set_receive_buffer_size(kernel_monitor, 128*1024*1024);
 
-       rules = udev_rules_new(udev, 1);
+       rules = udev_rules_new(udev, resolve_names);
        if (rules == NULL) {
                err(udev, "error reading rules\n");
                goto exit;
        if (rules == NULL) {
                err(udev, "error reading rules\n");
                goto exit;
@@ -815,6 +831,7 @@ int main(int argc, char *argv[])
        memset(&act, 0x00, sizeof(struct sigaction));
        act.sa_handler = (void (*)(int)) sig_handler;
        sigemptyset(&act.sa_mask);
        memset(&act, 0x00, sizeof(struct sigaction));
        act.sa_handler = (void (*)(int)) sig_handler;
        sigemptyset(&act.sa_mask);
+       act.sa_flags = SA_RESTART;
        sigaction(SIGINT, &act, NULL);
        sigaction(SIGTERM, &act, NULL);
        sigaction(SIGCHLD, &act, NULL);
        sigaction(SIGINT, &act, NULL);
        sigaction(SIGTERM, &act, NULL);
        sigaction(SIGCHLD, &act, NULL);
@@ -946,7 +963,7 @@ handle_signals:
                        struct udev_rules *rules_new;
 
                        reload_config = 0;
                        struct udev_rules *rules_new;
 
                        reload_config = 0;
-                       rules_new = udev_rules_new(udev, 1);
+                       rules_new = udev_rules_new(udev, resolve_names);
                        if (rules_new != NULL) {
                                udev_rules_unref(rules);
                                rules = rules_new;
                        if (rules_new != NULL) {
                                udev_rules_unref(rules);
                                rules = rules_new;