Message ID | 1365520317-30116-1-git-send-email-egbert.eich@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | Tom Rini |
Headers | show |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 04/09/2013 11:11 AM, Egbert Eich wrote: > From: Egbert Eich <eich@suse.com> > > The gpt command was only implemented for mmc devices. There is no > reason why this command should not be generalized and be applied > all other storage device classes. This change both simplifies the > implementation and eliminates a build failure for systems that > don't support mmcs. > > Signed-off-by: Egbert Eich <eich@suse.com> --- Changes for v2: - > Coding style cleanup. > > common/cmd_gpt.c | 44 +++++++++++++++++++------------------------- > 1 file changed, 19 insertions(+), 25 deletions(-) Reviewed-by: Tom Rini <trini@ti.com> Thanks! - -- Tom -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQIcBAEBAgAGBQJRZDOLAAoJENk4IS6UOR1WdAwP/jUM63BXUnoe1ZdL40MjjK8W ML48SoHv14unwjHB3Nr5fl4EGQOGpWN18HB7h/tGVdcZPCu6MaP3VQR+dV9iWDlh ijwv0b390ojj2Hb9tqOy3VEt+v/jrOJOcfDdgheDkfs/82d6NysJnbxbmfCTbtFv B68ToxYNKv2LirLz/HC4lUYWLekfwLSgqK+lcwA0WqgylnUuANa05d+VD8LUzPem bPDzn7dhoMmhaCqfzyRhPCsdT3RREGeFNqQ3rkhmdXZ359Zj7ex2z0oVzzzxbWPy mes60Hj9l6zRayiR2NQ4eiB31jJWM5EPj2mzKCV/XGIj7C/unecbfbt8JxJlTnUg gkT8Y1b3vBSf18Zh6GrUBJRcofVbfj3e5hQJ8t36ItQqX8iPJu0lVCXVed8y+67I u+WCQ6LIZroSYUM+f+U2S2ZPyRMq2gyp9C+P6VPXtQTL6v2qZEezZhsKzlNwKiql UDZLMK3KafaWY52hXrld5d49fPpaufHS+2CfWR4+2tM2sFgHhXjCuBVwwcL7iJF1 E1gtJF77sFnGk8Dwcb/WGGbqbLw6kc+cMyIMKowLulvluQsbPkl2UWen4YI4Kom2 7+Z4wLVp9MExKAZ7F5ySjkCJ5LwE3VE8COZCzOfNYE4dfun2IPkGHguywGG/udQK D8YnUvj3CfcACvYC/ZBt =PcsZ -----END PGP SIGNATURE-----
Dear Egbert Eich, > -----Original Message----- > From: Egbert Eich [mailto:egbert.eich@gmail.com] > Sent: Tuesday, April 09, 2013 5:12 PM > To: u-boot@lists.denx.de > Cc: Piotr Wilczek; Egbert Eich > Subject: [Patch v2] cmd/gpt: Support gpt command for all devices > > From: Egbert Eich <eich@suse.com> > > The gpt command was only implemented for mmc devices. There is no > reason why this command should not be generalized and be applied all > other storage device classes. > This change both simplifies the implementation and eliminates a build > failure for systems that don't support mmcs. > > Signed-off-by: Egbert Eich <eich@suse.com> > --- > Changes for v2: > - Coding style cleanup. > > common/cmd_gpt.c | 44 +++++++++++++++++++------------------------- > 1 file changed, 19 insertions(+), 25 deletions(-) > > diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c index efd7934..3594dca > 100644 > --- a/common/cmd_gpt.c > +++ b/common/cmd_gpt.c > @@ -23,7 +23,6 @@ > #include <common.h> > #include <malloc.h> > #include <command.h> > -#include <mmc.h> > #include <part_efi.h> > #include <exports.h> > #include <linux/ctype.h> > @@ -134,7 +133,7 @@ static int set_gpt_info(block_dev_desc_t *dev_desc, > int errno = 0; > uint64_t size_ll, start_ll; > > - debug("%s: MMC lba num: 0x%x %d\n", __func__, > + debug("%s: lba num: 0x%x %d\n", __func__, > (unsigned int)dev_desc->lba, (unsigned int)dev_desc->lba); > > if (str_part == NULL) > @@ -247,25 +246,18 @@ err: > return errno; > } > > -static int gpt_mmc_default(int dev, const char *str_part) > +static int gpt_default(block_dev_desc_t *blk_dev_desc, const char > +*str_part) > { > int ret; > char *str_disk_guid; > u8 part_count = 0; > disk_partition_t *partitions = NULL; > > - struct mmc *mmc = find_mmc_device(dev); > - > - if (mmc == NULL) { > - printf("%s: mmc dev %d NOT available\n", __func__, dev); > - return CMD_RET_FAILURE; > - } > - > if (!str_part) > return -1; > > /* fill partitions */ > - ret = set_gpt_info(&mmc->block_dev, str_part, > + ret = set_gpt_info(blk_dev_desc, str_part, > &str_disk_guid, &partitions, &part_count); > if (ret) { > if (ret == -1) > @@ -278,7 +270,7 @@ static int gpt_mmc_default(int dev, const char > *str_part) > } > > /* save partitions layout to disk */ > - gpt_restore(&mmc->block_dev, str_disk_guid, partitions, > part_count); > + gpt_restore(&blk_dev_desc, str_disk_guid, partitions, > part_count); 'blk_dev_desc' is a pointer, no need to take its address > free(str_disk_guid); > free(partitions); > > @@ -306,20 +298,22 @@ static int do_gpt(cmd_tbl_t *cmdtp, int flag, int > argc, char * const argv[]) > > /* command: 'write' */ > if ((strcmp(argv[1], "write") == 0) && (argc == 5)) { > - /* device: 'mmc' */ > - if (strcmp(argv[2], "mmc") == 0) { > - /* check if 'dev' is a number */ > - for (pstr = argv[3]; *pstr != '\0'; pstr++) > - if (!isdigit(*pstr)) { > - printf("'%s' is not a number\n", > - argv[3]); > - return CMD_RET_USAGE; > - } > - dev = (int)simple_strtoul(argv[3], NULL, 10); > - /* write to mmc */ > - if (gpt_mmc_default(dev, argv[4])) > - return CMD_RET_FAILURE; > + char *ep; > + block_dev_desc_t *blk_dev_desc; > + dev = (int)simple_strtoul(argv[3], NULL, 10); > + if (*ep) { warning: 'ep' may be used uninitialized in this function shouldn't the address of 'ep' be passed to 'simple_strtoul' and then compared with argv[3]? > + printf("'%s' is not a number\n", argv[3]); > + return CMD_RET_USAGE; > } > + blk_dev_desc = get_dev(argv[2], dev); > + if (!blk_dev_desc) { > + printf("%s: %s dev %d NOT available\n", > + __func__, argv[2], dev); > + return CMD_RET_FAILURE; > + } > + > + if (gpt_default(blk_dev_desc, argv[4])) > + return CMD_RET_FAILURE; unused 'pstr' variable can be removed > } else { > return CMD_RET_USAGE; > } > -- > 1.8.1.4 Best ragards, Piotr Wilczek
diff --git a/common/cmd_gpt.c b/common/cmd_gpt.c index efd7934..3594dca 100644 --- a/common/cmd_gpt.c +++ b/common/cmd_gpt.c @@ -23,7 +23,6 @@ #include <common.h> #include <malloc.h> #include <command.h> -#include <mmc.h> #include <part_efi.h> #include <exports.h> #include <linux/ctype.h> @@ -134,7 +133,7 @@ static int set_gpt_info(block_dev_desc_t *dev_desc, int errno = 0; uint64_t size_ll, start_ll; - debug("%s: MMC lba num: 0x%x %d\n", __func__, + debug("%s: lba num: 0x%x %d\n", __func__, (unsigned int)dev_desc->lba, (unsigned int)dev_desc->lba); if (str_part == NULL) @@ -247,25 +246,18 @@ err: return errno; } -static int gpt_mmc_default(int dev, const char *str_part) +static int gpt_default(block_dev_desc_t *blk_dev_desc, const char *str_part) { int ret; char *str_disk_guid; u8 part_count = 0; disk_partition_t *partitions = NULL; - struct mmc *mmc = find_mmc_device(dev); - - if (mmc == NULL) { - printf("%s: mmc dev %d NOT available\n", __func__, dev); - return CMD_RET_FAILURE; - } - if (!str_part) return -1; /* fill partitions */ - ret = set_gpt_info(&mmc->block_dev, str_part, + ret = set_gpt_info(blk_dev_desc, str_part, &str_disk_guid, &partitions, &part_count); if (ret) { if (ret == -1) @@ -278,7 +270,7 @@ static int gpt_mmc_default(int dev, const char *str_part) } /* save partitions layout to disk */ - gpt_restore(&mmc->block_dev, str_disk_guid, partitions, part_count); + gpt_restore(&blk_dev_desc, str_disk_guid, partitions, part_count); free(str_disk_guid); free(partitions); @@ -306,20 +298,22 @@ static int do_gpt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) /* command: 'write' */ if ((strcmp(argv[1], "write") == 0) && (argc == 5)) { - /* device: 'mmc' */ - if (strcmp(argv[2], "mmc") == 0) { - /* check if 'dev' is a number */ - for (pstr = argv[3]; *pstr != '\0'; pstr++) - if (!isdigit(*pstr)) { - printf("'%s' is not a number\n", - argv[3]); - return CMD_RET_USAGE; - } - dev = (int)simple_strtoul(argv[3], NULL, 10); - /* write to mmc */ - if (gpt_mmc_default(dev, argv[4])) - return CMD_RET_FAILURE; + char *ep; + block_dev_desc_t *blk_dev_desc; + dev = (int)simple_strtoul(argv[3], NULL, 10); + if (*ep) { + printf("'%s' is not a number\n", argv[3]); + return CMD_RET_USAGE; } + blk_dev_desc = get_dev(argv[2], dev); + if (!blk_dev_desc) { + printf("%s: %s dev %d NOT available\n", + __func__, argv[2], dev); + return CMD_RET_FAILURE; + } + + if (gpt_default(blk_dev_desc, argv[4])) + return CMD_RET_FAILURE; } else { return CMD_RET_USAGE; }