]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
devnum-util: split-out device_path_make_inaccessible()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 27 Aug 2022 19:15:35 +0000 (04:15 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 28 Aug 2022 00:08:21 +0000 (09:08 +0900)
src/basic/devnum-util.c
src/basic/devnum-util.h

index 70c07315c599f6743a11b3d76d171da7b2c36cc2..bd1b4d6c3901f50d6967622ee6361bac639cf620 100644 (file)
@@ -57,6 +57,24 @@ int device_path_make_major_minor(mode_t mode, dev_t devnum, char **ret) {
         return 0;
 }
 
+int device_path_make_inaccessible(mode_t mode, char **ret) {
+        char *s;
+
+        assert(ret);
+
+        if (S_ISCHR(mode))
+                s = strdup("/run/systemd/inaccessible/chr");
+        else if (S_ISBLK(mode))
+                s = strdup("/run/systemd/inaccessible/blk");
+        else
+                return -ENODEV;
+        if (!s)
+                return -ENOMEM;
+
+        *ret = s;
+        return 0;
+}
+
 int device_path_make_canonical(mode_t mode, dev_t devnum, char **ret) {
         _cleanup_free_ char *p = NULL;
         int r;
@@ -65,25 +83,10 @@ int device_path_make_canonical(mode_t mode, dev_t devnum, char **ret) {
 
         assert(ret);
 
-        if (major(devnum) == 0 && minor(devnum) == 0) {
-                char *s;
-
+        if (major(devnum) == 0 && minor(devnum) == 0)
                 /* A special hack to make sure our 'inaccessible' device nodes work. They won't have symlinks in
                  * /dev/block/ and /dev/char/, hence we handle them specially here. */
-
-                if (S_ISCHR(mode))
-                        s = strdup("/run/systemd/inaccessible/chr");
-                else if (S_ISBLK(mode))
-                        s = strdup("/run/systemd/inaccessible/blk");
-                else
-                        return -ENODEV;
-
-                if (!s)
-                        return -ENOMEM;
-
-                *ret = s;
-                return 0;
-        }
+                return device_path_make_inaccessible(mode, ret);
 
         r = device_path_make_major_minor(mode, devnum, &p);
         if (r < 0)
index 3f1894b2fd7875d8e0e54a05fa92446bb0314c1a..38aa4efa87b602a4771e1b3c6ee99b01fa7e2193 100644 (file)
@@ -29,6 +29,7 @@ int parse_devnum(const char *s, dev_t *ret);
         })
 
 int device_path_make_major_minor(mode_t mode, dev_t devnum, char **ret);
+int device_path_make_inaccessible(mode_t mode, char **ret);
 int device_path_make_canonical(mode_t mode, dev_t devnum, char **ret);
 int device_path_parse_major_minor(const char *path, mode_t *ret_mode, dev_t *ret_devnum);