]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
calendarspec: fix find_next skipping times 2695/head
authorHristo Venev <hristo@venev.name>
Mon, 22 Feb 2016 13:02:48 +0000 (08:02 -0500)
committerHristo Venev <hristo@venev.name>
Mon, 22 Feb 2016 13:02:48 +0000 (08:02 -0500)
reset usec when bumping hours/minutes

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

index 00fc39a499b8013127c2fbad6628b178f8503cb8..2f40ba2b464031649b0884629739d7a1234b56e0 100644 (file)
@@ -1029,7 +1029,7 @@ static int find_next(const CalendarSpec *spec, struct tm *tm, usec_t *usec) {
 
                 r = find_matching_component(spec->hour, &c.tm_hour);
                 if (r > 0)
-                        c.tm_min = c.tm_sec = 0;
+                        c.tm_min = c.tm_sec = tm_usec = 0;
                 if (r < 0 || tm_out_of_bounds(&c, spec->utc)) {
                         c.tm_mday ++;
                         c.tm_hour = c.tm_min = c.tm_sec = tm_usec = 0;
@@ -1038,7 +1038,7 @@ static int find_next(const CalendarSpec *spec, struct tm *tm, usec_t *usec) {
 
                 r = find_matching_component(spec->minute, &c.tm_min);
                 if (r > 0)
-                        c.tm_sec = 0;
+                        c.tm_sec = tm_usec = 0;
                 if (r < 0 || tm_out_of_bounds(&c, spec->utc)) {
                         c.tm_hour ++;
                         c.tm_min = c.tm_sec = tm_usec = 0;
index 8754cb3381542f95ebcb997e7f648e1585adada9..5a8c6cbfb66318c145692cb3691328e1f8efba7a 100644 (file)
@@ -137,6 +137,7 @@ int main(int argc, char* argv[]) {
         test_next("2015-11-13 09:11:23.42", "EET", 12345, 1447398683420000);
         test_next("2015-11-13 09:11:23.42/1.77", "EET", 1447398683420000, 1447398685190000);
         test_next("2015-11-13 09:11:23.42/1.77", "EET", 1447398683419999, 1447398683420000);
+        test_next("Sun 16:00:00", "CET", 1456041600123456, 1456066800000000);
 
         assert_se(calendar_spec_from_string("test", &c) < 0);
         assert_se(calendar_spec_from_string("", &c) < 0);