|
@@ -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"
|