]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cmd: pwm: Rework argc sanity checking
authorTom Rini <trini@konsulko.com>
Tue, 26 Jan 2021 16:44:37 +0000 (11:44 -0500)
committerTom Rini <trini@konsulko.com>
Wed, 24 Feb 2021 21:51:48 +0000 (16:51 -0500)
Currently, we check argc in a number of places to make sure that we have
all of the required arguments for each of the pwm sub-commands.
However, there's at least one place where we've got dead code as we'll
never have argc == 0, due to checking that argc was at least 4 earlier
and having only subtracted 3.  Rework things so that when we have
determined our subcommand make sure we have the right number of
arguments for it, or error out.  This means we can stop checking against
argc again later.

Reported-by: Coverity (CID: 316601)
Cc: Pragnesh Patel <pragnesh.patel@sifive.com>
Signed-off-by: Tom Rini <trini@konsulko.com>
cmd/pwm.c

index 5849fc57b666f8bf9a8cd72f000a03e29b8af6f0..e1f97c759d2cfc2c1bab5667a95ef4a136ca3a1e 100644 (file)
--- a/cmd/pwm.c
+++ b/cmd/pwm.c
@@ -34,11 +34,9 @@ static int do_pwm(struct cmd_tbl *cmdtp, int flag, int argc,
        argc -= 2;
        argv += 2;
 
-       if (argc > 0) {
-               str_pwm = *argv;
-               argc--;
-               argv++;
-       }
+       str_pwm = *argv;
+       argc--;
+       argv++;
 
        if (!str_pwm)
                return CMD_RET_USAGE;
@@ -46,15 +44,23 @@ static int do_pwm(struct cmd_tbl *cmdtp, int flag, int argc,
        switch (*str_cmd) {
        case 'i':
                sub_cmd = PWM_SET_INVERT;
+               if (argc != 2)
+                       return CMD_RET_USAGE;
                break;
        case 'c':
                sub_cmd = PWM_SET_CONFIG;
+               if (argc != 3)
+                       return CMD_RET_USAGE;
                break;
        case 'e':
                sub_cmd = PWM_SET_ENABLE;
+               if (argc != 1)
+                       return CMD_RET_USAGE;
                break;
        case 'd':
                sub_cmd = PWM_SET_DISABLE;
+               if (argc != 1)
+                       return CMD_RET_USAGE;
                break;
        default:
                return CMD_RET_USAGE;
@@ -67,38 +73,29 @@ static int do_pwm(struct cmd_tbl *cmdtp, int flag, int argc,
                return cmd_process_error(cmdtp, ret);
        }
 
-       if (argc > 0) {
-               str_channel = *argv;
-               channel = simple_strtoul(str_channel, NULL, 10);
-               argc--;
-               argv++;
-       } else {
-               return CMD_RET_USAGE;
-       }
+       str_channel = *argv;
+       channel = simple_strtoul(str_channel, NULL, 10);
+       argc--;
+       argv++;
 
-       if (sub_cmd == PWM_SET_INVERT && argc > 0) {
+       if (sub_cmd == PWM_SET_INVERT) {
                str_enable = *argv;
                pwm_enable = simple_strtoul(str_enable, NULL, 10);
                ret = pwm_set_invert(dev, channel, pwm_enable);
-       } else if (sub_cmd == PWM_SET_CONFIG && argc == 2) {
+       } else if (sub_cmd == PWM_SET_CONFIG) {
                str_period = *argv;
                argc--;
                argv++;
                period_ns = simple_strtoul(str_period, NULL, 10);
 
-               if (argc > 0) {
-                       str_duty = *argv;
-                       duty_ns = simple_strtoul(str_duty, NULL, 10);
-               }
+               str_duty = *argv;
+               duty_ns = simple_strtoul(str_duty, NULL, 10);
 
                ret = pwm_set_config(dev, channel, period_ns, duty_ns);
        } else if (sub_cmd == PWM_SET_ENABLE) {
                ret = pwm_set_enable(dev, channel, 1);
        } else if (sub_cmd == PWM_SET_DISABLE) {
                ret = pwm_set_enable(dev, channel, 0);
-       } else {
-               printf("PWM arguments missing\n");
-               return CMD_RET_FAILURE;
        }
 
        if (ret) {