]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: split link_update() and introduce stack_directory_get_name()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 11 Apr 2022 02:26:08 +0000 (11:26 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 2 Sep 2022 20:01:51 +0000 (05:01 +0900)
No functionality is changed.

src/udev/udev-node.c

index 79d050cce68551bf157915740c2c66dbf192d62d..b4b865c021fd47f6075bf3eb2ecb284a0411e211 100644 (file)
@@ -414,33 +414,47 @@ toolong:
         return size - 1;
 }
 
-/* manage "stack of names" with possibly specified device priorities */
-static int link_update(sd_device *dev, const char *slink_in, bool add) {
-        _cleanup_free_ char *slink = NULL, *dirname = NULL;
-        const char *slink_name;
+static int stack_directory_get_name(const char *slink, char **ret) {
+        _cleanup_free_ char *s = NULL, *dirname = NULL;
         char name_enc[NAME_MAX+1];
-        int r;
+        const char *name;
 
-        assert(dev);
-        assert(slink_in);
+        assert(slink);
+        assert(ret);
 
-        slink = strdup(slink_in);
-        if (!slink)
-                return log_oom_debug();
+        s = strdup(slink);
+        if (!s)
+                return -ENOMEM;
 
-        path_simplify(slink);
+        path_simplify(s);
 
-        slink_name = path_startswith(slink, "/dev");
-        if (!slink_name ||
-            empty_or_root(slink_name) ||
-            !path_is_normalized(slink_name))
-                return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL),
-                                              "Invalid symbolic link of device node: %s", slink);
+        if (!path_is_normalized(s))
+                return -EINVAL;
+
+        name = path_startswith(s, "/dev");
+        if (empty_or_root(name))
+                return -EINVAL;
+
+        udev_node_escape_path(name, name_enc, sizeof(name_enc));
 
-        (void) udev_node_escape_path(slink_name, name_enc, sizeof(name_enc));
         dirname = path_join("/run/udev/links", name_enc);
         if (!dirname)
-                return log_oom_debug();
+                return -ENOMEM;
+
+        *ret = TAKE_PTR(dirname);
+        return 0;
+}
+
+static int link_update(sd_device *dev, const char *slink, bool add) {
+        _cleanup_free_ char *dirname = NULL;
+        int r;
+
+        assert(dev);
+        assert(slink);
+
+        r = stack_directory_get_name(slink, &dirname);
+        if (r < 0)
+                return log_device_debug_errno(dev, r, "Failed to build stack directory name for '%s': %m", slink);
 
         r = update_stack_directory(dev, dirname, add);
         if (r < 0)