mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-22 13:33:56 +03:00
calendarspec: use ".." notation for ranges of weekdays
For backwards compatibility, both the new format (Mon..Wed) and the old format (Mon-Wed) are supported.
This commit is contained in:
parent
32b5236916
commit
e638d0504f
@ -217,8 +217,8 @@
|
||||
should consist of one or more English language weekday names,
|
||||
either in the abbreviated (Wed) or non-abbreviated (Wednesday)
|
||||
form (case does not matter), separated by commas. Specifying two
|
||||
weekdays separated by <literal>-</literal> refers to a range of
|
||||
continuous weekdays. <literal>,</literal> and <literal>-</literal>
|
||||
weekdays separated by <literal>..</literal> refers to a range of
|
||||
continuous weekdays. <literal>,</literal> and <literal>..</literal>
|
||||
may be combined freely.</para>
|
||||
|
||||
<para>In the date and time specifications, any component may be
|
||||
@ -263,12 +263,12 @@
|
||||
<para>Examples for valid timestamps and their
|
||||
normalized form:</para>
|
||||
|
||||
<programlisting> Sat,Thu,Mon-Wed,Sat-Sun → Mon-Thu,Sat,Sun *-*-* 00:00:00
|
||||
<programlisting> Sat,Thu,Mon..Wed,Sat..Sun → Mon..Thu,Sat,Sun *-*-* 00:00:00
|
||||
Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00
|
||||
Wed *-1 → Wed *-*-01 00:00:00
|
||||
Wed-Wed,Wed *-1 → Wed *-*-01 00:00:00
|
||||
Wed..Wed,Wed *-1 → Wed *-*-01 00:00:00
|
||||
Wed, 17:48 → Wed *-*-* 17:48:00
|
||||
Wed-Sat,Tue 12-10-15 1:2:3 → Tue-Sat 2012-10-15 01:02:03
|
||||
Wed..Sat,Tue 12-10-15 1:2:3 → Tue..Sat 2012-10-15 01:02:03
|
||||
*-*-7 0:0:0 → *-*-07 00:00:00
|
||||
10-15 → *-10-15 00:00:00
|
||||
monday *-12-* 17:00 → Mon *-12-* 17:00:00
|
||||
|
@ -202,7 +202,7 @@ static void format_weekdays(FILE *f, const CalendarSpec *c) {
|
||||
};
|
||||
|
||||
int l, x;
|
||||
bool need_colon = false;
|
||||
bool need_comma = false;
|
||||
|
||||
assert(f);
|
||||
assert(c);
|
||||
@ -213,10 +213,10 @@ static void format_weekdays(FILE *f, const CalendarSpec *c) {
|
||||
if (c->weekdays_bits & (1 << x)) {
|
||||
|
||||
if (l < 0) {
|
||||
if (need_colon)
|
||||
if (need_comma)
|
||||
fputc(',', f);
|
||||
else
|
||||
need_colon = true;
|
||||
need_comma = true;
|
||||
|
||||
fputs(days[x], f);
|
||||
l = x;
|
||||
@ -225,7 +225,7 @@ static void format_weekdays(FILE *f, const CalendarSpec *c) {
|
||||
} else if (l >= 0) {
|
||||
|
||||
if (x > l + 1) {
|
||||
fputc(x > l + 2 ? '-' : ',', f);
|
||||
fputs(x > l + 2 ? ".." : ",", f);
|
||||
fputs(days[x-1], f);
|
||||
}
|
||||
|
||||
@ -234,7 +234,7 @@ static void format_weekdays(FILE *f, const CalendarSpec *c) {
|
||||
}
|
||||
|
||||
if (l >= 0 && x > l + 1) {
|
||||
fputc(x > l + 2 ? '-' : ',', f);
|
||||
fputs(x > l + 2 ? ".." : ",", f);
|
||||
fputs(days[x-1], f);
|
||||
}
|
||||
}
|
||||
@ -359,6 +359,7 @@ static int parse_weekdays(const char **p, CalendarSpec *c) {
|
||||
skip = strlen(day_nr[i].name);
|
||||
|
||||
if ((*p)[skip] != '-' &&
|
||||
(*p)[skip] != '.' &&
|
||||
(*p)[skip] != ',' &&
|
||||
(*p)[skip] != ' ' &&
|
||||
(*p)[skip] != 0)
|
||||
@ -396,7 +397,18 @@ static int parse_weekdays(const char **p, CalendarSpec *c) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (**p == '-') {
|
||||
if (**p == '.') {
|
||||
if (l >= 0)
|
||||
return -EINVAL;
|
||||
|
||||
if ((*p)[1] != '.')
|
||||
return -EINVAL;
|
||||
|
||||
l = day_nr[i].nr;
|
||||
*p += 1;
|
||||
|
||||
/* Support ranges with "-" for backwards compatibility */
|
||||
} else if (**p == '-') {
|
||||
if (l >= 0)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -91,12 +91,15 @@ static void test_next(const char *input, const char *new_tz, usec_t after, usec_
|
||||
int main(int argc, char* argv[]) {
|
||||
CalendarSpec *c;
|
||||
|
||||
test_one("Sat,Thu,Mon-Wed,Sat-Sun", "Mon-Thu,Sat,Sun *-*-* 00:00:00");
|
||||
test_one("Sat,Thu,Mon-Wed,Sat-Sun", "Mon..Thu,Sat,Sun *-*-* 00:00:00");
|
||||
test_one("Sat,Thu,Mon..Wed,Sat..Sun", "Mon..Thu,Sat,Sun *-*-* 00:00:00");
|
||||
test_one("Mon,Sun 12-*-* 2,1:23", "Mon,Sun 2012-*-* 01,02:23:00");
|
||||
test_one("Wed *-1", "Wed *-*-01 00:00:00");
|
||||
test_one("Wed-Wed,Wed *-1", "Wed *-*-01 00:00:00");
|
||||
test_one("Wed..Wed,Wed *-1", "Wed *-*-01 00:00:00");
|
||||
test_one("Wed, 17:48", "Wed *-*-* 17:48:00");
|
||||
test_one("Wed-Sat,Tue 12-10-15 1:2:3", "Tue-Sat 2012-10-15 01:02:03");
|
||||
test_one("Wed-Sat,Tue 12-10-15 1:2:3", "Tue..Sat 2012-10-15 01:02:03");
|
||||
test_one("Wed..Sat,Tue 12-10-15 1:2:3", "Tue..Sat 2012-10-15 01:02:03");
|
||||
test_one("*-*-7 0:0:0", "*-*-07 00:00:00");
|
||||
test_one("10-15", "*-10-15 00:00:00");
|
||||
test_one("monday *-12-* 17:00", "Mon *-12-* 17:00:00");
|
||||
|
Loading…
Reference in New Issue
Block a user