diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-08-24 21:55:19 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-09-10 18:27:36 +0900 |
commit | bb291b7224ddcb627bc5950bbce1ff2d4cbecba6 (patch) | |
tree | fd04d9bfe0deaea03bec377f78395f9905481ce1 /src/udev/udevadm-control.c | |
parent | b77200b6baa5e8eaee62a91eee404a244dc035fc (diff) | |
download | systemd-bb291b7224ddcb627bc5950bbce1ff2d4cbecba6.tar.gz |
udevadm-control: modernize code a bit
Diffstat (limited to 'src/udev/udevadm-control.c')
-rw-r--r-- | src/udev/udevadm-control.c | 124 |
1 files changed, 60 insertions, 64 deletions
diff --git a/src/udev/udevadm-control.c b/src/udev/udevadm-control.c index 9c6cec14e8..68c6b8104c 100644 --- a/src/udev/udevadm-control.c +++ b/src/udev/udevadm-control.c @@ -19,13 +19,13 @@ #include <string.h> #include <unistd.h> +#include "parse-util.h" #include "process-util.h" #include "time-util.h" #include "udev.h" #include "udevadm.h" -#include "udevadm-util.h" -static void print_help(void) { +static int help(void) { printf("%s control OPTION\n\n" "Control the udev daemon.\n\n" " -h --help Show this help\n" @@ -39,12 +39,14 @@ static void print_help(void) { " -m --children-max=N Maximum number of children\n" " -t --timeout=SECONDS Maximum time to block for a reply\n" , program_invocation_short_name); + + return 0; } int control_main(int argc, char *argv[], void *userdata) { _cleanup_(udev_ctrl_unrefp) struct udev_ctrl *uctrl = NULL; int timeout = 60; - int rc = 1, c; + int c, r; static const struct option options[] = { { "exit", no_argument, NULL, 'e' }, @@ -62,80 +64,73 @@ int control_main(int argc, char *argv[], void *userdata) { {} }; - if (must_be_root() < 0) - return 1; + r = must_be_root(); + if (r < 0) + return r; + + if (argc <= 1) + log_error("Option missing"); uctrl = udev_ctrl_new(); - if (uctrl == NULL) - return 2; + if (!uctrl) + return -ENOMEM; while ((c = getopt_long(argc, argv, "el:sSRp:m:t:Vh", options, NULL)) >= 0) switch (c) { case 'e': - if (udev_ctrl_send_exit(uctrl, timeout) < 0) - rc = 2; - else - rc = 0; + r = udev_ctrl_send_exit(uctrl, timeout); + if (r < 0) + return r; break; case 'l': { int i; i = util_log_priority(optarg); - if (i < 0) { - log_error("invalid number '%s'", optarg); - return rc; - } - if (udev_ctrl_send_set_log_level(uctrl, util_log_priority(optarg), timeout) < 0) - rc = 2; - else - rc = 0; + if (i < 0) + return log_error_errno(i, "invalid number '%s'", optarg); + + r = udev_ctrl_send_set_log_level(uctrl, i, timeout); + if (r < 0) + return r; break; } case 's': - if (udev_ctrl_send_stop_exec_queue(uctrl, timeout) < 0) - rc = 2; - else - rc = 0; + r = udev_ctrl_send_stop_exec_queue(uctrl, timeout); + if (r < 0) + return r; break; case 'S': - if (udev_ctrl_send_start_exec_queue(uctrl, timeout) < 0) - rc = 2; - else - rc = 0; + r = udev_ctrl_send_start_exec_queue(uctrl, timeout); + if (r < 0) + return r; break; case 'R': - if (udev_ctrl_send_reload(uctrl, timeout) < 0) - rc = 2; - else - rc = 0; + r = udev_ctrl_send_reload(uctrl, timeout); + if (r < 0) + return r; break; case 'p': - if (strchr(optarg, '=') == NULL) { + if (!strchr(optarg, '=')) { log_error("expect <KEY>=<value> instead of '%s'", optarg); - return rc; + return -EINVAL; } - if (udev_ctrl_send_set_env(uctrl, optarg, timeout) < 0) - rc = 2; - else - rc = 0; + r = udev_ctrl_send_set_env(uctrl, optarg, timeout); + if (r < 0) + return r; break; case 'm': { - char *endp; - int i; + unsigned i; - i = strtoul(optarg, &endp, 0); - if (endp[0] != '\0' || i < 1) { - log_error("invalid number '%s'", optarg); - return rc; - } - if (udev_ctrl_send_set_children_max(uctrl, i, timeout) < 0) - rc = 2; - else - rc = 0; + r = safe_atou(optarg, &i); + if (r < 0) + return log_error_errno(r, "Failed to parse maximum number of events '%s': %m", optarg); + + r = udev_ctrl_send_set_children_max(uctrl, i, timeout); + if (r < 0) + return r; break; } case 't': { - int r, seconds; usec_t s; r = parse_sec(optarg, &s); @@ -143,27 +138,28 @@ int control_main(int argc, char *argv[], void *userdata) { return log_error_errno(r, "Failed to parse timeout value '%s'.", optarg); if (DIV_ROUND_UP(s, USEC_PER_SEC) > INT_MAX) - log_error("Timeout value is out of range."); - else { - seconds = s != USEC_INFINITY ? (int) DIV_ROUND_UP(s, USEC_PER_SEC) : INT_MAX; - timeout = seconds; - rc = 0; - } + log_error("Timeout value is out of range, ignoring."); + else + timeout = s != USEC_INFINITY ? (int) DIV_ROUND_UP(s, USEC_PER_SEC) : INT_MAX; break; } case 'V': - print_version(); - rc = 0; - break; + return version(); case 'h': - print_help(); - rc = 0; - break; + return help(); + case '?': + return -EINVAL; + default: + assert_not_reached("Unknown option."); } - if (optind < argc) + if (optind < argc) { log_error("Extraneous argument: %s", argv[optind]); - else if (optind == 1) + return -EINVAL; + } else if (optind == 1) { log_error("Option missing"); - return rc; + return -EINVAL; + } + + return 0; } |