public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] gpt: support random UUIDs without setting environment variables
@ 2015-01-26 15:44 Rob Herring
  2015-02-18 17:48 ` Przemyslaw Marczak
  2015-03-06 15:43 ` [U-Boot] " Tom Rini
  0 siblings, 2 replies; 5+ messages in thread
From: Rob Herring @ 2015-01-26 15:44 UTC (permalink / raw)
  To: u-boot

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>
---
 common/cmd_gpt.c | 48 ++++++++++++++++++++++++++++++------------------
 doc/README.gpt   |  8 +++++---
 2 files changed, 35 insertions(+), 21 deletions(-)

diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c
index 75df3fe..c56fe15 100644
--- a/common/cmd_gpt.c
+++ b/common/cmd_gpt.c
@@ -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 */
diff --git a/doc/README.gpt b/doc/README.gpt
index ec0156d..59fdeeb 100644
--- a/doc/README.gpt
+++ b/doc/README.gpt
@@ -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'
 
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-03-06 15:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-26 15:44 [U-Boot] [PATCH] gpt: support random UUIDs without setting environment variables Rob Herring
2015-02-18 17:48 ` Przemyslaw Marczak
2015-02-22 22:46   ` Rob Herring
2015-02-23 14:42     ` Przemyslaw Marczak
2015-03-06 15:43 ` [U-Boot] " Tom Rini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox