]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
lib/getrange.c: getrange(): Use goto to deduplicate code
authorAlejandro Colomar <alx@kernel.org>
Sat, 6 Jan 2024 23:06:49 +0000 (00:06 +0100)
committerSerge Hallyn <serge@hallyn.com>
Sat, 4 May 2024 22:22:57 +0000 (17:22 -0500)
Signed-off-by: Alejandro Colomar <alx@kernel.org>
lib/getrange.c

index e5ea1744998a62e636b56552dc1587def32e8011..8f7acee0ceb0e37588e1c00dc5a196e1af71ae4d 100644 (file)
@@ -39,16 +39,8 @@ getrange(const char *range,
        *has_max = false;
 
        if ('-' == range[0]) {
-               if (!isdigit(range[1]))
-                       return -1;
-
-               errno = 0;
-               *max = strtoul_noneg(&range[1], &endptr, 10);
-               if (('\0' != *endptr) || (0 != errno))
-                       return -1;
-               *has_max = true;
-
-               return 0;  /* -<long> */
+               endptr = range + 1;
+               goto parse_max;
        }
 
        errno = 0;
@@ -57,16 +49,16 @@ getrange(const char *range,
                return -1;
        *has_min = true;
 
-       switch (*endptr) {
+       switch (*endptr++) {
        case '\0':
                *has_max = true;
                *max = *min;
                return 0;  /* <long> */
 
        case '-':
-               endptr++;
                if ('\0' == *endptr)
                        return 0;  /* <long>- */
+parse_max:
                if (!isdigit(*endptr))
                        return -1;
 
@@ -76,7 +68,7 @@ getrange(const char *range,
                        return -1;
                *has_max = true;
 
-               return 0;  /* <long>-<long> */
+               return 0;  /* <long>-<long>, or -<long> */
 
        default:
                return -1;