From: Thomas Weißschuh Date: Wed, 26 Oct 2022 14:04:27 +0000 (+0200) Subject: libblkid: add blkid_probe_set_fsendianness() X-Git-Tag: v2.39-rc1~453^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8ace285b329314d678427b8487e05b317ae64109;p=thirdparty%2Futil-linux.git libblkid: add blkid_probe_set_fsendianness() --- diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c index 9f192edbc3..1c304bc2f6 100644 --- a/libblkid/src/superblocks/superblocks.c +++ b/libblkid/src/superblocks/superblocks.c @@ -626,6 +626,29 @@ int blkid_probe_set_fsblocksize(blkid_probe pr, uint32_t block_size) block_size); } +int blkid_probe_set_fsendianness(blkid_probe pr, enum BLKID_ENDIANNESS endianness) +{ + struct blkid_chain *chn = blkid_probe_get_chain(pr); + + if (!(chn->flags & BLKID_SUBLKS_FSINFO)) + return 0; + + const char *value; + + switch (endianness) { + case BLKID_ENDIANNESS_LITTLE: + value = "LITTLE"; + break; + case BLKID_ENDIANNESS_BIG: + value = "BIG"; + break; + default: + return -EINVAL; + } + + return blkid_probe_sprintf_value(pr, "ENDIANNESS", "%s", value); +} + int blkid_probe_set_id_label(blkid_probe pr, const char *name, const unsigned char *data, size_t len) { diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h index 8a1b85ddac..0d1c461a77 100644 --- a/libblkid/src/superblocks/superblocks.h +++ b/libblkid/src/superblocks/superblocks.h @@ -9,6 +9,18 @@ #include "blkidP.h" +enum BLKID_ENDIANNESS { + BLKID_ENDIANNESS_LITTLE, + BLKID_ENDIANNESS_BIG, +}; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define BLKID_ENDIANNESS_NATIVE BLKID_ENDIANNESS_LITTLE +#define BLKID_ENDIANNESS_OTHER BLKID_ENDIANNESS_BIG +#else +#define BLKID_ENDIANNESS_NATIVE BLKID_ENDIANNESS_BIG +#define BLKID_ENDIANNESS_OTHER BLKID_ENDIANNESS_LITTLE +#endif + extern const struct blkid_idinfo cramfs_idinfo; extern const struct blkid_idinfo swap_idinfo; extern const struct blkid_idinfo swsuspend_idinfo; @@ -114,6 +126,7 @@ int blkid_probe_set_block_size(blkid_probe pr, unsigned block_size); int blkid_probe_set_fssize(blkid_probe pr, uint64_t size); int blkid_probe_set_fslastblock(blkid_probe pr, uint64_t lastblock); int blkid_probe_set_fsblocksize(blkid_probe pr, uint32_t block_size); +int blkid_probe_set_fsendianness(blkid_probe pr, enum BLKID_ENDIANNESS endianness); extern int blkid_probe_is_bitlocker(blkid_probe pr); extern int blkid_probe_is_ntfs(blkid_probe pr);