]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - util.c
Add information about reshape to --detail
[thirdparty/mdadm.git] / util.c
diff --git a/util.c b/util.c
index 873deba67eacdb434e7a5c272d1182ddebc5f3ef..dcedab46e4f06f1fce32380a105cc889e70956bc 100644 (file)
--- a/util.c
+++ b/util.c
@@ -381,20 +381,26 @@ int nftw(const char *path, int (*han)(const char *name, const struct stat *stb,
 
 int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s)
 {
-    if ((stb->st_mode&S_IFMT)== S_IFBLK) {
-       char *n = strdup(name);
-       struct devmap *dm = malloc(sizeof(*dm));
-       if (strncmp(n, "/dev/.", 6)==0)
-               strcpy(n+4, name+6);
-       if (dm) {
-           dm->major = major(stb->st_rdev);
-           dm->minor = minor(stb->st_rdev);
-           dm->name = n;
-           dm->next = devlist;
-           devlist = dm;
+       struct stat st;
+       if (S_ISLNK(stb->st_mode)) {
+               stat(name, &st);
+               stb = &st;
        }
-    }
-    return 0;
+
+       if ((stb->st_mode&S_IFMT)== S_IFBLK) {
+               char *n = strdup(name);
+               struct devmap *dm = malloc(sizeof(*dm));
+               if (strncmp(n, "/dev/./", 7)==0)
+                       strcpy(n+4, name+6);
+               if (dm) {
+                       dm->major = major(stb->st_rdev);
+                       dm->minor = minor(stb->st_rdev);
+                       dm->name = n;
+                       dm->next = devlist;
+                       devlist = dm;
+               }
+       }
+       return 0;
 }
 
 /*