mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 16:52:14 +02:00
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: Rob Herring <robh@kernel.org> Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
This commit is contained in:
@@ -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 */
|
||||
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);
|
||||
}
|
||||
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);
|
||||
|
||||
/* name */
|
||||
val = extract_val(tok, "name");
|
||||
if (!val) { /* name is mandatory */
|
||||
|
Reference in New Issue
Block a user