From a3ebe0eca3350ec42533ea54eeb8d6c53ae27eae Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Wed, 15 Jan 2014 10:52:16 +0100 Subject: libblkid: add blkid_partlist_get_partition_by_partno() Signed-off-by: Karel Zak --- libblkid/docs/libblkid-sections.txt | 1 + libblkid/src/blkid.h.in | 2 ++ libblkid/src/blkid.sym | 7 +++++++ libblkid/src/partitions/partitions.c | 30 ++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+) (limited to 'libblkid') diff --git a/libblkid/docs/libblkid-sections.txt b/libblkid/docs/libblkid-sections.txt index 69723459e..53cf84b78 100644 --- a/libblkid/docs/libblkid-sections.txt +++ b/libblkid/docs/libblkid-sections.txt @@ -100,6 +100,7 @@ blkid_partition_is_logical blkid_partition_is_primary blkid_partlist_get_partition +blkid_partlist_get_partition_by_partno blkid_partlist_numof_partitions blkid_partlist_devno_to_partition blkid_partlist_get_table diff --git a/libblkid/src/blkid.h.in b/libblkid/src/blkid.h.in index c140fc6b2..b10c28630 100644 --- a/libblkid/src/blkid.h.in +++ b/libblkid/src/blkid.h.in @@ -327,7 +327,9 @@ extern blkid_partlist blkid_probe_get_partitions(blkid_probe pr); extern int blkid_partlist_numof_partitions(blkid_partlist ls); extern blkid_parttable blkid_partlist_get_table(blkid_partlist ls); extern blkid_partition blkid_partlist_get_partition(blkid_partlist ls, int n); +extern blkid_partition blkid_partlist_get_partition_by_partno(blkid_partlist ls, int n); extern blkid_partition blkid_partlist_devno_to_partition(blkid_partlist ls, dev_t devno); +extern blkid_partition blkid_partlist_get_partition_by_partno(blkid_partlist ls, int n); extern blkid_parttable blkid_partition_get_table(blkid_partition par); extern const char *blkid_partition_get_name(blkid_partition par); diff --git a/libblkid/src/blkid.sym b/libblkid/src/blkid.sym index 7d3b71d2e..80cb4d487 100644 --- a/libblkid/src/blkid.sym +++ b/libblkid/src/blkid.sym @@ -155,3 +155,10 @@ global: blkid_parttable_get_id; blkid_init_debug; } BLKID_2.21; + +/* + * symbols since util-linux 2.25 + */ +BLKID_2.25 { + blkid_partlist_get_partition_by_partno; +} BLKID_2.23; diff --git a/libblkid/src/partitions/partitions.c b/libblkid/src/partitions/partitions.c index f7d6c4533..f83b868cc 100644 --- a/libblkid/src/partitions/partitions.c +++ b/libblkid/src/partitions/partitions.c @@ -901,6 +901,35 @@ blkid_partition blkid_partlist_get_partition(blkid_partlist ls, int n) return &ls->parts[n]; } +/** + * blkid_partlist_get_partition_by_partno + * @ls: partitions list + * @n: the partition number (e.g. 'N' from sda'N') + * + * This does not assume any order of the input blkid_partlist. And correctly + * handles "out of order" partition tables. partition N is located after + * partition N+1 on the disk. + * + * Returns: partition object or NULL in case or error. + */ +blkid_partition blkid_partlist_get_partition_by_partno(blkid_partlist ls, int n) +{ + int i, nparts; + blkid_partition par; + + if (!ls) + return NULL; + + nparts = blkid_partlist_numof_partitions(ls); + for (i = 0; i < nparts; i++) { + par = blkid_partlist_get_partition(ls, i); + if (n == blkid_partition_get_partno(par)) + return par; + } + return NULL; +} + + /** * blkid_partlist_devno_to_partition: * @ls: partitions list @@ -1001,6 +1030,7 @@ blkid_partition blkid_partlist_devno_to_partition(blkid_partlist ls, dev_t devno return NULL; } + int blkid_parttable_set_uuid(blkid_parttable tab, const unsigned char *id) { if (!tab) -- cgit v1.2.3-55-g7522