summaryrefslogtreecommitdiff
path: root/src/udev/udevadm-control.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2018-08-24 21:55:19 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2018-09-10 18:27:36 +0900
commitbb291b7224ddcb627bc5950bbce1ff2d4cbecba6 (patch)
treefd04d9bfe0deaea03bec377f78395f9905481ce1 /src/udev/udevadm-control.c
parentb77200b6baa5e8eaee62a91eee404a244dc035fc (diff)
downloadsystemd-bb291b7224ddcb627bc5950bbce1ff2d4cbecba6.tar.gz
udevadm-control: modernize code a bit
Diffstat (limited to 'src/udev/udevadm-control.c')
-rw-r--r--src/udev/udevadm-control.c124
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;
}