]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - util.c
Remove ident arg from getinfo_super;
[thirdparty/mdadm.git] / util.c
diff --git a/util.c b/util.c
index e702b8d24020486ae992dad5bf2e425354e41862..ff175009ec8624a2e50fe1d8699a1590cd6e18fb 100644 (file)
--- a/util.c
+++ b/util.c
@@ -229,7 +229,7 @@ int check_reiser(int fd, char *name)
         *
         */
        unsigned char sb[1024];
-       int size;
+       unsigned long size;
        if (lseek(fd, 64*1024, 0) != 64*1024)
                return 0;
        if (read(fd, sb, 1024) != 1024)
@@ -239,7 +239,7 @@ int check_reiser(int fd, char *name)
                return 0;
        fprintf(stderr, Name ": %s appears to contain a reiserfs file system\n",name);
        size = sb[0]|(sb[1]|(sb[2]|sb[3]<<8)<<8)<<8;
-       fprintf(stderr, "    size = %dK\n", size*4);
+       fprintf(stderr, "    size = %luK\n", size*4);
                
        return 1;
 }
@@ -248,7 +248,6 @@ int check_raid(int fd, char *name)
 {
        void *super;
        struct mdinfo info;
-       struct mddev_ident_s ident;
        time_t crtime;
        char *level;
        struct supertype *st = guess_super(fd);
@@ -258,7 +257,7 @@ int check_raid(int fd, char *name)
        /* Looks like a raid array .. */
        fprintf(stderr, Name ": %s appears to be part of a raid array:\n",
                name);
-       st->ss->getinfo_super(&info, &ident, super);
+       st->ss->getinfo_super(&info, super);
        free(super);
        crtime = info.array.ctime;
        level = map_num(pers, info.array.level);
@@ -589,7 +588,28 @@ void put_md_name(char *name)
                unlink(name);
 }
 
-
+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 = strtoul(dev, &e, 0);
+       int minor;
+       if (e > dev && *e == ':' && e[1] &&
+           (minor = strtoul(e+1, &e, 0)) >= 0 &&
+           *e == 0) {
+               snprintf(devname, sizeof(devname), "/dev/.tmp.md.%d:%d", major, minor);
+               if (mknod(devname, S_IFBLK|0600, makedev(major, minor))==0) {
+                       fd = open(devname, flags);
+                       unlink(devname);
+               }
+       } else
+               fd = open(dev, flags);
+       return fd;
+}
 
 struct superswitch *superlist[] = { &super0, &super1, NULL };
 
@@ -632,8 +652,7 @@ struct supertype *guess_super(int fd)
                rv = ss->load_super(st, fd, &sbp, NULL);
                if (rv == 0) {
                        struct mdinfo info;
-                       struct mddev_ident_s ident;
-                       ss->getinfo_super(&info, &ident, sbp);
+                       ss->getinfo_super(&info, sbp);
                        if (bestsuper == -1 ||
                            besttime < info.array.ctime) {
                                bestsuper = i;
@@ -655,6 +674,7 @@ struct supertype *guess_super(int fd)
        return NULL;
 }
 
+
 #ifdef __TINYC__
 /* tinyc doesn't optimize this check in ioctl.h out ... */
 unsigned int __invalid_size_argument_for_IOC = 0;