chiark / gitweb /
getty-generator: fix stripping /dev/
[elogind.git] / src / udev / udevadm.c
index 224ece0bb707ccf3e01360506887c1d656979390..e14b3ca27c0248f9c063a38f13e65f1e872a7846 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2009 Kay Sievers <kay.sievers@vrfy.org>
+ * Copyright (C) 2007-2012 Kay Sievers <kay@vrfy.org>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 
 #include "udev.h"
 
-static bool debug;
-
 void udev_main_log(struct udev *udev, int priority,
                    const char *file, int line, const char *fn,
                    const char *format, va_list args)
 {
-        if (debug) {
-                fprintf(stderr, "%s: ", fn);
-                vfprintf(stderr, format, args);
-        } else {
-                va_list args2;
-
-                va_copy(args2, args);
-                vfprintf(stderr, format, args2);
-                va_end(args2);
-                vsyslog(priority, format, args);
-        }
+        log_metav(priority, file, line, fn, format, args);
 }
 
 static int adm_version(struct udev *udev, int argc, char *argv[])
@@ -49,12 +37,14 @@ static int adm_version(struct udev *udev, int argc, char *argv[])
         printf("%s\n", VERSION);
         return 0;
 }
+
 static const struct udevadm_cmd udevadm_version = {
         .name = "version",
         .cmd = adm_version,
 };
 
 static int adm_help(struct udev *udev, int argc, char *argv[]);
+
 static const struct udevadm_cmd udevadm_help = {
         .name = "help",
         .cmd = adm_help,
@@ -66,6 +56,7 @@ static const struct udevadm_cmd *udevadm_cmds[] = {
         &udevadm_settle,
         &udevadm_control,
         &udevadm_monitor,
+        &udevadm_hwdb,
         &udevadm_test,
         &udevadm_test_builtin,
         &udevadm_version,
@@ -77,7 +68,7 @@ static int adm_help(struct udev *udev, int argc, char *argv[])
         unsigned int i;
 
         fprintf(stderr, "Usage: udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]\n");
-        for (i = 0; i < ARRAY_SIZE(udevadm_cmds); i++)
+        for (i = 0; i < ELEMENTSOF(udevadm_cmds); i++)
                 if (udevadm_cmds[i]->help != NULL)
                         printf("  %-12s %s\n", udevadm_cmds[i]->name, udevadm_cmds[i]->help);
         fprintf(stderr, "\n");
@@ -86,12 +77,9 @@ static int adm_help(struct udev *udev, int argc, char *argv[])
 
 static int run_command(struct udev *udev, const struct udevadm_cmd *cmd, int argc, char *argv[])
 {
-        if (cmd->debug) {
-                debug = true;
-                if (udev_get_log_priority(udev) < LOG_INFO)
-                        udev_set_log_priority(udev, LOG_INFO);
-        }
-        info(udev, "calling: %s\n", cmd->name);
+        if (cmd->debug)
+                log_set_max_level(LOG_DEBUG);
+        log_debug("calling: %s\n", cmd->name);
         return cmd->cmd(udev, argc, argv);
 }
 
@@ -112,9 +100,10 @@ int main(int argc, char *argv[])
         if (udev == NULL)
                 goto out;
 
-        udev_log_init("udevadm");
+        log_parse_environment();
+        log_open();
         udev_set_log_fn(udev, udev_main_log);
-        udev_selinux_init(udev);
+        label_init("/dev");
 
         for (;;) {
                 int option;
@@ -125,9 +114,8 @@ int main(int argc, char *argv[])
 
                 switch (option) {
                 case 'd':
-                        debug = true;
-                        if (udev_get_log_priority(udev) < LOG_INFO)
-                                udev_set_log_priority(udev, LOG_INFO);
+                        log_set_max_level(LOG_DEBUG);
+                        udev_set_log_priority(udev, LOG_DEBUG);
                         break;
                 case 'h':
                         rc = adm_help(udev, argc, argv);
@@ -141,13 +129,12 @@ int main(int argc, char *argv[])
         }
         command = argv[optind];
 
-        info(udev, "runtime dir '%s'\n", udev_get_run_path(udev));
-
         if (command != NULL)
-                for (i = 0; i < ARRAY_SIZE(udevadm_cmds); i++) {
-                        if (strcmp(udevadm_cmds[i]->name, command) == 0) {
+                for (i = 0; i < ELEMENTSOF(udevadm_cmds); i++) {
+                        if (streq(udevadm_cmds[i]->name, command)) {
                                 argc -= optind;
                                 argv += optind;
+                                /* we need '0' here to reset the internal state */
                                 optind = 0;
                                 rc = run_command(udev, udevadm_cmds[i], argc, argv);
                                 goto out;
@@ -158,8 +145,8 @@ int main(int argc, char *argv[])
         adm_help(udev, argc, argv);
         rc = 2;
 out:
-        udev_selinux_exit(udev);
+        label_finish();
         udev_unref(udev);
-        udev_log_close();
+        log_close();
         return rc;
 }