From bed256c2419986e3a935680a7ead1def11ea08e7 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 28 Mar 2006 22:44:05 +0000 Subject: Add information about reshape to --detail Also fix problems with dev names and symlinks Signed-off-by: Neil Brown --- util.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'util.c') 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; } /* -- cgit