summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2018-10-16 15:52:13 +0200
committerKarel Zak2018-12-07 12:32:57 +0100
commit93c687d895752582bd95ef52a53684b346f2cc70 (patch)
tree799d203808d95026af6cc5ba0adbe90454cb1ba0
parentlsblk: reorder functions (diff)
downloadkernel-qcow2-util-linux-93c687d895752582bd95ef52a53684b346f2cc70.tar.gz
kernel-qcow2-util-linux-93c687d895752582bd95ef52a53684b346f2cc70.tar.xz
kernel-qcow2-util-linux-93c687d895752582bd95ef52a53684b346f2cc70.zip
lib/sysfs: add function to detect partitioned devices
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r--include/sysfs.h1
-rw-r--r--lib/sysfs.c14
2 files changed, 15 insertions, 0 deletions
diff --git a/include/sysfs.h b/include/sysfs.h
index 74f69fb9c..edda8ca99 100644
--- a/include/sysfs.h
+++ b/include/sysfs.h
@@ -97,6 +97,7 @@ dev_t sysfs_devname_to_devno(const char *name);
dev_t __sysfs_devname_to_devno(const char *prefix, const char *name, const char *parent);
char *sysfs_devno_to_devpath(dev_t devno, char *buf, size_t bufsiz);
char *sysfs_devno_to_devname(dev_t devno, char *buf, size_t bufsiz);
+int sysfs_devno_count_partitions(dev_t devno);
int sysfs_blkdev_scsi_get_hctl(struct path_cxt *pc, int *h, int *c, int *t, int *l);
char *sysfs_blkdev_scsi_host_strdup_attribute(struct path_cxt *pc,
diff --git a/lib/sysfs.c b/lib/sysfs.c
index 626451bdd..6916c2584 100644
--- a/lib/sysfs.c
+++ b/lib/sysfs.c
@@ -999,6 +999,20 @@ char *sysfs_devno_to_devname(dev_t devno, char *buf, size_t bufsiz)
return res;
}
+int sysfs_devno_count_partitions(dev_t devno)
+{
+ struct path_cxt *pc = ul_new_sysfs_path(devno, NULL, NULL);
+ int n = 0;
+
+ if (pc) {
+ char buf[PATH_MAX + 1];
+ char *name = sysfs_blkdev_get_name(pc, buf, sizeof(buf));
+
+ n = sysfs_blkdev_count_partitions(pc, name);
+ ul_unref_path(pc);
+ }
+ return n;
+}
#ifdef TEST_PROGRAM_SYSFS