diff options
-rw-r--r-- | libfdisk/src/fdiskP.h | 1 | ||||
-rw-r--r-- | libfdisk/src/gpt.c | 2 | ||||
-rw-r--r-- | libfdisk/src/script.c | 23 |
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; } |