X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fudevadm.c;h=56cd0cd4ec542b572f583402cf4d20c27a2380e4;hb=6cb8e687f038424ef54b5c5c3c433be974fbe371;hp=55b5948aaebc46a8573476b82ac3df8880520782;hpb=baa30fbc2c04b23209d0b8fb3c86cd15ef9ea81a;p=elogind.git diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c index 55b5948aa..56cd0cd4e 100644 --- a/src/udev/udevadm.c +++ b/src/udev/udevadm.c @@ -1,5 +1,6 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /* - * Copyright (C) 2007-2012 Kay Sievers + * Copyright (C) 2007-2012 Kay Sievers * * 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 @@ -23,17 +24,10 @@ #include #include +#include "selinux-util.h" #include "udev.h" -void udev_main_log(struct udev *udev, int priority, - const char *file, int line, const char *fn, - const char *format, va_list args) -{ - log_metav(priority, file, line, fn, format, args); -} - -static int adm_version(struct udev *udev, int argc, char *argv[]) -{ +static int adm_version(struct udev *udev, int argc, char *argv[]) { printf("%s\n", VERSION); return 0; } @@ -56,34 +50,35 @@ static const struct udevadm_cmd *udevadm_cmds[] = { &udevadm_settle, &udevadm_control, &udevadm_monitor, + &udevadm_hwdb, &udevadm_test, &udevadm_test_builtin, &udevadm_version, &udevadm_help, }; -static int adm_help(struct udev *udev, int argc, char *argv[]) -{ +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++) + printf("%s [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]\n\n" + "Send control commands or test the device manager.\n\n" + "Commands:\n" + , program_invocation_short_name); + + 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"); + printf(" %-12s %s\n", udevadm_cmds[i]->name, udevadm_cmds[i]->help); return 0; } -static int run_command(struct udev *udev, const struct udevadm_cmd *cmd, int argc, char *argv[]) -{ +static int run_command(struct udev *udev, const struct udevadm_cmd *cmd, int argc, char *argv[]) { if (cmd->debug) log_set_max_level(LOG_DEBUG); - log_debug("calling: %s\n", cmd->name); + log_debug("calling: %s", cmd->name); return cmd->cmd(udev, argc, argv); } -int main(int argc, char *argv[]) -{ +int main(int argc, char *argv[]) { struct udev *udev; static const struct option options[] = { { "debug", no_argument, NULL, 'd' }, @@ -93,59 +88,52 @@ int main(int argc, char *argv[]) }; const char *command; unsigned int i; - int rc = 1; + int rc = 1, c; udev = udev_new(); if (udev == NULL) goto out; - log_open(); log_parse_environment(); - udev_set_log_fn(udev, udev_main_log); - udev_selinux_init(udev); - - for (;;) { - int option; + log_open(); + mac_selinux_init("/dev"); - option = getopt_long(argc, argv, "+dhV", options, NULL); - if (option == -1) - break; + while ((c = getopt_long(argc, argv, "+dhV", options, NULL)) >= 0) + switch (c) { - switch (option) { case 'd': log_set_max_level(LOG_DEBUG); - udev_set_log_priority(udev, LOG_DEBUG); break; + case 'h': rc = adm_help(udev, argc, argv); goto out; + case 'V': rc = adm_version(udev, argc, argv); goto out; + default: goto out; } - } - command = argv[optind]; - log_debug("runtime dir '%s'\n", udev_get_run_path(udev)); + command = argv[optind]; 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; } - } - fprintf(stderr, "missing or unknown command\n\n"); - adm_help(udev, argc, argv); + fprintf(stderr, "%s: missing or unknown command\n", program_invocation_short_name); rc = 2; out: - udev_selinux_exit(udev); + mac_selinux_finish(); udev_unref(udev); log_close(); return rc;