summaryrefslogtreecommitdiff
path: root/lib/parse-duration.c
diff options
context:
space:
mode:
authorBruce Korb <bkorb@gnu.org>2008-12-29 22:00:19 +0100
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>2008-12-29 22:00:19 +0100
commit2363a9f8faa3abfdfde6adec5c1dc0c816016731 (patch)
tree78294889ef92c06a6123da3cd929d2edb6960c51 /lib/parse-duration.c
parent3cb753d3f0109c172d5c5e9c595b287b034bd577 (diff)
downloadgnulib-2363a9f8faa3abfdfde6adec5c1dc0c816016731.tar.gz
parse-duration: small doc tweak and coding aesthetics issue.
* lib/parse-duration.h: non-iso form accepts years, months weeks, too * lib/parse-duration.c: use a switch instead of cascading if's. Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Diffstat (limited to 'lib/parse-duration.c')
-rw-r--r--lib/parse-duration.c38
1 files changed, 12 insertions, 26 deletions
diff --git a/lib/parse-duration.c b/lib/parse-duration.c
index 91f5291c5b..561bd98adb 100644
--- a/lib/parse-duration.c
+++ b/lib/parse-duration.c
@@ -566,38 +566,24 @@ parse_non_iso8601(cch_t * pz)
time_t
parse_duration (char const * pz)
{
- time_t res = 0;
-
while (isspace ((unsigned char)*pz))
pz++;
- do {
- if (*pz == 'P')
- {
- res = parse_period (pz + 1);
- if (res == BAD_TIME)
- break;
- return res;
- }
-
- if (*pz == 'T')
- {
- res = parse_time (pz + 1);
- if (res == BAD_TIME)
- break;
- return res;
- }
-
- if (! isdigit ((unsigned char)*pz))
- break;
+ switch (*pz)
+ {
+ case 'P':
+ return parse_period (pz + 1);
- res = parse_non_iso8601 (pz);
- if (res != BAD_TIME)
- return res;
+ case 'T':
+ return parse_time (pz + 1);
- } while (0);
+ default:
+ if (isdigit ((unsigned char)*pz))
+ return parse_non_iso8601 (pz);
- return BAD_TIME;
+ errno = EINVAL;
+ return BAD_TIME;
+ }
}
/*