From 0a416ec30712b201fbbf300e032cfea02109cd23 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Mon, 27 Mar 2006 06:54:31 +0000 Subject: Make scanning of /dev work even if it is a symlink We generally don't want to follow symlinks in /dev, but if /dev itself is a symlink, we want to follow it. So nftw needs a bit of help. Signed-off-by: Neil Brown --- util.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'util.c') diff --git a/util.c b/util.c index ff17500..ab606ab 100644 --- a/util.c +++ b/util.c @@ -384,6 +384,8 @@ 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); @@ -407,7 +409,12 @@ char *map_dev(int major, int minor) struct devmap *p; char *std = NULL, *nonstd=NULL; if (!devlist_ready) { - nftw("/dev", add_dev, 10, FTW_PHYS); + char *dev = "/dev"; + struct stat stb; + if (lstat(dev, &stb)==0 && + S_ISLNK(stb.st_mode)) + dev = "/dev/."; + nftw(dev, add_dev, 10, FTW_PHYS); devlist_ready=1; } -- cgit