]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udevadm: introduce parse_device_action() helper function
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 17 Aug 2021 13:57:04 +0000 (22:57 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 17 Aug 2021 14:22:26 +0000 (23:22 +0900)
src/udev/udevadm-test.c
src/udev/udevadm-trigger.c
src/udev/udevadm-util.c
src/udev/udevadm-util.h

index 5d1e0d11b8b721ac5f4a415f2a02eda1796a7832..01057e12563b1d11b6d991bfbb454b2b5152d1ec 100644 (file)
@@ -50,25 +50,17 @@ static int parse_argv(int argc, char *argv[]) {
                 {}
         };
 
-        int c;
+        int r, c;
 
         while ((c = getopt_long(argc, argv, "a:N:Vh", options, NULL)) >= 0)
                 switch (c) {
-                case 'a': {
-                        sd_device_action_t a;
-
-                        if (streq(optarg, "help")) {
-                                dump_device_action_table();
+                case 'a':
+                        r = parse_device_action(optarg, &arg_action);
+                        if (r < 0)
+                                return log_error_errno(r, "Invalid action '%s'", optarg);
+                        if (r == 0)
                                 return 0;
-                        }
-
-                        a = device_action_from_string(optarg);
-                        if (a < 0)
-                                return log_error_errno(a, "Invalid action '%s'", optarg);
-
-                        arg_action = a;
                         break;
-                }
                 case 'N':
                         arg_resolve_name_timing = resolve_name_timing_from_string(optarg);
                         if (arg_resolve_name_timing < 0)
index a24073fb734104857b247c727891aa7ed75bc6f6..7c121c369bcb86b67337c1912563fbab2b779f9c 100644 (file)
@@ -312,17 +312,13 @@ int trigger_main(int argc, char *argv[], void *userdata) {
                         else
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown type --type=%s", optarg);
                         break;
-                case 'c': {
-                        if (streq(optarg, "help")) {
-                                dump_device_action_table();
+                case 'c':
+                        r = parse_device_action(optarg, &action);
+                        if (r < 0)
+                                return log_error_errno(r, "Unknown action '%s'", optarg);
+                        if (r == 0)
                                 return 0;
-                        }
-
-                        action = device_action_from_string(optarg);
-                        if (action < 0)
-                                return log_error_errno(action, "Unknown action '%s'", optarg);
                         break;
-                }
                 case 's':
                         r = sd_device_enumerator_add_match_subsystem(e, optarg, true);
                         if (r < 0)
index 6be0e7356046483aaa4f93840e558d4c6f3886b8..9649e5a2075b9672913152f5c654043dc8550956 100644 (file)
@@ -110,3 +110,22 @@ int find_device_with_action(const char *id, sd_device_action_t action, sd_device
 
         return device_new_from_synthetic_event(ret, id, device_action_to_string(action));
 }
+
+int parse_device_action(const char *str, sd_device_action_t *action) {
+        sd_device_action_t a;
+
+        assert(str);
+        assert(action);
+
+        if (streq(str, "help")) {
+                dump_device_action_table();
+                return 0;
+        }
+
+        a = device_action_from_string(str);
+        if (a < 0)
+                return a;
+
+        *action = a;
+        return 1;
+}
index 91663fdf3ea97e48eace4816063a2fa4ca8d1040..7fb4556413475b2b7ed44a203a35f72d522bebcf 100644 (file)
@@ -5,3 +5,4 @@
 
 int find_device(const char *id, const char *prefix, sd_device **ret);
 int find_device_with_action(const char *id, sd_device_action_t action, sd_device **ret);
+int parse_device_action(const char *str, sd_device_action_t *action);