fs: fix do_fsload() handling of optional arguments
authorStephen Warren <swarren@nvidia.com>
Tue, 30 Oct 2012 12:04:17 +0000 (12:04 +0000)
committerTom Rini <trini@ti.com>
Sun, 4 Nov 2012 18:00:24 +0000 (11:00 -0700)
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>
fs/fs.c

diff --git a/fs/fs.c b/fs/fs.c
index e148a07406fe93365ef3f9154b9b02be7ee1833f..f570312610fb7684f97db031f64ddab25298e396 100644 (file)
--- 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;