X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fcalendarspec.c;h=69b742723295c5df91c03464fd70593d6bd97612;hp=13f70d8e72edaae269b5fddc5f56142a5b7563e9;hb=6b01f1d3911bd7c7eadbb8a3b4375bd3ac05c98f;hpb=8333c77edf8fd1654cd96f3f6ee0f078dd64b58b diff --git a/src/shared/calendarspec.c b/src/shared/calendarspec.c index 13f70d8e7..69b742723 100644 --- a/src/shared/calendarspec.c +++ b/src/shared/calendarspec.c @@ -133,7 +133,7 @@ int calendar_spec_normalize(CalendarSpec *c) { return 0; } -static bool chain_valid(CalendarComponent *c, int from, int to) { +_pure_ static bool chain_valid(CalendarComponent *c, int from, int to) { if (!c) return true; @@ -149,7 +149,7 @@ static bool chain_valid(CalendarComponent *c, int from, int to) { return true; } -bool calendar_spec_valid(CalendarSpec *c) { +_pure_ bool calendar_spec_valid(CalendarSpec *c) { assert(c); if (c->weekdays_bits > 127) @@ -686,6 +686,23 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) { if (r < 0) goto fail; + } else if (strcaseeq(p, "anually") || strcaseeq(p, "yearly")) { + r = const_chain(1, &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, "weekly")) { c->weekdays_bits = 1; @@ -921,7 +938,6 @@ int calendar_spec_next_usec(const CalendarSpec *spec, usec_t usec, usec_t *next) if (t == (time_t) -1) return -EINVAL; - *next = (usec_t) t * USEC_PER_SEC; return 0; }