summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2012-10-30 12:04:17 +0000
committerTom Rini <trini@ti.com>2012-11-04 11:00:24 -0700
commite9b0f99e8243e3146f3b5f4ef91f4b6c8f4452c0 (patch)
tree88a8c850a714be1cc7b2db07620732bdcedcd8bd
parent51bdad67cb6738c5d0e78084cf3e3baa216f4d2f (diff)
downloadu-boot-imx-e9b0f99e8243e3146f3b5f4ef91f4b6c8f4452c0.zip
u-boot-imx-e9b0f99e8243e3146f3b5f4ef91f4b6c8f4452c0.tar.gz
u-boot-imx-e9b0f99e8243e3146f3b5f4ef91f4b6c8f4452c0.tar.bz2
fs: fix do_fsload() handling of optional arguments
Most arguments to the shell command do_fsload() implements are optional. Fix the minimum argc check to respect that. Cater for the situation where argv[2] is not provided. Enhance both do_fsload() and do_ls() to check the maximum number of arguments too. While this check would typically be implemented via U_BOOT_CMD()'s max_args parameter, if these functions are called directly, then that check won't exist. Finally, alter do_ls() to check (argc >= 4) rather than (argc == 4) so that if the function is enhanced to allow extra arguments in the future, this test won't need to be changed at that time. Signed-off-by: Stephen Warren <swarren@nvidia.com> Reviewed-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
-rw-r--r--fs/fs.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/fs.c b/fs/fs.c
index e148a07..f570312 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -258,10 +258,12 @@ int do_fsload(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
int len_read;
char buf[12];
- if (argc < 5)
+ if (argc < 2)
+ return CMD_RET_USAGE;
+ if (argc > 7)
return CMD_RET_USAGE;
- if (fs_set_blk_dev(argv[1], argv[2], fstype))
+ if (fs_set_blk_dev(argv[1], (argc >= 3) ? argv[2] : NULL, fstype))
return 1;
if (argc >= 4) {
@@ -308,11 +310,13 @@ int do_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
{
if (argc < 2)
return CMD_RET_USAGE;
+ if (argc > 4)
+ return CMD_RET_USAGE;
if (fs_set_blk_dev(argv[1], (argc >= 3) ? argv[2] : NULL, fstype))
return 1;
- if (fs_ls(argc == 4 ? argv[3] : "/"))
+ if (fs_ls(argc >= 4 ? argv[3] : "/"))
return 1;
return 0;