cmd: gpt: Add option to write GPT partitions to environment variable
[platform/kernel/u-boot.git] / cmd / gpt.c
index 76a95ad..17f2b83 100644 (file)
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -350,17 +350,46 @@ static int get_gpt_info(struct blk_desc *dev_desc)
 }
 
 /* a wrapper to test get_gpt_info */
-static int do_get_gpt_info(struct blk_desc *dev_desc)
+static int do_get_gpt_info(struct blk_desc *dev_desc, char * const namestr)
 {
-       int ret;
+       int numparts;
+
+       numparts = get_gpt_info(dev_desc);
+
+       if (numparts > 0) {
+               if (namestr) {
+                       char disk_guid[UUID_STR_LEN + 1];
+                       char *partitions_list;
+                       int partlistlen;
+                       int ret = -1;
+
+                       ret = get_disk_guid(dev_desc, disk_guid);
+                       if (ret < 0)
+                               return ret;
+
+                       partlistlen = calc_parts_list_len(numparts);
+                       partitions_list = malloc(partlistlen);
+                       if (!partitions_list) {
+                               del_gpt_info();
+                               return -ENOMEM;
+                       }
+                       memset(partitions_list, '\0', partlistlen);
+
+                       ret = create_gpt_partitions_list(numparts, disk_guid,
+                                                        partitions_list);
+                       if (ret < 0)
+                               printf("Error: Could not create partition list string!\n");
+                       else
+                               env_set(namestr, partitions_list);
 
-       ret = get_gpt_info(dev_desc);
-       if (ret > 0) {
-               print_gpt_info();
+                       free(partitions_list);
+               } else {
+                       print_gpt_info();
+               }
                del_gpt_info();
                return 0;
        }
-       return ret;
+       return numparts;
 }
 #endif
 
@@ -982,7 +1011,7 @@ static int do_gpt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
                ret = do_disk_guid(blk_dev_desc, argv[4]);
 #ifdef CONFIG_CMD_GPT_RENAME
        } else if (strcmp(argv[1], "read") == 0) {
-               ret = do_get_gpt_info(blk_dev_desc);
+               ret = do_get_gpt_info(blk_dev_desc, (argc == 5) ? argv[4] : NULL);
        } else if ((strcmp(argv[1], "swap") == 0) ||
                   (strcmp(argv[1], "rename") == 0)) {
                ret = do_rename_gpt_parts(blk_dev_desc, argv[1], argv[4], argv[5]);
@@ -1028,8 +1057,9 @@ U_BOOT_CMD(gpt, CONFIG_SYS_MAXARGS, 1, do_gpt,
        " gpt guid mmc 0 varname\n"
 #ifdef CONFIG_CMD_GPT_RENAME
        "gpt partition renaming commands:\n"
-       " gpt read <interface> <dev>\n"
+       " gpt read <interface> <dev> [<varname>]\n"
        "    - read GPT into a data structure for manipulation\n"
+       "    - read GPT partitions into environment variable\n"
        " gpt swap <interface> <dev> <name1> <name2>\n"
        "    - change all partitions named name1 to name2\n"
        "      and vice-versa\n"