[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
parse-duration.c
From: |
Bruce Korb |
Subject: |
parse-duration.c |
Date: |
Sun, 21 Dec 2008 11:53:31 -0800 |
User-agent: |
Thunderbird 2.0.0.18 (X11/20081112) |
So, I've now had another gander now, too.
A small doc tweak and coding aesthetics issue:
$ diff -up gnulib/ChangeLog gnulib-clone/ChangeLog
--- gnulib/ChangeLog 2008-12-21 08:47:26.000000000 -0800
+++ gnulib-clone/ChangeLog 2008-12-21 11:50:18.000000000 -0800
@@ -1,3 +1,8 @@
+2008-11-17 Bruce Korb <address@hidden>
+
+ * lib/parse-duration.h: non-iso form accepts years, months weeks, too
+ * lib/parse-duration.c: use a switch instead of cascading if's.
+
2008-12-21 Bruno Haible <address@hidden>
Work around a btowc() bug on IRIX 6.5.
$ diff -up gnulib/lib/parse-duration.c gnulib-clone/lib/parse-duration.c
--- gnulib/lib/parse-duration.c 2008-12-21 08:47:26.000000000 -0800
+++ gnulib-clone/lib/parse-duration.c 2008-12-21 11:37:45.000000000 -0800
@@ -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;
-
- res = parse_non_iso8601 (pz);
- if (res != BAD_TIME)
- return res;
-
- } while (0);
-
- return BAD_TIME;
+ switch (*pz)
+ {
+ case 'P':
+ return parse_period (pz + 1);
+
+ case 'T':
+ return parse_time (pz + 1);
+
+ default:
+ if (isdigit ((unsigned char)*pz))
+ return parse_non_iso8601 (pz);
+
+ errno = EINVAL;
+ return BAD_TIME;
+ }
}
/*
$ diff -up gnulib/lib/parse-duration.h gnulib-clone/lib/parse-duration.h
--- gnulib/lib/parse-duration.h 2008-12-21 08:47:26.000000000 -0800
+++ gnulib-clone/lib/parse-duration.h 2008-12-21 11:41:19.000000000 -0800
@@ -28,10 +28,12 @@
==== if it is a digit
- the string may contain: NNN d NNN h NNN m NNN s
- This represents NNN days, NNN hours, NNN minutes and NNN seconds.
+ the string may contain: NNN Y NNN M NNN W NNN d NNN h NNN m NNN s
+ This represents NNN years, NNN months, NNN weeks, NNN days, NNN hours,
+ NNN minutes and NNN seconds.
The embeded white space is optional.
These terms must appear in this order.
+ Case is significant: 'M' is months and 'm' is minutes.
The final "s" is optional.
All of the terms ("NNN" plus designator) are optional.
Minutes and seconds may optionally be represented as NNN:NNN.
- parse-duration.c,
Bruce Korb <=