diff options
author | Davidlohr Bueso | 2011-07-17 18:47:30 +0200 |
---|---|---|
committer | Karel Zak | 2011-07-21 17:49:02 +0200 |
commit | a88268b8cc124b6f721ba17ab01a3f6d5800c749 (patch) | |
tree | 372c23bac38c76e8ca3dacb5ee65e5f2322694ec /partx | |
parent | docs: update TODO file (diff) | |
download | kernel-qcow2-util-linux-a88268b8cc124b6f721ba17ab01a3f6d5800c749.tar.gz kernel-qcow2-util-linux-a88268b8cc124b6f721ba17ab01a3f6d5800c749.tar.xz kernel-qcow2-util-linux-a88268b8cc124b6f721ba17ab01a3f6d5800c749.zip |
partx: get partition number with sysfs lib
Now that we have this feature, there's no need to manually parse sysfs in partx.
Signed-off-by: Davidlohr Bueso <dave@gnu.org>
Diffstat (limited to 'partx')
-rw-r--r-- | partx/Makefile.am | 1 | ||||
-rw-r--r-- | partx/partx.c | 22 |
2 files changed, 6 insertions, 17 deletions
diff --git a/partx/Makefile.am b/partx/Makefile.am index 46fc64172..6a72942fe 100644 --- a/partx/Makefile.am +++ b/partx/Makefile.am @@ -6,6 +6,7 @@ dist_man_MANS = addpart.8 delpart.8 usrsbin_exec_PROGRAMS += partx partx_SOURCES = partx.c partx.h \ $(top_srcdir)/lib/blkdev.c \ + $(top_srcdir)/lib/sysfs.c \ $(top_srcdir)/lib/tt.c \ $(top_srcdir)/lib/at.c \ $(top_srcdir)/lib/mbsalign.c \ diff --git a/partx/partx.c b/partx/partx.c index d8a4119c2..e29e50dcc 100644 --- a/partx/partx.c +++ b/partx/partx.c @@ -30,6 +30,7 @@ #include "strutils.h" #include "xalloc.h" #include "partx.h" +#include "sysfs.h" #include "at.h" /* this is the default upper limit, could be modified by --nr */ @@ -123,8 +124,6 @@ static int column_name_to_id(const char *name, size_t namesz) * * Note that this function tries to use sysfs, otherwise it assumes that the * last characters are always numeric (sda1, sdc20, etc). - * - * Returns -1 on error. */ static int get_partno_from_device(char *partition, dev_t devno) { @@ -135,21 +134,10 @@ static int get_partno_from_device(char *partition, dev_t devno) assert(partition); if (devno) { - /* the device exists, read the partition number from /sys - * TODO: move this to stuff to lib/sysfs.c */ - char path[PATH_MAX]; - FILE *f; - - snprintf(path, sizeof(path), - _PATH_SYS_DEVBLOCK "/%d:%d/partition", - major(devno), minor(devno)); - f = fopen(path, "r"); - if (f) { - if (fscanf(f, "%d", &partno) != 1) - partno = 0; - fclose(f); - } - if (partno) + struct sysfs_cxt cxt; + + sysfs_init(&cxt, devno, NULL); + if (sysfs_read_int(&cxt, "partition", &partno) >= 0) return partno; } |