ptgen: fix limitation for active partition in GPT
authorThomas Richard <thomas.richard@bootlin.com>
Fri, 23 Feb 2024 14:49:07 +0000 (15:49 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 23 Mar 2024 14:29:28 +0000 (15:29 +0100)
In GPT there is no reason to limit the active partition number to 4.
This limitation is only for MBR, as it corresponds to the maximum number
of primary partitions.

Signed-off-by: Thomas Richard <thomas.richard@bootlin.com>
src/ptgen.c

index b231c28de0f765923bfa5f695142e3ed71e12b6e..c7d6bc0ae4e1853b6af568292c53313d90700007 100644 (file)
@@ -569,7 +569,7 @@ fail:
 static void usage(char *prog)
 {
        fprintf(stderr, "Usage: %s [-v] [-n] [-g] -h <heads> -s <sectors> -o <outputfile>\n"
-                       "          [-a 0..4] [-l <align kB>] [-G <guid>]\n"
+                       "          [-a <part number>] [-l <align kB>] [-G <guid>]\n"
                        "          [[-t <type> | -T <GPT part type>] [-r] [-N <name>] -p <size>[@<start>]...] \n", prog);
        exit(EXIT_FAILURE);
 }
@@ -668,8 +668,6 @@ int main (int argc, char **argv)
                        break;
                case 'a':
                        active = (int)strtoul(optarg, NULL, 0);
-                       if ((active < 0) || (active > 4))
-                               active = 0;
                        break;
                case 'l':
                        kb_align = (int)strtoul(optarg, NULL, 0) * 2;
@@ -700,6 +698,11 @@ int main (int argc, char **argv)
        if (argc || (!use_guid_partition_table && ((heads <= 0) || (sectors <= 0))) || !filename)
                usage(argv[0]);
 
+       if ((use_guid_partition_table && active > GPT_ENTRY_MAX) ||
+           (!use_guid_partition_table && active > MBR_ENTRY_MAX) ||
+           active < 0)
+               active  = 0;
+
        if (use_guid_partition_table) {
                heads = 254;
                sectors = 63;