diff options
author | Karel Zak | 2014-06-17 12:16:05 +0200 |
---|---|---|
committer | Karel Zak | 2014-06-17 12:16:05 +0200 |
commit | 83b69e409cfe9c0e31d298d07e27cb508299f7ad (patch) | |
tree | da01d98ee303f237280eca5d8a1630c61bc1b078 /disk-utils/sfdisk.c | |
parent | fdisk: use sysfs_devno_is_wholedisk() (diff) | |
download | kernel-qcow2-util-linux-83b69e409cfe9c0e31d298d07e27cb508299f7ad.tar.gz kernel-qcow2-util-linux-83b69e409cfe9c0e31d298d07e27cb508299f7ad.tar.xz kernel-qcow2-util-linux-83b69e409cfe9c0e31d298d07e27cb508299f7ad.zip |
sfdisk: use sysfs_devno_is_wholedisk()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'disk-utils/sfdisk.c')
-rw-r--r-- | disk-utils/sfdisk.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c index 12162af87..b462705e7 100644 --- a/disk-utils/sfdisk.c +++ b/disk-utils/sfdisk.c @@ -46,12 +46,12 @@ #include "xalloc.h" #include "blkdev.h" #include "linux_version.h" -#include "wholedisk.h" #include "pathnames.h" #include "canonicalize.h" #include "rpmatch.h" #include "closestream.h" #include "strutils.h" +#include "sysfs.h" struct systypes { unsigned char type; @@ -2488,25 +2488,37 @@ static int is_ide_cdrom_or_tape(char *device) return ret; } -static char * -nextproc(FILE * procf) { - static char devname[256]; - char line[1024], ptname[128 + 1]; - int ma, mi; - unsigned long long sz; +static char *nextproc(FILE *f) +{ + char line[128 + 1]; - if (procf == NULL) - return NULL; - while (fgets(line, sizeof(line), procf) != NULL) { - if (sscanf(line, " %d %d %llu %128[^\n ]", &ma, &mi, &sz, ptname) != 4) - continue; - snprintf(devname, sizeof(devname), "/dev/%s", ptname); - if (!is_whole_disk(devname)) - continue; - return canonicalize_path(devname); - } + if (!f) + return NULL; + + while (fgets(line, sizeof(line), f)) { + char buf[PATH_MAX], *cn; + dev_t devno; - return NULL; + if (sscanf(line, " %*d %*d %*d %128[^\n ]", buf) != 1) + continue; + + devno = sysfs_devname_to_devno(buf, NULL); + if (devno <= 0) + continue; + + if (sysfs_devno_is_lvm_private(devno) || + sysfs_devno_is_wholedisk(devno) <= 0) + continue; + + if (!sysfs_devno_to_devpath(devno, buf, sizeof(buf))) + continue; + + cn = canonicalize_path(buf); + if (cn) + return cn; + } + + return NULL; } static void do_list(char *dev, int silent); |