summaryrefslogtreecommitdiffstats
path: root/libblkid
diff options
context:
space:
mode:
authorKarel Zak2017-01-13 13:26:37 +0100
committerKarel Zak2017-01-13 13:26:37 +0100
commit76fab513b8f2c128a29c36cbc622d1a624b0be19 (patch)
treea1201a04ce757f3b6a60b7f056e7c0a48d0a3c04 /libblkid
parentlibfdisk: change the way how apply user device properties (diff)
downloadkernel-qcow2-util-linux-76fab513b8f2c128a29c36cbc622d1a624b0be19.tar.gz
kernel-qcow2-util-linux-76fab513b8f2c128a29c36cbc622d1a624b0be19.tar.xz
kernel-qcow2-util-linux-76fab513b8f2c128a29c36cbc622d1a624b0be19.zip
libblkid: add blkid_probe_set_sectorsize()
The usual way is to use ioctl to ask block device for sector size, but this is useless for disk images (regular files). And the default (512-bytes) may be pretty wrong for disk images from 4K disks. Let's support a way how to specify proper sector size. 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/libblkid.sym4
-rw-r--r--libblkid/src/probe.c16
4 files changed, 23 insertions, 0 deletions
diff --git a/libblkid/docs/libblkid-sections.txt b/libblkid/docs/libblkid-sections.txt
index 53cf84b78..78db25ec9 100644
--- a/libblkid/docs/libblkid-sections.txt
+++ b/libblkid/docs/libblkid-sections.txt
@@ -56,6 +56,7 @@ blkid_probe_get_size
blkid_probe_get_wholedisk_devno
blkid_probe_is_wholedisk
blkid_probe_set_device
+blkid_probe_set_sectorsize
blkid_probe_step_back
blkid_reset_probe
</SECTION>
diff --git a/libblkid/src/blkid.h.in b/libblkid/src/blkid.h.in
index d7bbced7f..06e2c1771 100644
--- a/libblkid/src/blkid.h.in
+++ b/libblkid/src/blkid.h.in
@@ -243,6 +243,8 @@ extern blkid_loff_t blkid_probe_get_offset(blkid_probe pr)
__ul_attribute__((nonnull));
extern unsigned int blkid_probe_get_sectorsize(blkid_probe pr)
__ul_attribute__((nonnull));
+extern int blkid_probe_set_sectorsize(blkid_probe pr, unsigned int sz)
+ __ul_attribute__((nonnull));
extern blkid_loff_t blkid_probe_get_sectors(blkid_probe pr)
__ul_attribute__((nonnull));
diff --git a/libblkid/src/libblkid.sym b/libblkid/src/libblkid.sym
index 6b3cf0805..cd76d6592 100644
--- a/libblkid/src/libblkid.sym
+++ b/libblkid/src/libblkid.sym
@@ -164,3 +164,7 @@ global:
BLKID_2.25 {
blkid_partlist_get_partition_by_partno;
} BLKID_2.23;
+
+BLKID_2.30 {
+ blkid_probe_set_sectorsize;
+} BLKID_2.25;
diff --git a/libblkid/src/probe.c b/libblkid/src/probe.c
index ea50f5a6b..df90a82e0 100644
--- a/libblkid/src/probe.c
+++ b/libblkid/src/probe.c
@@ -1672,6 +1672,22 @@ unsigned int blkid_probe_get_sectorsize(blkid_probe pr)
}
/**
+ * blkid_probe_set_sectorsize:
+ * @pr: probe
+ * @sz: new size (to overwrite system default)
+ *
+ * Note that blkid_probe_set_device() resets this setting. Use it after
+ * blkid_probe_set_device() and before any probing call.
+ *
+ * Returns: 0 or <0 in case of error
+ */
+int blkid_probe_set_sectorsize(blkid_probe pr, unsigned int sz)
+{
+ pr->blkssz = sz;
+ return 0;
+}
+
+/**
* blkid_probe_get_sectors:
* @pr: probe
*