[PATCH 1/1] cmd: simplify do_adc_single()

If argc is not < 3, it must be >= 3.
If argc >= 3, argv[2] cannot be NULL.
Fixes: 9de612ae4ded ("cmd: adc: Add support for storing ADC result in env variable") Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com --- cmd/adc.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/cmd/adc.c b/cmd/adc.c index 8de9121cad..195efa8661 100644 --- a/cmd/adc.c +++ b/cmd/adc.c @@ -71,7 +71,6 @@ static int do_adc_info(struct cmd_tbl *cmdtp, int flag, int argc, static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { - char *varname = NULL; struct udevice *dev; unsigned int data; int ret, uV, val; @@ -79,9 +78,6 @@ static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, if (argc < 3) return CMD_RET_USAGE;
- if (argc >= 3) - varname = argv[2]; - ret = adc_channel_single_shot(argv[1], simple_strtol(argv[2], NULL, 0), &data); if (ret) { @@ -99,8 +95,7 @@ static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, printf("%u\n", data); }
- if (varname) - env_set_ulong(varname, val); + env_set_ulong(argv[2], val);
return CMD_RET_SUCCESS; }

On 4/25/22 22:26, Heinrich Schuchardt wrote:
If argc is not < 3, it must be >= 3.
If argc >= 3, argv[2] cannot be NULL.
Fixes: 9de612ae4ded ("cmd: adc: Add support for storing ADC result in env variable") Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com
cmd/adc.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/cmd/adc.c b/cmd/adc.c index 8de9121cad..195efa8661 100644 --- a/cmd/adc.c +++ b/cmd/adc.c @@ -71,7 +71,6 @@ static int do_adc_info(struct cmd_tbl *cmdtp, int flag, int argc, static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) {
- char *varname = NULL; struct udevice *dev; unsigned int data; int ret, uV, val;
@@ -79,9 +78,6 @@ static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, if (argc < 3) return CMD_RET_USAGE;
- if (argc >= 3)
varname = argv[2];
- ret = adc_channel_single_shot(argv[1], simple_strtol(argv[2], NULL, 0), &data); if (ret) {
@@ -99,8 +95,7 @@ static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, printf("%u\n", data); }
- if (varname)
env_set_ulong(varname, val);
- env_set_ulong(argv[2], val);
We don't want to set the variable unconditionally .

On Mon, Apr 25, 2022 at 10:26:45PM +0200, Heinrich Schuchardt wrote:
If argc is not < 3, it must be >= 3.
If argc >= 3, argv[2] cannot be NULL.
Fixes: 9de612ae4ded ("cmd: adc: Add support for storing ADC result in env variable") Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com
Applied to u-boot/master, thanks!

25.04.2022 23:26, Heinrich Schuchardt wrote:
If argc is not < 3, it must be >= 3.
If argc >= 3, argv[2] cannot be NULL.
Fixes: 9de612ae4ded ("cmd: adc: Add support for storing ADC result in env variable") Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com
cmd/adc.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/cmd/adc.c b/cmd/adc.c index 8de9121cad..195efa8661 100644 --- a/cmd/adc.c +++ b/cmd/adc.c @@ -71,7 +71,6 @@ static int do_adc_info(struct cmd_tbl *cmdtp, int flag, int argc, static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) {
- char *varname = NULL; struct udevice *dev; unsigned int data; int ret, uV, val;
@@ -79,9 +78,6 @@ static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, if (argc < 3) return CMD_RET_USAGE;
- if (argc >= 3)
varname = argv[2];
- ret = adc_channel_single_shot(argv[1], simple_strtol(argv[2], NULL, 0), &data); if (ret) {
@@ -99,8 +95,7 @@ static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, printf("%u\n", data); }
- if (varname)
env_set_ulong(varname, val);
- env_set_ulong(argv[2], val);
The source code contains an error: argv[2] contains <channel> arg variable for env_set is in argv[3]
This patch is wrong. It must be reversed and these two lines must be corrected: if (argc >= 3) varname = argv[2];
to if (argc >= 4) varname = argv[3];
return CMD_RET_SUCCESS; }

On 7/3/22 14:22, Vyacheslav wrote:
25.04.2022 23:26, Heinrich Schuchardt wrote:
If argc is not < 3, it must be >= 3.
If argc >= 3, argv[2] cannot be NULL.
Fixes: 9de612ae4ded ("cmd: adc: Add support for storing ADC result in env variable") Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com
cmd/adc.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/cmd/adc.c b/cmd/adc.c index 8de9121cad..195efa8661 100644 --- a/cmd/adc.c +++ b/cmd/adc.c @@ -71,7 +71,6 @@ static int do_adc_info(struct cmd_tbl *cmdtp, int flag, int argc, static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { - char *varname = NULL; struct udevice *dev; unsigned int data; int ret, uV, val; @@ -79,9 +78,6 @@ static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, if (argc < 3) return CMD_RET_USAGE; - if (argc >= 3) - varname = argv[2];
ret = adc_channel_single_shot(argv[1], simple_strtol(argv[2], NULL, 0), &data); if (ret) { @@ -99,8 +95,7 @@ static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc, printf("%u\n", data); } - if (varname) - env_set_ulong(varname, val); + env_set_ulong(argv[2], val);
The source code contains an error: argv[2] contains <channel> arg variable for env_set is in argv[3]
This patch is wrong. It must be reversed and these two lines must be corrected: if (argc >= 3) varname = argv[2];
to if (argc >= 4) varname = argv[3];
Could you, please, send a patch.
Best regards
Heinrich
return CMD_RET_SUCCESS; }
participants (4)
-
Heinrich Schuchardt
-
Marek Vasut
-
Tom Rini
-
Vyacheslav