Karel Zak 18b0e4
From 863ecca27cfc937bc6fb2131e0d0e35947e38ce6 Mon Sep 17 00:00:00 2001
Karel Zak 18b0e4
From: Andrey Albershteyn <aalbersh@redhat.com>
Karel Zak 18b0e4
Date: Mon, 25 Apr 2022 17:08:37 +0200
Karel Zak 18b0e4
Subject: libblkid: add interface for FSSIZE field
Karel Zak 18b0e4
Karel Zak 18b0e4
Add interface to let filesystem probe calculate and set FSSIZE.
Karel Zak 18b0e4
Enable that field in the 'superblocks' sample.
Karel Zak 18b0e4
Karel Zak 18b0e4
Upstream: http://github.com/util-linux/util-linux/commit/ad08ae0aa
Karel Zak 18b0e4
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=2064810
Karel Zak 18b0e4
Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com>
Karel Zak 18b0e4
---
Karel Zak 18b0e4
 libblkid/samples/superblocks.c         |  2 +-
Karel Zak 18b0e4
 libblkid/src/blkid.h.in                |  1 +
Karel Zak 18b0e4
 libblkid/src/superblocks/superblocks.c | 11 +++++++++++
Karel Zak 18b0e4
 libblkid/src/superblocks/superblocks.h |  1 +
Karel Zak 18b0e4
 4 files changed, 14 insertions(+), 1 deletion(-)
Karel Zak 18b0e4
Karel Zak 18b0e4
diff --git a/libblkid/samples/superblocks.c b/libblkid/samples/superblocks.c
Karel Zak 18b0e4
index 7d9555771..38903ecee 100644
Karel Zak 18b0e4
--- a/libblkid/samples/superblocks.c
Karel Zak 18b0e4
+++ b/libblkid/samples/superblocks.c
Karel Zak 18b0e4
@@ -44,7 +44,7 @@ int main(int argc, char *argv[])
Karel Zak 18b0e4
 			BLKID_SUBLKS_UUID | BLKID_SUBLKS_UUIDRAW |
Karel Zak 18b0e4
 			BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE |
Karel Zak 18b0e4
 			BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION |
Karel Zak 18b0e4
-			BLKID_SUBLKS_MAGIC);
Karel Zak 18b0e4
+			BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_FSSIZE);
Karel Zak 18b0e4
 
Karel Zak 18b0e4
 	rc = blkid_do_safeprobe(pr);
Karel Zak 18b0e4
 	if (rc == -1)
Karel Zak 18b0e4
diff --git a/libblkid/src/blkid.h.in b/libblkid/src/blkid.h.in
Karel Zak 18b0e4
index 3cd4116d9..ad4becf0a 100644
Karel Zak 18b0e4
--- a/libblkid/src/blkid.h.in
Karel Zak 18b0e4
+++ b/libblkid/src/blkid.h.in
Karel Zak 18b0e4
@@ -281,6 +281,7 @@ extern int blkid_probe_enable_superblocks(blkid_probe pr, int enable)
Karel Zak 18b0e4
 #define BLKID_SUBLKS_VERSION	(1 << 8) /* read FS type from superblock */
Karel Zak 18b0e4
 #define BLKID_SUBLKS_MAGIC	(1 << 9) /* define SBMAGIC and SBMAGIC_OFFSET */
Karel Zak 18b0e4
 #define BLKID_SUBLKS_BADCSUM	(1 << 10) /* allow a bad checksum */
Karel Zak 18b0e4
+#define BLKID_SUBLKS_FSSIZE	(1 << 11) /* read and define FSSIZE from superblock */
Karel Zak 18b0e4
 
Karel Zak 18b0e4
 #define BLKID_SUBLKS_DEFAULT	(BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | \
Karel Zak 18b0e4
 				 BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE)
Karel Zak 18b0e4
diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c
Karel Zak 18b0e4
index f21365538..9adc2cfa3 100644
Karel Zak 18b0e4
--- a/libblkid/src/superblocks/superblocks.c
Karel Zak 18b0e4
+++ b/libblkid/src/superblocks/superblocks.c
Karel Zak 18b0e4
@@ -7,6 +7,7 @@
Karel Zak 18b0e4
  * GNU Lesser General Public License.
Karel Zak 18b0e4
  */
Karel Zak 18b0e4
 
Karel Zak 18b0e4
+#include <inttypes.h>
Karel Zak 18b0e4
 #include <stdio.h>
Karel Zak 18b0e4
 #include <string.h>
Karel Zak 18b0e4
 #include <stdlib.h>
Karel Zak 18b0e4
@@ -584,6 +585,16 @@ static int blkid_probe_set_usage(blkid_probe pr, int usage)
Karel Zak 18b0e4
 	return blkid_probe_set_value(pr, "USAGE", (unsigned char *) u, strlen(u) + 1);
Karel Zak 18b0e4
 }
Karel Zak 18b0e4
 
Karel Zak 18b0e4
+int blkid_probe_set_fssize(blkid_probe pr, uint64_t size)
Karel Zak 18b0e4
+{
Karel Zak 18b0e4
+	struct blkid_chain *chn = blkid_probe_get_chain(pr);
Karel Zak 18b0e4
+
Karel Zak 18b0e4
+	if (!(chn->flags & BLKID_SUBLKS_FSSIZE))
Karel Zak 18b0e4
+		return 0;
Karel Zak 18b0e4
+
Karel Zak 18b0e4
+	return blkid_probe_sprintf_value(pr, "FSSIZE", "%" PRIu64, size);
Karel Zak 18b0e4
+}
Karel Zak 18b0e4
+
Karel Zak 18b0e4
 int blkid_probe_set_id_label(blkid_probe pr, const char *name,
Karel Zak 18b0e4
 			     const unsigned char *data, size_t len)
Karel Zak 18b0e4
 {
Karel Zak 18b0e4
diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h
Karel Zak 18b0e4
index 9c489c438..67803679f 100644
Karel Zak 18b0e4
--- a/libblkid/src/superblocks/superblocks.h
Karel Zak 18b0e4
+++ b/libblkid/src/superblocks/superblocks.h
Karel Zak 18b0e4
@@ -111,6 +111,7 @@ extern int blkid_probe_set_utf8_id_label(blkid_probe pr, const char *name,
Karel Zak 18b0e4
 			     const unsigned char *data, size_t len, int enc);
Karel Zak 18b0e4
 
Karel Zak 18b0e4
 int blkid_probe_set_block_size(blkid_probe pr, unsigned block_size);
Karel Zak 18b0e4
+int blkid_probe_set_fssize(blkid_probe pr, uint64_t size);
Karel Zak 18b0e4
 
Karel Zak 18b0e4
 extern int blkid_probe_is_bitlocker(blkid_probe pr);
Karel Zak 18b0e4
 extern int blkid_probe_is_ntfs(blkid_probe pr);
Karel Zak 18b0e4
-- 
Karel Zak 18b0e4
2.36.1
Karel Zak 18b0e4