calendarspec: allow whole second ranges
authorDouglas Christman <DouglasChristman@gmail.com>
Thu, 24 Nov 2016 20:51:07 +0000 (15:51 -0500)
committerDouglas Christman <DouglasChristman@gmail.com>
Thu, 24 Nov 2016 23:22:08 +0000 (18:22 -0500)
Previously a string like "00:00:01..03" would fail to parse due to the
ambiguity between a decimal point and the start of a range.

src/basic/calendarspec.c
src/test/test-calendarspec.c

index 1de04fe..4ef22df 100644 (file)
@@ -486,6 +486,10 @@ static int parse_component_decimal(const char **p, bool usec, unsigned long *res
                 if (*e == '.') {
                         unsigned add;
 
+                        /* This is the start of a range, not a fractional part */
+                        if (e[1] == '.')
+                                goto finish;
+
                         e++;
                         r = parse_fractional_part_u(&e, 6, &add);
                         if (r < 0)
@@ -497,6 +501,7 @@ static int parse_component_decimal(const char **p, bool usec, unsigned long *res
                 }
         }
 
+finish:
         *p = e;
         *res = value;
 
index d4bb4a1..0bb29af 100644 (file)
@@ -177,6 +177,7 @@ int main(int argc, char* argv[]) {
         test_one("1..3-1..3 1..3:1..3", "*-01,02,03-01,02,03 01,02,03:01,02,03:00");
         test_one("00:00:1.125..2.125", "*-*-* 00:00:01.125000,02.125000");
         test_one("00:00:1.0..3.8", "*-*-* 00:00:01,02,03");
+        test_one("00:00:01..03", "*-*-* 00:00:01,02,03");
         test_one("*-*~1 Utc", "*-*~01 00:00:00 UTC");
         test_one("*-*~05,3 ", "*-*~03,05 00:00:00");
         test_one("*-*~* 00:00:00", "*-*-* 00:00:00");