]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/strutils: add strtosize_or_err, clean up
authorKarel Zak <kzak@redhat.com>
Fri, 30 Mar 2012 14:11:31 +0000 (16:11 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 30 Mar 2012 14:11:31 +0000 (16:11 +0200)
 * add strtosize_or_err(), we use strtosize() + err() on many places

 * add STRTOXX_EXIT_CODE to overwrite the default EXIT_FAILURE

 * remove else-after-noreturn (e.g. if (foo) err(...); else err(...))

 * clean up indent...

Signed-off-by: Karel Zak <kzak@redhat.com>
include/strutils.h
lib/strutils.c

index ef283dfed7ca7bba3ead1be0c8f23ed73d15faf4..3134fde9e428efc6da9b89a8e07a22c1f4e9d5c8 100644 (file)
@@ -5,11 +5,18 @@
 #include <string.h>
 #include <sys/types.h>
 
+/* default strtoxx_or_err() exit code */
+#ifndef STRTOXX_EXIT_CODE
+# define STRTOXX_EXIT_CODE EXIT_FAILURE
+#endif
+
+
 extern int strtosize(const char *str, uintmax_t *res);
 extern double strtod_or_err(const char *str, const char *errmesg);
 extern long strtol_or_err(const char *str, const char *errmesg);
 extern long long strtoll_or_err(const char *str, const char *errmesg);
 extern unsigned long strtoul_or_err(const char *str, const char *errmesg);
+extern uintmax_t strtosize_or_err(const char *str, const char *errmesg);
 
 #ifndef HAVE_STRNLEN
 extern size_t strnlen(const char *s, size_t maxlen);
index c40daf2000c474d99078dc7ed283443c16583f43..db1511023b3bd8e26f37f9feca8a645cb987cdb0 100644 (file)
@@ -184,60 +184,56 @@ double strtod_or_err(const char *str, const char *errmesg)
                goto err;
 
        return num;
- err:
+err:
        if (errno)
-               err(EXIT_FAILURE, "%s: '%s'", errmesg, str);
-       else
-               errx(EXIT_FAILURE, "%s: '%s'", errmesg, str);
-       return 0;
+               err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
+
+       errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
 }
 /*
  * same as strtol(3) but exit on failure instead of returning crap
  */
 long strtol_or_err(const char *str, const char *errmesg)
 {
-       long num;
-       char *end = NULL;
+       long num;
+       char *end = NULL;
 
-       if (str == NULL || *str == '\0')
-               goto err;
-       errno = 0;
-       num = strtol(str, &end, 10);
+       if (str == NULL || *str == '\0')
+               goto err;
+       errno = 0;
+       num = strtol(str, &end, 10);
 
-       if (errno || str == end || (end && *end))
-               goto err;
+       if (errno || str == end || (end && *end))
+               goto err;
 
-       return num;
+       return num;
 err:
-       if (errno)
-               err(EXIT_FAILURE, "%s: '%s'", errmesg, str);
-       else
-               errx(EXIT_FAILURE, "%s: '%s'", errmesg, str);
-       return 0;
+       if (errno)
+               err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
+       errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
 }
 /*
  * same as strtoll(3) but exit on failure instead of returning crap
  */
 long long strtoll_or_err(const char *str, const char *errmesg)
 {
-       long long num;
-       char *end = NULL;
+       long long num;
+       char *end = NULL;
 
-       if (str == NULL || *str == '\0')
-               goto err;
-       errno = 0;
-       num = strtoll(str, &end, 10);
+       if (str == NULL || *str == '\0')
+               goto err;
+       errno = 0;
+       num = strtoll(str, &end, 10);
 
-       if (errno || str == end || (end && *end))
-               goto err;
+       if (errno || str == end || (end && *end))
+               goto err;
 
-       return num;
+       return num;
 err:
-       if (errno)
-               err(EXIT_FAILURE, "%s: '%s'", errmesg, str);
-       else
-               errx(EXIT_FAILURE, "%s: '%s'", errmesg, str);
-       return 0;
+       if (errno)
+               err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
+
+       errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
 }
 /*
  * same as strtoul(3) but exit on failure instead of returning crap
@@ -258,10 +254,22 @@ unsigned long strtoul_or_err(const char *str, const char *errmesg)
        return num;
 err:
        if (errno)
-               err(EXIT_FAILURE, "%s: '%s'", errmesg, str);
-       else
-               errx(EXIT_FAILURE, "%s: '%s'", errmesg, str);
-       return 0;
+               err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
+
+       errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
+}
+
+uintmax_t strtosize_or_err(const char *str, const char *errmesg)
+{
+       uintmax_t num;
+
+       if (strtosize(str, &num) == 0)
+               return num;
+
+       if (errno)
+               err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
+
+       errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
 }
 
 /*