From: Andreas Reichel <
andreas.r...@siemens.com>
If errno is not set to zero before strtol is called, one cannot
distinguish between a successful conversion of "0" and a real error,
because errno might have already been set before the call to strtol but
strtol itself does not set errno to zero.
Signed-off-by: Andreas Reichel <
andreas.r...@siemens.com>
---
env/env_api_fat.c | 3 +++
tools/bg_setenv.c | 2 ++
2 files changed, 5 insertions(+)
diff --git a/env/env_api_fat.c b/env/env_api_fat.c
index 851b70c..653d3f8 100644
--- a/env/env_api_fat.c
+++ b/env/env_api_fat.c
@@ -552,6 +552,7 @@ int bgenv_set(BGENV *env, char *key, char *type, void *data, uint32_t datalen)
}
switch (e) {
case EBGENV_REVISION:
+ errno = 0;
val = strtol(value, &p, 10);
if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN)) ||
(errno != 0 && val == 0)) {
@@ -569,6 +570,7 @@ int bgenv_set(BGENV *env, char *key, char *type, void *data, uint32_t datalen)
str8to16(env->data->kernelparams, value);
break;
case EBGENV_WATCHDOG_TIMEOUT_SEC:
+ errno = 0;
val = strtol(value, &p, 10);
if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN)) ||
(errno != 0 && val == 0)) {
@@ -580,6 +582,7 @@ int bgenv_set(BGENV *env, char *key, char *type, void *data, uint32_t datalen)
env->data->watchdog_timeout_sec = val;
break;
case EBGENV_USTATE:
+ errno = 0;
val = strtol(value, &p, 10);
if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN)) ||
(errno != 0 && val == 0)) {
diff --git a/tools/bg_setenv.c b/tools/bg_setenv.c
index 3afcc9f..8aa6668 100644
--- a/tools/bg_setenv.c
+++ b/tools/bg_setenv.c
@@ -244,6 +244,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state)
(uint8_t *)arg, strlen(arg) + 1);
break;
case 'p':
+ errno = 0;
i = strtol(arg, &tmp, 10);
if ((errno == ERANGE && (i == LONG_MAX || i == LONG_MIN)) ||
(errno != 0 && i == 0) || (tmp == arg)) {
@@ -262,6 +263,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state)
}
break;
case 's':
+ errno = 0;
i = strtol(arg, &tmp, 10);
if ((errno == ERANGE && (i == LONG_MAX || i == LONG_MIN)) ||
(errno != 0 && i == 0) || (tmp == arg)) {
--
2.14.2