Commit 0c7e8d13 authored by Rob Herring's avatar Rob Herring Committed by Tom Rini

gpt: support random UUIDs without setting environment variables

Currently, an environment variable must be used to store the randomly
generated UUID for each partition. This is not necessary, so make storing
the UUID optional. Now passing uuid_disk and uuid are optional when random
UUIDs are enabled.
Signed-off-by: default avatarRob Herring <robh@kernel.org>
Acked-by: default avatarPrzemyslaw Marczak <p.marczak@samsung.com>
parent a150e6c9
......@@ -154,17 +154,24 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
/* extract disk guid */
s = str;
tok = strsep(&s, ";");
val = extract_val(tok, "uuid_disk");
val = extract_val(str, "uuid_disk");
if (!val) {
#ifdef CONFIG_RANDOM_UUID
*str_disk_guid = malloc(UUID_STR_LEN + 1);
gen_rand_uuid_str(*str_disk_guid, UUID_STR_FORMAT_STD);
#else
free(str);
return -2;
#endif
} else {
val = strsep(&val, ";");
if (extract_env(val, &p))
p = val;
*str_disk_guid = strdup(p);
free(val);
/* Move s to first partition */
strsep(&s, ";");
}
if (extract_env(val, &p))
p = val;
*str_disk_guid = strdup(p);
free(val);
if (strlen(s) == 0)
return -3;
......@@ -192,20 +199,25 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
/* uuid */
val = extract_val(tok, "uuid");
if (!val) { /* 'uuid' is mandatory */
errno = -4;
goto err;
}
if (extract_env(val, &p))
p = val;
if (strlen(p) >= sizeof(parts[i].uuid)) {
printf("Wrong uuid format for partition %d\n", i);
if (!val) {
/* 'uuid' is optional if random uuid's are enabled */
#ifdef CONFIG_RANDOM_UUID
gen_rand_uuid_str(parts[i].uuid, UUID_STR_FORMAT_STD);
#else
errno = -4;
goto err;
#endif
} else {
if (extract_env(val, &p))
p = val;
if (strlen(p) >= sizeof(parts[i].uuid)) {
printf("Wrong uuid format for partition %d\n", i);
errno = -4;
goto err;
}
strcpy((char *)parts[i].uuid, p);
free(val);
}
strcpy((char *)parts[i].uuid, p);
free(val);
/* name */
val = extract_val(tok, "name");
if (!val) { /* name is mandatory */
......
......@@ -157,11 +157,13 @@ To restore GUID partition table one needs to:
"partitions=uuid_disk=${uuid_gpt_disk};name=${uboot_name},
size=${uboot_size},uuid=${uboot_uuid};"
Fields 'name', 'size' and 'uuid' are mandatory for every partition.
The fields 'name' and 'size' are mandatory for every partition.
The field 'start' is optional.
option: CONFIG_RANDOM_UUID
If any partition "UUID" no exists then it is randomly generated.
The fields 'uuid' and 'uuid_disk' are optional if CONFIG_RANDOM_UUID is
enabled. A random uuid will be used if omitted or they point to an empty/
non-existent environment variable. The environment variable will be set to
the generated UUID.
2. Define 'CONFIG_EFI_PARTITION' and 'CONFIG_CMD_GPT'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment