summaryrefslogtreecommitdiffstats
path: root/lib/strutils.c
diff options
context:
space:
mode:
authorRuediger Meier2016-02-21 14:12:01 +0100
committerRuediger Meier2016-02-21 18:08:26 +0100
commit73b9e094a8a55c9e0f8c148b9006df23c48697ac (patch)
tree56dca07cb264c2bbe0b703cadad69a130f8e700f /lib/strutils.c
parentlibsmartcols: add sample-scols-continuous (diff)
downloadkernel-qcow2-util-linux-73b9e094a8a55c9e0f8c148b9006df23c48697ac.tar.gz
kernel-qcow2-util-linux-73b9e094a8a55c9e0f8c148b9006df23c48697ac.tar.xz
kernel-qcow2-util-linux-73b9e094a8a55c9e0f8c148b9006df23c48697ac.zip
lib/strutils: fix errno usage in strtoint functions
Don't use undefined errno: $ ./logger --no-act -t "wtf" --id="" message logger: failed to parse id: '': No such file or directory Don't print useless EINVAL message but ERANGE only: $ ./logger --no-act -t "wtf" --id="XX" message logger: failed to parse id: 'XX': Invalid argument Note the ERANGE-only improvement does not change anything on Linux/c99 as strtoul(3) only set ERANGE there. Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
Diffstat (limited to 'lib/strutils.c')
-rw-r--r--lib/strutils.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/lib/strutils.c b/lib/strutils.c
index ef81ebd74..4e0f9cdf1 100644
--- a/lib/strutils.c
+++ b/lib/strutils.c
@@ -298,9 +298,9 @@ int64_t strtos64_or_err(const char *str, const char *errmesg)
int64_t num;
char *end = NULL;
+ errno = 0;
if (str == NULL || *str == '\0')
goto err;
- errno = 0;
num = strtoimax(str, &end, 10);
if (errno || str == end || (end && *end))
@@ -308,7 +308,7 @@ int64_t strtos64_or_err(const char *str, const char *errmesg)
return num;
err:
- if (errno)
+ if (errno == ERANGE)
err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
@@ -319,9 +319,9 @@ uint64_t strtou64_or_err(const char *str, const char *errmesg)
uintmax_t num;
char *end = NULL;
+ errno = 0;
if (str == NULL || *str == '\0')
goto err;
- errno = 0;
num = strtoumax(str, &end, 10);
if (errno || str == end || (end && *end))
@@ -329,7 +329,7 @@ uint64_t strtou64_or_err(const char *str, const char *errmesg)
return num;
err:
- if (errno)
+ if (errno == ERANGE)
err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
@@ -341,9 +341,9 @@ double strtod_or_err(const char *str, const char *errmesg)
double num;
char *end = NULL;
+ errno = 0;
if (str == NULL || *str == '\0')
goto err;
- errno = 0;
num = strtod(str, &end);
if (errno || str == end || (end && *end))
@@ -351,7 +351,7 @@ double strtod_or_err(const char *str, const char *errmesg)
return num;
err:
- if (errno)
+ if (errno == ERANGE)
err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
@@ -362,9 +362,9 @@ long strtol_or_err(const char *str, const char *errmesg)
long num;
char *end = NULL;
+ errno = 0;
if (str == NULL || *str == '\0')
goto err;
- errno = 0;
num = strtol(str, &end, 10);
if (errno || str == end || (end && *end))
@@ -372,8 +372,9 @@ long strtol_or_err(const char *str, const char *errmesg)
return num;
err:
- if (errno)
+ if (errno == ERANGE)
err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
+
errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
}
@@ -382,9 +383,9 @@ unsigned long strtoul_or_err(const char *str, const char *errmesg)
unsigned long num;
char *end = NULL;
+ errno = 0;
if (str == NULL || *str == '\0')
goto err;
- errno = 0;
num = strtoul(str, &end, 10);
if (errno || str == end || (end && *end))
@@ -392,7 +393,7 @@ unsigned long strtoul_or_err(const char *str, const char *errmesg)
return num;
err:
- if (errno)
+ if (errno == ERANGE)
err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);