diff options
author | Alejandro Colomar <alx@kernel.org> | 2024-01-07 00:06:49 +0100 |
---|---|---|
committer | Serge Hallyn <serge@hallyn.com> | 2024-05-04 17:22:57 -0500 |
commit | f40bd948565d249372585fb158493805215d0a1a (patch) | |
tree | 05c83e34bc3b2797bfb8920b25d2f2d1a846c018 | |
parent | 7af7361fd6b3ba61678d909de10fdc085a2e9f3c (diff) |
lib/getrange.c: getrange(): Use goto to deduplicate code
Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r-- | lib/getrange.c | 18 |
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; |