diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/basic/calendarspec.c | 9 | ||||
-rw-r--r-- | src/basic/time-util.c | 12 | ||||
-rw-r--r-- | src/test/test-date.c | 9 |
3 files changed, 20 insertions, 10 deletions
diff --git a/src/basic/calendarspec.c b/src/basic/calendarspec.c index 987ca81910..50328e4187 100644 --- a/src/basic/calendarspec.c +++ b/src/basic/calendarspec.c @@ -650,6 +650,7 @@ fail: int calendar_spec_from_string(const char *p, CalendarSpec **spec) { CalendarSpec *c; int r; + const char *utc; assert(p); assert(spec); @@ -661,9 +662,11 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) { if (!c) return -ENOMEM; - c->utc = endswith_no_case(p, "UTC"); - if (c->utc) - p = strndupa(p, strlen(p) - strlen(" UTC")); + utc = endswith_no_case(p, " UTC"); + if (utc) { + c->utc = true; + p = strndupa(p, utc - p); + } if (strcaseeq(p, "minutely")) { r = const_chain(0, &c->second); diff --git a/src/basic/time-util.c b/src/basic/time-util.c index d117380d52..b348ed4204 100644 --- a/src/basic/time-util.c +++ b/src/basic/time-util.c @@ -479,7 +479,7 @@ int parse_timestamp(const char *t, usec_t *usec) { }; const char *k; - bool utc; + const char *utc; struct tm tm, copy; time_t x; usec_t x_usec, plus = 0, minus = 0, ret; @@ -529,8 +529,8 @@ int parse_timestamp(const char *t, usec_t *usec) { goto finish; - } else if (endswith(t, " ago")) { - t = strndupa(t, strlen(t) - strlen(" ago")); + } else if ((k = endswith(t, " ago"))) { + t = strndupa(t, k - t); r = parse_sec(t, &minus); if (r < 0) @@ -538,8 +538,8 @@ int parse_timestamp(const char *t, usec_t *usec) { goto finish; - } else if (endswith(t, " left")) { - t = strndupa(t, strlen(t) - strlen(" left")); + } else if ((k = endswith(t, " left"))) { + t = strndupa(t, k - t); r = parse_sec(t, &plus); if (r < 0) @@ -550,7 +550,7 @@ int parse_timestamp(const char *t, usec_t *usec) { utc = endswith_no_case(t, " UTC"); if (utc) - t = strndupa(t, strlen(t) - strlen(" UTC")); + t = strndupa(t, utc - t); x = ret / USEC_PER_SEC; x_usec = 0; diff --git a/src/test/test-date.c b/src/test/test-date.c index 8d78ab89d0..e1c6ecb2ef 100644 --- a/src/test/test-date.c +++ b/src/test/test-date.c @@ -43,6 +43,12 @@ static void test_should_pass(const char *p) { assert_se(parse_timestamp(buf, &q) >= 0); } +static void test_should_parse(const char *p) { + usec_t t; + + assert_se(parse_timestamp(p, &t) >= 0); +} + static void test_should_fail(const char *p) { usec_t t; @@ -86,7 +92,8 @@ int main(int argc, char *argv[]) { test_one_noutc("+2y 4d"); test_one_noutc("5months ago"); test_one_noutc("@1395716396"); - test_one_noutc("today UTC"); + test_should_parse("today UTC"); + test_should_fail("today UTC UTC"); return 0; } |