summaryrefslogtreecommitdiffstats
path: root/disk-utils/sfdisk.c
diff options
context:
space:
mode:
authorKarel Zak2014-06-17 12:16:05 +0200
committerKarel Zak2014-06-17 12:16:05 +0200
commit83b69e409cfe9c0e31d298d07e27cb508299f7ad (patch)
treeda01d98ee303f237280eca5d8a1630c61bc1b078 /disk-utils/sfdisk.c
parentfdisk: use sysfs_devno_is_wholedisk() (diff)
downloadkernel-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.c48
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);