mmc: don't allow extra cmdline arguments
authorStephen Warren <swarren@nvidia.com>
Mon, 1 Apr 2013 11:50:28 +0000 (11:50 +0000)
committerTom Rini <trini@ti.com>
Tue, 2 Apr 2013 20:23:35 +0000 (16:23 -0400)
The "mmc rescan" command takes no arguments. However, executing
"mmc rescan 1" succeeds, leading the user to believe that MMC device 1
has been rescanned. In fact, the "current" MMC device has been
rescanned, and the current device may well not be 1. Add error-checking
to the "mmc" command to explicitly reject any extra command-line
arguments so that it's more obvious when U-Boot isn't doing what the
user thought they asked it to.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
common/cmd_mmc.c

index 8c53a10..9f3d6c5 100644 (file)
@@ -164,8 +164,12 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        }
 
        if (strcmp(argv[1], "rescan") == 0) {
-               struct mmc *mmc = find_mmc_device(curr_device);
+               struct mmc *mmc;
 
+               if (argc != 2)
+                       return CMD_RET_USAGE;
+
+               mmc = find_mmc_device(curr_device);
                if (!mmc) {
                        printf("no mmc device at slot %x\n", curr_device);
                        return 1;
@@ -179,8 +183,12 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                        return 0;
        } else if (strncmp(argv[1], "part", 4) == 0) {
                block_dev_desc_t *mmc_dev;
-               struct mmc *mmc = find_mmc_device(curr_device);
+               struct mmc *mmc;
+
+               if (argc != 2)
+                       return CMD_RET_USAGE;
 
+               mmc = find_mmc_device(curr_device);
                if (!mmc) {
                        printf("no mmc device at slot %x\n", curr_device);
                        return 1;
@@ -196,6 +204,8 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                puts("get mmc type error!\n");
                return 1;
        } else if (strcmp(argv[1], "list") == 0) {
+               if (argc != 2)
+                       return CMD_RET_USAGE;
                print_mmc_devices('\n');
                return 0;
        } else if (strcmp(argv[1], "dev") == 0) {