]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
util: split get_maj_min() out from dev_open()
authorNeilBrown <neilb@suse.de>
Mon, 11 Aug 2014 00:27:31 +0000 (10:27 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 11 Aug 2014 00:34:36 +0000 (10:34 +1000)
This allows other code to parse "8:3" style device names.

Signed-off-by: NeilBrown <neilb@suse.de>
mdadm.h
util.c

diff --git a/mdadm.h b/mdadm.h
index dc3c107dbed534a14ed30b5255fc19f03e8133ad..fc1fd31854292042d67b554ae42c0bbc51f5d280 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -1283,6 +1283,7 @@ extern int check_partitions(int fd, char *dname,
                            unsigned long long size);
 
 extern int get_mdp_major(void);
+extern int get_maj_min(char *dev, int *major, int *minor);
 extern int dev_open(char *dev, int flags);
 extern int open_dev(char *devnm);
 extern void reopen_mddev(int mdfd);
diff --git a/util.c b/util.c
index 7937eb6efde2aae25bd1092f6d5d95422229c868..37c6e0d3bdef73021bd228ff398a8eae33a2acd8 100644 (file)
--- a/util.c
+++ b/util.c
@@ -871,12 +871,20 @@ void put_md_name(char *name)
 }
 #endif /* !defined(MDASSEMBLE) || defined(MDASSEMBLE) && defined(MDASSEMBLE_AUTO) */
 
+int get_maj_min(char *dev, int *major, int *minor)
+{
+       char *e;
+       *major = strtoul(dev, &e, 0);
+       return (e > dev && *e == ':' && e[1] &&
+               (*minor = strtoul(e+1, &e, 0)) >= 0 &&
+               *e == 0);
+}
+
 int dev_open(char *dev, int flags)
 {
        /* like 'open', but if 'dev' matches %d:%d, create a temp
         * block device and open that
         */
-       char *e;
        int fd = -1;
        char devname[32];
        int major;
@@ -885,10 +893,7 @@ int dev_open(char *dev, int flags)
        if (!dev) return -1;
        flags |= O_DIRECT;
 
-       major = strtoul(dev, &e, 0);
-       if (e > dev && *e == ':' && e[1] &&
-           (minor = strtoul(e+1, &e, 0)) >= 0 &&
-           *e == 0) {
+       if (get_maj_min(dev, &major, &minor)) {
                snprintf(devname, sizeof(devname), "/dev/.tmp.md.%d:%d:%d",
                         (int)getpid(), major, minor);
                if (mknod(devname, S_IFBLK|0600, makedev(major, minor)) == 0) {