]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Add a helper for /dev/block/major:minor paths
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 31 Oct 2017 10:30:40 +0000 (11:30 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 30 Nov 2017 11:59:23 +0000 (12:59 +0100)
src/basic/device-nodes.h
src/shared/bootspec.c
src/udev/udev-node.c

index 9f3c6d60c080dd30b5e26dc4d59d0fdee6fae3fe..6136526f84f8445268e785d4b78594fcc6cfb61b 100644 (file)
@@ -33,3 +33,8 @@ int whitelisted_char_for_devnode(char c, const char *additional);
         (strlen("/sys/dev/block/") + DECIMAL_STR_MAX(dev_t) + 1 + DECIMAL_STR_MAX(dev_t) + strlen_ptr(suffix))
 #define xsprintf_sys_block_path(buf, suffix, devno)                     \
         xsprintf(buf, "/sys/dev/block/%u:%u%s", major(devno), minor(devno), strempty(suffix))
+
+#define DEV_NUM_PATH_MAX                                                \
+        (strlen("/dev/block/") + DECIMAL_STR_MAX(dev_t) + 1 + DECIMAL_STR_MAX(dev_t))
+#define xsprintf_dev_num_path(buf, type, devno)                         \
+        xsprintf(buf, "/dev/%s/%u:%u", type, major(devno), minor(devno))
index 9f80db068de1792de184956bf7637a508b8e0e7e..aa722c304a08fe1b60e467db30bf55078ebb6286 100644 (file)
@@ -25,6 +25,7 @@
 #include "bootspec.h"
 #include "conf-files.h"
 #include "def.h"
+#include "device-nodes.h"
 #include "efivars.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -420,7 +421,7 @@ static int verify_esp(
                 sd_id128_t *ret_uuid) {
 
         _cleanup_blkid_free_probe_ blkid_probe b = NULL;
-        _cleanup_free_ char *t = NULL;
+        char t[DEV_NUM_PATH_MAX];
         uint64_t pstart = 0, psize = 0;
         struct stat st, st2;
         const char *v, *t2;
@@ -478,10 +479,7 @@ static int verify_esp(
         if (detect_container() > 0 || geteuid() != 0)
                 goto finish;
 
-        r = asprintf(&t, "/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
-        if (r < 0)
-                return log_oom();
-
+        xsprintf_dev_num_path(t, "block", st.st_dev);
         errno = 0;
         b = blkid_new_probe_from_filename(t);
         if (!b)
index dcea890d7f8a09ac95bf5e1a77e61d0cbd06651f..ef893247adef8631aef94d1cd120a465eab3882e 100644 (file)
@@ -25,6 +25,7 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
+#include "device-nodes.h"
 #include "dirent-util.h"
 #include "format-util.h"
 #include "fs-util.h"
@@ -337,7 +338,7 @@ out:
 void udev_node_add(struct udev_device *dev, bool apply,
                    mode_t mode, uid_t uid, gid_t gid,
                    struct udev_list *seclabel_list) {
-        char filename[sizeof("/dev/block/:") + 2*DECIMAL_STR_MAX(unsigned)];
+        char filename[DEV_NUM_PATH_MAX];
         struct udev_list_entry *list_entry;
 
         log_debug("handling device node '%s', devnum=%s, mode=%#o, uid="UID_FMT", gid="GID_FMT,
@@ -347,10 +348,9 @@ void udev_node_add(struct udev_device *dev, bool apply,
                 return;
 
         /* always add /dev/{block,char}/$major:$minor */
-        xsprintf(filename, "/dev/%s/%u:%u",
-                 streq(udev_device_get_subsystem(dev), "block") ? "block" : "char",
-                 major(udev_device_get_devnum(dev)),
-                 minor(udev_device_get_devnum(dev)));
+        xsprintf_dev_num_path(filename,
+                              streq(udev_device_get_subsystem(dev), "block") ? "block" : "char",
+                              udev_device_get_devnum(dev));
         node_symlink(dev, udev_device_get_devnode(dev), filename);
 
         /* create/update symlinks, add symlinks to name index */
@@ -360,16 +360,15 @@ void udev_node_add(struct udev_device *dev, bool apply,
 
 void udev_node_remove(struct udev_device *dev) {
         struct udev_list_entry *list_entry;
-        char filename[sizeof("/dev/block/:") + 2*DECIMAL_STR_MAX(unsigned)];
+        char filename[DEV_NUM_PATH_MAX];
 
         /* remove/update symlinks, remove symlinks from name index */
         udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev))
                 link_update(dev, udev_list_entry_get_name(list_entry), false);
 
         /* remove /dev/{block,char}/$major:$minor */
-        xsprintf(filename, "/dev/%s/%u:%u",
-                 streq(udev_device_get_subsystem(dev), "block") ? "block" : "char",
-                 major(udev_device_get_devnum(dev)),
-                 minor(udev_device_get_devnum(dev)));
+        xsprintf_dev_num_path(filename,
+                              streq(udev_device_get_subsystem(dev), "block") ? "block" : "char",
+                              udev_device_get_devnum(dev));
         unlink(filename);
 }