From: Yu Watanabe Date: Sat, 13 Oct 2018 18:09:13 +0000 (+0900) Subject: udev-builtin: modernize code a bit X-Git-Tag: v240~493^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c45b369dd18b57afacd98e92007d76533d2fb474;p=thirdparty%2Fsystemd.git udev-builtin: modernize code a bit - introduce _UDEV_BUILTIN_INVALID, - use _UDEV_BUILTIN_MAX where applicable, - add several assertions. --- diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c index ef844a2d171..53f70dbfb4b 100644 --- a/src/udev/udev-builtin.c +++ b/src/udev/udev-builtin.c @@ -11,7 +11,7 @@ static bool initialized; -static const struct udev_builtin *builtins[] = { +static const struct udev_builtin *builtins[_UDEV_BUILTIN_MAX] = { #if HAVE_BLKID [UDEV_BUILTIN_BLKID] = &udev_builtin_blkid, #endif @@ -37,7 +37,7 @@ void udev_builtin_init(void) { if (initialized) return; - for (i = 0; i < ELEMENTSOF(builtins); i++) + for (i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i] && builtins[i]->init) builtins[i]->init(); @@ -50,7 +50,7 @@ void udev_builtin_exit(void) { if (!initialized) return; - for (i = 0; i < ELEMENTSOF(builtins); i++) + for (i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i] && builtins[i]->exit) builtins[i]->exit(); @@ -60,7 +60,7 @@ void udev_builtin_exit(void) { bool udev_builtin_validate(void) { unsigned i; - for (i = 0; i < ELEMENTSOF(builtins); i++) + for (i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i] && builtins[i]->validate && builtins[i]->validate()) return true; return false; @@ -69,12 +69,14 @@ bool udev_builtin_validate(void) { void udev_builtin_list(void) { unsigned i; - for (i = 0; i < ELEMENTSOF(builtins); i++) + for (i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i]) fprintf(stderr, " %-14s %s\n", builtins[i]->name, builtins[i]->help); } const char *udev_builtin_name(enum udev_builtin_cmd cmd) { + assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX); + if (!builtins[cmd]) return NULL; @@ -82,6 +84,8 @@ const char *udev_builtin_name(enum udev_builtin_cmd cmd) { } bool udev_builtin_run_once(enum udev_builtin_cmd cmd) { + assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX); + if (!builtins[cmd]) return false; @@ -96,15 +100,20 @@ enum udev_builtin_cmd udev_builtin_lookup(const char *command) { command += strspn(command, WHITESPACE); n = strcspn(command, WHITESPACE); - for (i = 0; i < ELEMENTSOF(builtins); i++) + for (i = 0; i < _UDEV_BUILTIN_MAX; i++) if (builtins[i] && strneq(builtins[i]->name, command, n)) return i; - return UDEV_BUILTIN_MAX; + + return _UDEV_BUILTIN_INVALID; } int udev_builtin_run(sd_device *dev, enum udev_builtin_cmd cmd, const char *command, bool test) { _cleanup_strv_free_ char **argv = NULL; + assert(dev); + assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX); + assert(command); + if (!builtins[cmd]) return -EOPNOTSUPP; @@ -120,6 +129,9 @@ int udev_builtin_run(sd_device *dev, enum udev_builtin_cmd cmd, const char *comm int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const char *val) { int r; + assert(dev); + assert(key); + r = device_add_property(dev, key, val); if (r < 0) return r; diff --git a/src/udev/udev-builtin.h b/src/udev/udev-builtin.h index a56cafac3c5..e51eefbfb5d 100644 --- a/src/udev/udev-builtin.h +++ b/src/udev/udev-builtin.h @@ -23,7 +23,8 @@ enum udev_builtin_cmd { #if HAVE_ACL UDEV_BUILTIN_UACCESS, #endif - UDEV_BUILTIN_MAX + _UDEV_BUILTIN_MAX, + _UDEV_BUILTIN_INVALID = -1, }; struct udev_builtin { diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 5cbc371a511..873f900349d 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -900,7 +900,7 @@ void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_ udev_event_apply_format(event, cmd, command, sizeof(command), false); - if (builtin_cmd < UDEV_BUILTIN_MAX) + if (builtin_cmd >= 0 && builtin_cmd < _UDEV_BUILTIN_MAX) udev_builtin_run(event->dev->device, builtin_cmd, command, false); else { if (event->exec_delay > 0) { diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index df55c032d0d..defa289782d 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -1228,7 +1228,7 @@ static void add_rule(struct udev_rules *rules, char *line, if (value[0] != '/') { const enum udev_builtin_cmd cmd = udev_builtin_lookup(value); - if (cmd < UDEV_BUILTIN_MAX) { + if (cmd >= 0) { LOG_RULE_DEBUG("IMPORT found builtin '%s', replacing", value); rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd); continue; @@ -1238,7 +1238,7 @@ static void add_rule(struct udev_rules *rules, char *line, } else if (streq(attr, "builtin")) { const enum udev_builtin_cmd cmd = udev_builtin_lookup(value); - if (cmd >= UDEV_BUILTIN_MAX) + if (cmd < 0) LOG_RULE_WARNING("IMPORT{builtin} '%s' unknown", value); else rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd); @@ -1276,12 +1276,12 @@ static void add_rule(struct udev_rules *rules, char *line, if (streq(attr, "builtin")) { const enum udev_builtin_cmd cmd = udev_builtin_lookup(value); - if (cmd < UDEV_BUILTIN_MAX) - rule_add_key(&rule_tmp, TK_A_RUN_BUILTIN, op, value, &cmd); - else + if (cmd < 0) LOG_RULE_ERROR("RUN{builtin}: '%s' unknown", value); + else + rule_add_key(&rule_tmp, TK_A_RUN_BUILTIN, op, value, &cmd); } else if (streq(attr, "program")) { - const enum udev_builtin_cmd cmd = UDEV_BUILTIN_MAX; + const enum udev_builtin_cmd cmd = _UDEV_BUILTIN_MAX; rule_add_key(&rule_tmp, TK_A_RUN_PROGRAM, op, value, &cmd); } else diff --git a/src/udev/udevadm-test-builtin.c b/src/udev/udevadm-test-builtin.c index a385f08cf79..01e6b9da959 100644 --- a/src/udev/udevadm-test-builtin.c +++ b/src/udev/udevadm-test-builtin.c @@ -86,7 +86,7 @@ int builtin_main(int argc, char *argv[], void *userdata) { udev_builtin_init(); cmd = udev_builtin_lookup(arg_command); - if (cmd >= UDEV_BUILTIN_MAX) { + if (cmd < 0) { log_error("Unknown command '%s'", arg_command); r = -EINVAL; goto finish;