mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-11 05:17:44 +03:00
calendarspec: parse 'quarterly' and 'semi-annually' as shortcuts
This commit is contained in:
parent
a2a85a22b3
commit
dbfd41e2df
@ -245,15 +245,18 @@
|
||||
<literal>minutely</literal>,
|
||||
<literal>hourly</literal>, <literal>daily</literal>,
|
||||
<literal>monthly</literal>, <literal>weekly</literal>,
|
||||
and <literal>yearly</literal> or
|
||||
<literal>annually</literal> may be used as calendar
|
||||
events which refer to
|
||||
<literal>yearly</literal>,
|
||||
<literal>quarterly</literal>,
|
||||
<literal>semiannually</literal> may be used as
|
||||
calendar events which refer to
|
||||
<literal>*-*-* *:*:00</literal>,
|
||||
<literal>*-*-* *:00:00</literal>,
|
||||
<literal>*-*-* 00:00:00</literal>,
|
||||
<literal>*-*-01 00:00:00</literal>,
|
||||
<literal>Mon *-*-* 00:00:00</literal>, and
|
||||
<literal>*-01-01 00:00:00</literal> respectively.
|
||||
<literal>Mon *-*-* 00:00:00</literal>,
|
||||
<literal>*-01-01 00:00:00</literal>,
|
||||
<literal>*-01,04,07,10-01 00:00:0</literal> and
|
||||
<literal>*-01,07-01 00:00:00</literal> respectively.
|
||||
</para>
|
||||
|
||||
<para>Examples for valid timestamps and their
|
||||
|
@ -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)
|
||||
|
@ -77,6 +77,10 @@ int main(int argc, char* argv[]) {
|
||||
test_one("daily", "*-*-* 00:00:00");
|
||||
test_one("monthly", "*-*-01 00:00:00");
|
||||
test_one("weekly", "Mon *-*-* 00:00:00");
|
||||
test_one("minutely", "*-*-* *:*:00");
|
||||
test_one("quarterly", "*-01,04,07,10-01 00:00:00");
|
||||
test_one("semi-annually", "*-01,07-01 00:00:00");
|
||||
test_one("annually", "*-01-01 00:00:00");
|
||||
test_one("*:2/3", "*-*-* *:02/3:00");
|
||||
|
||||
assert_se(calendar_spec_from_string("test", &c) < 0);
|
||||
|
Loading…
Reference in New Issue
Block a user