]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/strutils: fix errno usage in strtoint functions
authorRuediger Meier <ruediger.meier@ga-group.nl>
Sun, 21 Feb 2016 13:12:01 +0000 (14:12 +0100)
committerRuediger Meier <ruediger.meier@ga-group.nl>
Sun, 21 Feb 2016 17:08:26 +0000 (18:08 +0100)
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>
lib/strutils.c

index ef81ebd748281523b6049a5f69c3c69344aad38d..4e0f9cdf1b791f610e42e8c53a199329684502f3 100644 (file)
@@ -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);