X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fcalendarspec.c;h=7075159183152d191b5430fd43cfc5b2a56e3b18;hp=3cddb0eed01bccb29d433d3a10f3404ec98e173e;hb=9f5650aecb22a1d864b2c0b749910556795f1490;hpb=36697dc0199e25f09b78090fcf5f1cf8a3648ffd diff --git a/src/shared/calendarspec.c b/src/shared/calendarspec.c index 3cddb0eed..707515918 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) @@ -391,7 +391,7 @@ static int prepend_component(const char **p, CalendarComponent **c) { errno = 0; value = strtoul(*p, &e, 10); - if (errno != 0) + if (errno > 0) return -errno; if (e == *p) return -EINVAL; @@ -400,7 +400,7 @@ static int prepend_component(const char **p, CalendarComponent **c) { if (*e == '/') { repeat = strtoul(e+1, &ee, 10); - if (errno != 0) + if (errno > 0) return -errno; if (ee == e+1) return -EINVAL; @@ -653,7 +653,7 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) { if (!c) return -ENOMEM; - if (strcasecmp(p, "hourly") == 0) { + if (strcaseeq(p, "hourly")) { r = const_chain(0, &c->minute); if (r < 0) goto fail; @@ -661,7 +661,7 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) { if (r < 0) goto fail; - } else if (strcasecmp(p, "daily") == 0) { + } else if (strcaseeq(p, "daily")) { r = const_chain(0, &c->hour); if (r < 0) goto fail; @@ -672,7 +672,7 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) { if (r < 0) goto fail; - } else if (strcasecmp(p, "monthly") == 0) { + } else if (strcaseeq(p, "monthly")) { r = const_chain(1, &c->day); if (r < 0) goto fail; @@ -686,7 +686,24 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) { if (r < 0) goto fail; - } else if (strcasecmp(p, "weekly") == 0) { + } 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; @@ -738,7 +755,7 @@ fail: static int find_matching_component(const CalendarComponent *c, int *val) { const CalendarComponent *n; - int d; + int d = -1; bool d_set = false; int r;