From 76fab513b8f2c128a29c36cbc622d1a624b0be19 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Fri, 13 Jan 2017 13:26:37 +0100 Subject: [PATCH] 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 --- libblkid/docs/libblkid-sections.txt | 1 + libblkid/src/blkid.h.in | 2 ++ libblkid/src/libblkid.sym | 4 ++++ libblkid/src/probe.c | 16 ++++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/libblkid/docs/libblkid-sections.txt b/libblkid/docs/libblkid-sections.txt index 53cf84b784..78db25ec98 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 diff --git a/libblkid/src/blkid.h.in b/libblkid/src/blkid.h.in index d7bbced7ff..06e2c1771d 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 6b3cf08054..cd76d6592a 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 ea50f5a6b3..df90a82e09 100644 --- a/libblkid/src/probe.c +++ b/libblkid/src/probe.c @@ -1671,6 +1671,22 @@ unsigned int blkid_probe_get_sectorsize(blkid_probe pr) return pr->blkssz; } +/** + * 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 -- 2.47.3