To partition a block device the partition type GUIDs are needed but
'gpt read' does not provide these. Add the missing parts.

Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com>
---
v2:
        use accessor for type_guid field
---
 cmd/gpt.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/cmd/gpt.c b/cmd/gpt.c
index e7a53747fc..8e1de24845 100644
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -182,7 +182,9 @@ static int calc_parts_list_len(int numparts)
        partlistlen += numparts * (strlen("start=0x,") + lbaint_size);
        partlistlen += numparts * (strlen("size=0x,") + lbaint_size);
        if (IS_ENABLED(CONFIG_PARTITION_UUIDS))
-               partlistlen += numparts * (strlen("uuid=;") + UUID_STR_LEN);
+               partlistlen += numparts * (strlen("uuid=,") + UUID_STR_LEN);
+       if (IS_ENABLED(CONFIG_PARTITION_TYPE_GUID))
+               partlistlen += numparts * (strlen("type=;") + UUID_STR_LEN);
        debug("Length of partitions_list is %d for %d partitions\n",
              partlistlen, numparts);
        return partlistlen;
@@ -221,6 +223,9 @@ static struct disk_part *allocate_disk_part(struct 
disk_partition *info,
        if (IS_ENABLED(CONFIG_PARTITION_UUIDS))
                disk_partition_set_uuid(&newpart->gpt_part_info,
                                        disk_partition_uuid(info));
+       if (IS_ENABLED(CONFIG_PARTITION_TYPE_GUID))
+               disk_partition_set_type_guid(&newpart->gpt_part_info,
+                                            disk_partition_type_guid(info));
        newpart->partnum = partnum;
 
        return newpart;
@@ -259,6 +264,9 @@ static void print_gpt_info(void)
                if (CONFIG_IS_ENABLED(PARTITION_UUIDS))
                        printf("UUID %s\n",
                               disk_partition_uuid(&curr->gpt_part_info));
+               if (IS_ENABLED(CONFIG_PARTITION_TYPE_GUID))
+                       printf("Type GUID %s\n",
+                              disk_partition_type_guid(&curr->gpt_part_info));
                printf("\n");
        }
 }
@@ -308,6 +316,12 @@ static int create_gpt_partitions_list(int numparts, const 
char *guid,
                                disk_partition_uuid(&curr->gpt_part_info),
                                UUID_STR_LEN + 1);
                }
+               if (IS_ENABLED(CONFIG_PARTITION_TYPE_GUID)) {
+                       strcat(partitions_list, ",type=");
+                       strncat(partitions_list,
+                               disk_partition_type_guid(&curr->gpt_part_info),
+                               UUID_STR_LEN + 1);
+               }
                strcat(partitions_list, ";");
        }
        return 0;
-- 
2.40.1

Reply via email to