]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev-builtin: modernize code a bit
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 13 Oct 2018 18:09:13 +0000 (03:09 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 23 Oct 2018 09:28:38 +0000 (18:28 +0900)
- introduce _UDEV_BUILTIN_INVALID,
- use _UDEV_BUILTIN_MAX where applicable,
- add several assertions.

src/udev/udev-builtin.c
src/udev/udev-builtin.h
src/udev/udev-event.c
src/udev/udev-rules.c
src/udev/udevadm-test-builtin.c

index ef844a2d171bb55d0caac0f147f0e2b9ec9aee83..53f70dbfb4bd8b99566e967bad287b8fb3e5b933 100644 (file)
@@ -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;
index a56cafac3c5516b8d88d2c135419b0661dfcfda8..e51eefbfb5d09f3b523abf67507e6be107346827 100644 (file)
@@ -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 {
index 5cbc371a511de5879ec3acc74a49dc5d3e617ab7..873f900349d53698bdb1eb200e9aae4553fa6ba5 100644 (file)
@@ -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) {
index df55c032d0d81956351aba1db29185fe0f732f73..defa289782d9d5ceac2b1d04ca008f0e78af78fc 100644 (file)
@@ -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
index a385f08cf797c1f4240ecbb825e778ea26219c91..01e6b9da9598cfd12cb0d048cb78207bc13af679 100644 (file)
@@ -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;