summaryrefslogtreecommitdiffstats
path: root/util.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2006-03-28 22:44:05 +0000
committerNeil Brown <neilb@suse.de>2006-03-28 22:44:05 +0000
commitbed256c2419986e3a935680a7ead1def11ea08e7 (patch)
tree3c06bb613f244208fc30bfef21a9423eba094542 /util.c
parent4027ddcaa4b613a2ac2e6aa4eb0b157d7708f156 (diff)
downloadmdadm-bed256c2419986e3a935680a7ead1def11ea08e7.tar.gz
mdadm-bed256c2419986e3a935680a7ead1def11ea08e7.tar.xz
mdadm-bed256c2419986e3a935680a7ead1def11ea08e7.zip
Add information about reshape to --detail
Also fix problems with dev names and symlinks Signed-off-by: Neil Brown <neilb@suse.de>
Diffstat (limited to 'util.c')
-rw-r--r--util.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/util.c b/util.c
index 873deba..dcedab4 100644
--- 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;
}
/*