]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Introduce devname2devnum
authorNeil Brown <neilb@suse.de>
Sat, 12 Jul 2008 10:28:38 +0000 (20:28 +1000)
committerNeil Brown <neilb@suse.de>
Sat, 12 Jul 2008 10:28:38 +0000 (20:28 +1000)
and use it instead of opencoding.

mdadm.h
mdstat.c
sysfs.c
util.c

diff --git a/mdadm.h b/mdadm.h
index 7a6b63f4eb6855006412bfac6ede47ab40fabfdc..72104da141efd11e7e7988ff7a405561f3269fdd 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -775,6 +775,7 @@ extern int mdmon_running(int devnum);
 extern int signal_mdmon(int devnum);
 
 extern char *devnum2devname(int num);
+extern int devname2devnum(char *name);
 extern int fd2devnum(int fd);
 
 static inline int dev2major(int d)
index 040df150c74cec0eb5b64597ad604d0c80129fcb..4bb29d85c822237e1a0244ff477561f125e0e5c5 100644 (file)
--- a/mdstat.c
+++ b/mdstat.c
@@ -191,11 +191,7 @@ struct mdstat_ent *mdstat_read(int hold, int start)
                                         * there.
                                         */
                                        struct mdstat_ent **ih;
-                                       int dn2;
-                                       if (strncmp(w, "md_d", 4)==0)
-                                               dn2 = -1-strtoul(w+4, &ep, 10);
-                                       else
-                                               dn2 = strtoul(w+2, &ep, 10);
+                                       int dn2 = devname2devnum(w);
                                        ih = &all;
                                        while (ih != insert_here && *ih &&
                                               (*ih)->devnum != dn2)
diff --git a/sysfs.c b/sysfs.c
index b7a95edae74ec58cfd3d6926326bc7fa37918ec0..847a4e1e4caf8d8e38748397eafd664413eea9fa 100644 (file)
--- a/sysfs.c
+++ b/sysfs.c
@@ -59,15 +59,9 @@ void sysfs_free(struct mdinfo *sra)
 int sysfs_open(int devnum, char *devname, char *attr)
 {
        char fname[50];
-       char sys_name[16];
        int fd;
-       if (devnum >= 0)
-               sprintf(sys_name, "md%d", devnum);
-       else
-               sprintf(sys_name, "md_d%d",
-                       -1-devnum);
 
-       sprintf(fname, "/sys/block/%s/md/", sys_name);
+       sprintf(fname, "/sys/block/%s/md/", devnum2devname(devnum));
        if (devname) {
                strcat(fname, devname);
                strcat(fname, "/");
diff --git a/util.c b/util.c
index 553426647aede5ad69063e694640d6a052fb8328..0c1dfeebfa94ca96b56ee3a1e2fb6d5226fd38af 100644 (file)
--- a/util.c
+++ b/util.c
@@ -826,10 +826,7 @@ struct supertype *super_by_fd(int fd)
                int devnum;
                if (subarray)
                        *subarray++ = '\0';
-               if (strncmp(dev, "md_d", 4) == 0)
-                       devnum = -1-atoi(dev+4);
-               else
-                       devnum = atoi(dev+2);
+               devnum = devname2devnum(dev);
                subarray = strdup(subarray);
                if (sra)
                        sysfs_free(sra);
@@ -1013,6 +1010,17 @@ char *devnum2devname(int num)
        return strdup(name);
 }
 
+int devname2devnum(char *name)
+{
+       char *ep;
+       int num;
+       if (strncmp(name, "md_d", 4)==0)
+               num = -1-strtoul(name+4, &ep, 10);
+       else
+               num = strtoul(name+2, &ep, 10);
+       return num;
+}
+
 int fd2devnum(int fd)
 {
        struct stat stb;