From 81180819b842602f29f325298ee3e522beda3e0a Mon Sep 17 00:00:00 2001 From: Rob Herring Date: Thu, 23 Aug 2012 11:31:46 +0000 Subject: cmd_extX: use common get_device_and_partition function Convert ext2/4 load, ls, and write functions to use common device and partition parsing function. With the common function "dev:part" can come from the environment and a '-' can be used in that case. Signed-off-by: Rob Herring --- common/cmd_ext_common.c | 95 ++++++++++++------------------------------------- 1 file changed, 23 insertions(+), 72 deletions(-) (limited to 'common/cmd_ext_common.c') diff --git a/common/cmd_ext_common.c b/common/cmd_ext_common.c index 8972ccce28..7d26944ead 100644 --- a/common/cmd_ext_common.c +++ b/common/cmd_ext_common.c @@ -68,13 +68,11 @@ int do_ext_load(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { char *filename = NULL; - char *ep; - int dev; - unsigned long part = 1; + int dev, part; ulong addr = 0; - ulong part_length; int filelen; disk_partition_t info; + block_dev_desc_t *dev_desc; char buf[12]; unsigned long count; const char *addr_str; @@ -110,50 +108,19 @@ int do_ext_load(cmd_tbl_t *cmdtp, int flag, int argc, return 1; } - dev = (int)simple_strtoul(argv[2], &ep, 16); - ext4_dev_desc = get_dev(argv[1], dev); - if (ext4_dev_desc == NULL) { - printf("** Block device %s %d not supported\n", argv[1], dev); + part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info); + if (part < 0) return 1; - } - if (*ep) { - if (*ep != ':') { - puts("** Invalid boot device, use `dev[:part]' **\n"); - goto fail; - } - part = simple_strtoul(++ep, NULL, 16); - } + dev = dev_desc->dev; + printf("Loading file \"%s\" from %s device %d%c%c\n", + filename, argv[1], dev, + part ? ':' : ' ', part ? part + '0' : ' '); - if (part != 0) { - if (get_partition_info(ext4_dev_desc, part, &info)) { - printf("** Bad partition %lu **\n", part); - goto fail; - } - - if (strncmp((char *)info.type, BOOT_PART_TYPE, - strlen(BOOT_PART_TYPE)) != 0) { - printf("** Invalid partition type \"%s\"" - " (expect \"" BOOT_PART_TYPE "\")\n", info.type); - goto fail; - } - printf("Loading file \"%s\" " - "from %s device %d:%lu %s\n", - filename, argv[1], dev, part, info.name); - } else { - printf("Loading file \"%s\" from %s device %d\n", - filename, argv[1], dev); - } + ext4fs_set_blk_dev(dev_desc, &info); - part_length = ext4fs_set_blk_dev(ext4_dev_desc, part); - if (part_length == 0) { - printf("**Bad partition - %s %d:%lu **\n", argv[1], dev, part); - ext4fs_close(); - goto fail; - } - - if (!ext4fs_mount(part_length)) { - printf("** Bad ext2 partition or disk - %s %d:%lu **\n", + if (!ext4fs_mount(info.size)) { + printf("** Bad ext2 partition or disk - %s %d:%d **\n", argv[1], dev, part); ext4fs_close(); goto fail; @@ -169,7 +136,7 @@ int do_ext_load(cmd_tbl_t *cmdtp, int flag, int argc, filelen = count; if (ext4fs_read((char *)addr, filelen) != filelen) { - printf("** Unable to read \"%s\" from %s %d:%lu **\n", + printf("** Unable to read \"%s\" from %s %d:%d **\n", filename, argv[1], dev, part); ext4fs_close(); goto fail; @@ -192,41 +159,25 @@ int do_ext_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { const char *filename = "/"; int dev; - unsigned long part = 1; - char *ep; - int part_length; - if (argc < 3) - return cmd_usage(cmdtp); - - dev = (int)simple_strtoul(argv[2], &ep, 16); + int part; + block_dev_desc_t *dev_desc; + disk_partition_t info; - ext4_dev_desc = get_dev(argv[1], dev); + if (argc < 2) + return cmd_usage(cmdtp); - if (ext4_dev_desc == NULL) { - printf("\n** Block device %s %d not supported\n", argv[1], dev); + part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info); + if (part < 0) return 1; - } - - if (*ep) { - if (*ep != ':') { - puts("\n** Invalid boot device, use `dev[:part]' **\n"); - goto fail; - } - part = simple_strtoul(++ep, NULL, 16); - } if (argc == 4) filename = argv[3]; - part_length = ext4fs_set_blk_dev(ext4_dev_desc, part); - if (part_length == 0) { - printf("** Bad partition - %s %d:%lu **\n", argv[1], dev, part); - ext4fs_close(); - goto fail; - } + dev = dev_desc->dev; + ext4fs_set_blk_dev(dev_desc, &info); - if (!ext4fs_mount(part_length)) { - printf("** Bad ext2 partition or disk - %s %d:%lu **\n", + if (!ext4fs_mount(info.size)) { + printf("** Bad ext2 partition or disk - %s %d:%d **\n", argv[1], dev, part); ext4fs_close(); goto fail; -- cgit v1.2.1