]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdopen.c
remove ANNOUNCE-2.0-devel-?
[thirdparty/mdadm.git] / mdopen.c
index 721d74ae042053f905ebcc2a9443dfea4449b34f..81cf725b02c8c0f3e3b9de3e52c0d781e6ac3f43 100644 (file)
--- a/mdopen.c
+++ b/mdopen.c
@@ -42,7 +42,8 @@ void make_parts(char *dev, int cnt)
        struct stat stb;
        int major, minor;
        int i;
-       char *name = malloc(strlen(dev) + 20);
+       int nlen = strlen(dev) + 20;
+       char *name = malloc(nlen);
        int dig = isdigit(dev[strlen(dev)-1]);
 
        if (stat(dev, &stb)!= 0)
@@ -53,7 +54,7 @@ void make_parts(char *dev, int cnt)
        minor = minor(stb.st_rdev);
        for (i=1; i <= cnt ; i++) {
                struct stat stb2;
-               sprintf(name, "%s%s%d", dev, dig?"p":"", i);
+               snprintf(name, nlen, "%s%s%d", dev, dig?"p":"", i);
                if (stat(name, &stb2)==0) {
                        if (!S_ISBLK(stb2.st_mode))
                                continue;
@@ -66,6 +67,8 @@ void make_parts(char *dev, int cnt)
                mknod(name, S_IFBLK | 0600, makedev(major, minor+i));
                chown(name, stb2.st_uid, stb2.st_gid);
                chmod(name, stb2.st_mode & 07777);
+               stat(name, &stb2);
+               add_dev(name, &stb2, 0, NULL);
        }
 }
 
@@ -205,6 +208,8 @@ int open_mddev(char *dev, int autof)
                                chown(dev, stb.st_uid, stb.st_gid);
                                chmod(dev, stb.st_mode & 07777);
                        }
+                       stat(dev, &stb);
+                       add_dev(dev, &stb, 0, NULL);
                        make_parts(dev,autof);
                }
        }