summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2024-01-07 00:06:49 +0100
committerSerge Hallyn <serge@hallyn.com>2024-05-04 17:22:57 -0500
commitf40bd948565d249372585fb158493805215d0a1a (patch)
tree05c83e34bc3b2797bfb8920b25d2f2d1a846c018
parent7af7361fd6b3ba61678d909de10fdc085a2e9f3c (diff)
lib/getrange.c: getrange(): Use goto to deduplicate code
Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r--lib/getrange.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/lib/getrange.c b/lib/getrange.c
index e5ea1744..8f7acee0 100644
--- a/lib/getrange.c
+++ b/lib/getrange.c
@@ -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;