]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udevadm: introduce parse_resolve_name_timing()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 2 Feb 2025 06:24:17 +0000 (15:24 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 2 Feb 2025 06:55:01 +0000 (15:55 +0900)
src/udev/udevadm-test.c
src/udev/udevadm-util.c
src/udev/udevadm-util.h
src/udev/udevadm-verify.c

index a6da337d7cb5114a32ba2622e01e303b93385bb8..c00cc67d7c046b7541e6c459455cc6f7db016d95 100644 (file)
@@ -64,10 +64,9 @@ static int parse_argv(int argc, char *argv[]) {
                                 return r;
                         break;
                 case 'N':
-                        arg_resolve_name_timing = resolve_name_timing_from_string(optarg);
-                        if (arg_resolve_name_timing < 0)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "--resolve-names= must be early, late or never");
+                        r = parse_resolve_name_timing(optarg, &arg_resolve_name_timing);
+                        if (r <= 0)
+                                return r;
                         break;
                 case 'D': {
                         _cleanup_free_ char *p = NULL;
index 858c23f586d2b37b48a9f327975ce414b460937c..bc7b277d91bfda59e1d67ab4d589d0a0ee82dd68 100644 (file)
@@ -12,6 +12,7 @@
 #include "path-util.h"
 #include "string-table.h"
 #include "udev-ctrl.h"
+#include "udev-rules.h"
 #include "udev-varlink.h"
 #include "udevadm-util.h"
 #include "unit-name.h"
@@ -127,6 +128,21 @@ int parse_device_action(const char *str, sd_device_action_t *ret) {
         return 1;
 }
 
+int parse_resolve_name_timing(const char *str, ResolveNameTiming *ret) {
+        assert(str);
+
+        if (streq(str, "help"))
+                return DUMP_STRING_TABLE(resolve_name_timing, ResolveNameTiming, _RESOLVE_NAME_TIMING_MAX);
+
+        ResolveNameTiming v = resolve_name_timing_from_string(optarg);
+        if (v < 0)
+                return log_error_errno(v, "--resolve-names= must be 'early', 'late', or 'never'.");
+
+        if (ret)
+                *ret = v;
+        return 1;
+}
+
 static int udev_ping_via_ctrl(usec_t timeout_usec, bool ignore_connection_failure) {
         _cleanup_(udev_ctrl_unrefp) UdevCtrl *uctrl = NULL;
         int r;
index 084629850228e4628c223963c56a448d298ff6a7..cd0dcacf3c719077b335eab7e4250beaf096350c 100644 (file)
@@ -3,8 +3,11 @@
 
 #include "sd-device.h"
 
+#include "udev-def.h"
+
 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 *ret);
+int parse_resolve_name_timing(const char *str, ResolveNameTiming *ret);
 int udev_ping(usec_t timeout, bool ignore_connection_failure);
 int search_rules_files(char * const *a, const char *root, char ***ret);
index fb8cdee4f243d48f453a46cdc23125c9ba90d0fb..9286a632e83b1f0e5c1703c98fb4be8d7608a0e1 100644 (file)
@@ -77,10 +77,9 @@ static int parse_argv(int argc, char *argv[]) {
                 case 'V':
                         return print_version();
                 case 'N':
-                        arg_resolve_name_timing = resolve_name_timing_from_string(optarg);
-                        if (arg_resolve_name_timing < 0)
-                                return log_error_errno(arg_resolve_name_timing,
-                                                       "--resolve-names= takes \"early\" or \"never\"");
+                        r = parse_resolve_name_timing(optarg, &arg_resolve_name_timing);
+                        if (r <= 0)
+                                return r;
                         /*
                          * In the verifier "late" has the effect of "never",
                          * and "never" would generate irrelevant diagnostics,