summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libfdisk/src/fdiskP.h1
-rw-r--r--libfdisk/src/gpt.c2
-rw-r--r--libfdisk/src/script.c23
3 files changed, 17 insertions, 9 deletions
diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h
index e20723e61..82561297d 100644
--- a/libfdisk/src/fdiskP.h
+++ b/libfdisk/src/fdiskP.h
@@ -58,6 +58,7 @@ struct fdisk_test {
extern int fdisk_run_test(struct fdisk_test *tests, int argc, char *argv[]);
#endif
+#define FDISK_GPT_NPARTITIONS_DEFAULT 128
/*
* Generic iterator
diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c
index eaa9f4803..3028a392f 100644
--- a/libfdisk/src/gpt.c
+++ b/libfdisk/src/gpt.c
@@ -50,7 +50,7 @@
#define EFI_PMBR_OSTYPE 0xEE
#define MSDOS_MBR_SIGNATURE 0xAA55
#define GPT_PART_NAME_LEN (72 / sizeof(uint16_t))
-#define GPT_NPARTITIONS 128
+#define GPT_NPARTITIONS FDISK_GPT_NPARTITIONS_DEFAULT
/* Globally unique identifier */
struct gpt_guid {
diff --git a/libfdisk/src/script.c b/libfdisk/src/script.c
index 75e1b52de..956d4f52e 100644
--- a/libfdisk/src/script.c
+++ b/libfdisk/src/script.c
@@ -403,24 +403,31 @@ int fdisk_script_read_context(struct fdisk_script *dp, struct fdisk_context *cxt
struct fdisk_labelitem item;
char buf[64];
+ /* first-lba */
rc = fdisk_get_disklabel_item(cxt, GPT_LABELITEM_FIRSTLBA, &item);
- if (rc == 0) {
+ if (!rc) {
snprintf(buf, sizeof(buf), "%"PRIu64, item.data.num64);
rc = fdisk_script_set_header(dp, "first-lba", buf);
}
- if (rc < 0)
- goto done;
- rc = fdisk_get_disklabel_item(cxt, GPT_LABELITEM_LASTLBA, &item);
- if (rc == 0) {
+ /* last-lba */
+ if (!rc)
+ rc = fdisk_get_disklabel_item(cxt, GPT_LABELITEM_LASTLBA, &item);
+ if (!rc) {
snprintf(buf, sizeof(buf), "%"PRIu64, item.data.num64);
rc = fdisk_script_set_header(dp, "last-lba", buf);
}
- if (rc < 0)
- goto done;
+
+ /* table-length */
+ if (!rc) {
+ size_t n = fdisk_get_npartitions(cxt);
+ if (n != FDISK_GPT_NPARTITIONS_DEFAULT) {
+ snprintf(buf, sizeof(buf), "%zu", n);
+ rc = fdisk_script_set_header(dp, "table-length", buf);
+ }
+ }
}
-done:
DBG(SCRIPT, ul_debugobj(dp, "read context done [rc=%d]", rc));
return rc;
}