]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - util.c
Fix parsing of /dev/md/N in is_standard
[thirdparty/mdadm.git] / util.c
diff --git a/util.c b/util.c
index 010764ea0661b5a8c0a7fbaa326e29fa9e9621da..8febfd2c0ab6e0ff5a3aa23b7ac4d0c912b22221 100644 (file)
--- a/util.c
+++ b/util.c
@@ -195,8 +195,8 @@ int check_reiser(int fd, char *name)
                return 0;
        if (read(fd, sb, 1024) != 1024)
                return 0;
-       if (strncmp(sb+52, "ReIsErFs",8)!=0 &&
-           strncmp(sb+52, "ReIsEr2Fs",9)!=0)
+       if (strncmp((char*)sb+52, "ReIsErFs",8)!=0 &&
+           strncmp((char*)sb+52, "ReIsEr2Fs",9)!=0)
                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;
@@ -284,7 +284,7 @@ int is_standard(char *dev, int *nump)
        else if (strncmp(d, "/md", 3)==0)
                d += 3, type=-1; /* /dev/mdN */
        else if (d-dev > 3 && strncmp(d-2, "md/", 3)==0)
-               type = -1; /* /dev/md/N */
+               d += 1, type=-1; /* /dev/md/N */
        else
                return 0;
        if (!*d)
@@ -537,11 +537,15 @@ struct supertype *super_by_version(int vers, int minor)
 {
        struct supertype *st = malloc(sizeof(*st));
        if (!st) return st;
-       if (vers == 0)
+       if (vers == 0) {
                st->ss = &super0;
+               st->max_devs = MD_SB_DISKS;
+       }
 
-       if (vers == 1)
+       if (vers == 1) {
                st->ss = &super1;
+               st->max_devs = 384;
+       }
        st->minor_version = minor;
        return st;
 }
@@ -572,8 +576,8 @@ struct supertype *guess_super(int fd)
                            besttime < info.array.ctime) {
                                bestsuper = i;
                                besttime = info.array.ctime;
-                               st->ss = NULL;
                        }
+                       st->ss = NULL;
                        free(sbp);
                }
        }