diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-10-27 18:08:46 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-10-27 18:09:26 +0100 |
commit | dbfd41e2df44113d1d2d07fb751db11b443f186b (patch) | |
tree | 614569403d02a9251ee9078440f32a59f28f4ee6 /src/shared | |
parent | a2a85a22b3c82386633ab898012c4b249706d535 (diff) |
calendarspec: parse 'quarterly' and 'semi-annually' as shortcuts
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/calendarspec.c | 59 |
1 files changed, 56 insertions, 3 deletions
diff --git a/src/shared/calendarspec.c b/src/shared/calendarspec.c index da920b6dd9..7efcf7b371 100644 --- a/src/shared/calendarspec.c +++ b/src/shared/calendarspec.c @@ -474,7 +474,7 @@ static int const_chain(int value, CalendarComponent **c) { cc->value = value; cc->repeat = 0; - cc->next = NULL; + cc->next = *c; *c = cc; @@ -693,8 +693,10 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) { if (r < 0) goto fail; - } else if (strcaseeq(p, "annually") || strcaseeq(p, "yearly") - || strcaseeq(p, "anually") /* backwards compatibility */ ) { + } else if (strcaseeq(p, "annually") || + strcaseeq(p, "yearly") || + strcaseeq(p, "anually") /* backwards compatibility */ ) { + r = const_chain(1, &c->month); if (r < 0) goto fail; @@ -725,6 +727,57 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) { if (r < 0) goto fail; + } else if (strcaseeq(p, "quarterly")) { + + r = const_chain(1, &c->month); + if (r < 0) + goto fail; + r = const_chain(4, &c->month); + if (r < 0) + goto fail; + r = const_chain(7, &c->month); + if (r < 0) + goto fail; + r = const_chain(10, &c->month); + if (r < 0) + goto fail; + r = const_chain(1, &c->day); + if (r < 0) + goto fail; + r = const_chain(0, &c->hour); + if (r < 0) + goto fail; + r = const_chain(0, &c->minute); + if (r < 0) + goto fail; + r = const_chain(0, &c->second); + if (r < 0) + goto fail; + + } else if (strcaseeq(p, "biannually") || + strcaseeq(p, "bi-annually") || + strcaseeq(p, "semiannually") || + strcaseeq(p, "semi-annually")) { + + r = const_chain(1, &c->month); + if (r < 0) + goto fail; + r = const_chain(7, &c->month); + if (r < 0) + goto fail; + r = const_chain(1, &c->day); + if (r < 0) + goto fail; + r = const_chain(0, &c->hour); + if (r < 0) + goto fail; + r = const_chain(0, &c->minute); + if (r < 0) + goto fail; + r = const_chain(0, &c->second); + if (r < 0) + goto fail; + } else { r = parse_weekdays(&p, c); if (r < 0) |