status time_parse(a_time *out, const char *s, size_t len) { memset(out, 0, sizeof(a_time)); if (len < time_string_length()) { return NO; } int year = s_to_d(s, 4, 0); s += 4; int mon = s_to_d(s, 2, 0); s += 2; if (mon <= 0 || 13 <= mon) return NO; int day = s_to_d(s, 2, 0); s += 2; if (day < 0 || days_in_mon(mon, year) < day) return NO; int hour = s_to_d(s, 2, 0); s += 2; if (hour < 0 || 24 <= hour) return NO; int minute = s_to_d(s, 2, 0); s += 2; if (minute < 0 || 60 <= minute) return NO; int second = s_to_d(s, 2, 0); /* s += 2; scan-build: dead increment */ time_copy(out, time_now()); if (!time_ymdhms(out, year, mon, day, hour, minute, second)) return NO; return OK; }
constant_transducer::constant_transducer(const string &p) { value = 0.; if (!s_to_d(p, value)) param = p; }