diff options
Diffstat (limited to 'common/cmd_ext_common.c')
| -rw-r--r-- | common/cmd_ext_common.c | 95 | 
1 files changed, 23 insertions, 72 deletions
| diff --git a/common/cmd_ext_common.c b/common/cmd_ext_common.c index 8972ccce2..7d26944ea 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); -	} - -	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); -	} +	dev = dev_desc->dev; +	printf("Loading file \"%s\" from %s device %d%c%c\n", +		filename, argv[1], dev, +		part ? ':' : ' ', part ? part + '0' : ' '); -	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; -	} +	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; @@ -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; |