On Thu, Sep 24, 2009 at 4:14 PM, Karel Zak <kzak@xxxxxxxxxx> wrote: > On Mon, Aug 24, 2009 at 01:11:54PM +0200, Corentin Chary wrote: >> --- a/shlibs/blkid/src/devname.c >> +static void >> +ubi_probe_all(blkid_cache cache, int only_if_new) >> +{ >> + const char **dirname; >> + >> + for (dirname = dirlist; *dirname; dirname++) { >> + DBG(DEBUG_DEVNAME, printf("probing UBI volumes under %s\n", >> + *dirname)); >> + >> + DIR *dir; >> + struct dirent *iter; >> + >> + dir = opendir(*dirname); >> + if (dir == NULL) >> + continue ; >> + >> + while ((iter = readdir(dir)) != NULL) { >> + char *name, *device; >> + struct stat st; >> + dev_t dev; >> + >> + name = iter->d_name; >> + >> + if (!strcmp(name, ".") || !strcmp(name, "..") || >> + !strstr(name, "ubi")) >> + continue; >> + if (!strcmp(name, "ubi_ctrl")) >> + continue; >> + device = malloc(strlen(*dirname) + strlen(name) + 2); >> + if (!device) >> + break ; >> + sprintf(device, "%s/%s", *dirname, name); >> + if (stat(device, &st)) >> + break ; >> + >> + if (!(st.st_rdev & 0xFF)) { // It's an UBI Device >> + free(device); >> + continue ; >> + } > > Wouldn't be better to > > #define is_ubi_device(s) (S_ISCHR(s->st_mode) && (s->st_rdev & 0xFF)) > > (or major() instead magic 0xFF constant?) and use it everywhere in > code? I guess UBI is always a char device. Maybe something like that: #define is_ubi_device(s) (S_ISCHR(s->st_mode) && !minor(s->st_rdev)) >> +++ b/shlibs/blkid/src/probe.c >> @@ -284,6 +284,8 @@ int blkid_probe_set_device(blkid_probe pr, int fd, >> >> if (S_ISBLK(sb.st_mode)) >> blkdev_get_size(fd, (unsigned long long *) &pr->size); >> + else if (S_ISCHR(sb.st_mode)) >> + pr->size = 1; >> else >> pr->size = sb.st_size; >> } > > this is the same situation, this code will for all char devices, but we > want to support UBI only. I don't know if there is a "good" way to detect an ubi device using only struct stat. Artem, any idea ? -- Corentin Chary http://xf.iksaif.net -- To unsubscribe from this list: send the line "unsubscribe util-linux-ng" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html