summaryrefslogtreecommitdiffstats
path: root/libblkid
diff options
context:
space:
mode:
authorKarel Zak2014-01-15 10:52:16 +0100
committerKarel Zak2014-01-15 10:52:16 +0100
commita3ebe0eca3350ec42533ea54eeb8d6c53ae27eae (patch)
tree03e9539ee6f145c800bd985d3223e123641625a9 /libblkid
parentlib/sysfs: fix scanf format string [coverity scan] (diff)
downloadkernel-qcow2-util-linux-a3ebe0eca3350ec42533ea54eeb8d6c53ae27eae.tar.gz
kernel-qcow2-util-linux-a3ebe0eca3350ec42533ea54eeb8d6c53ae27eae.tar.xz
kernel-qcow2-util-linux-a3ebe0eca3350ec42533ea54eeb8d6c53ae27eae.zip
libblkid: add blkid_partlist_get_partition_by_partno()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libblkid')
-rw-r--r--libblkid/docs/libblkid-sections.txt1
-rw-r--r--libblkid/src/blkid.h.in2
-rw-r--r--libblkid/src/blkid.sym7
-rw-r--r--libblkid/src/partitions/partitions.c30
4 files changed, 40 insertions, 0 deletions
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
<SUBSECTION>
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
@@ -902,6 +902,35 @@ blkid_partition blkid_partlist_get_partition(blkid_partlist ls, int 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
* @devno: requested partition
@@ -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)