Compare commits

..

No commits in common. "a135068b3144e1e8bbb9513e367db9db08c9691a" and "da5a77e489a6ca953571f058c3021177ef6d8aeb" have entirely different histories.

5 changed files with 17 additions and 24 deletions

View File

@ -102,8 +102,7 @@ void ce_next_from_now(cron_simple_time *out, cron_expression *ce) {
gmtime_r(&t, &gm); gmtime_r(&t, &gm);
cron_simple_time ref = { cron_simple_time ref = {
// tm_year contains years since 1900 .year = gm.tm_year,
.year = 1900 + gm.tm_year,
// tm_mon goes from 0 to 11 // tm_mon goes from 0 to 11
.month = gm.tm_mon + 1, .month = gm.tm_mon + 1,
.day = gm.tm_mday, .day = gm.tm_mday,

View File

@ -40,6 +40,18 @@ const uint8_t max_parts = 4;
* - a-b/c * - a-b/c
*/ */
cron_parse_error ce_parse_range(uint64_t *out, char *s, uint8_t min, uint8_t max) { cron_parse_error ce_parse_range(uint64_t *out, char *s, uint8_t min, uint8_t max) {
// The * expression means "every possible value"
if (s[0] == '*') {
// A '*' is only valid on its own
if (s[1] != '\0') {
return cron_parse_invalid_expression;
}
*out = ~0;
return cron_parse_ok;
}
size_t slash_index = 0; size_t slash_index = 0;
size_t dash_index = 0; size_t dash_index = 0;
size_t i = 0; size_t i = 0;
@ -62,17 +74,14 @@ cron_parse_error ce_parse_range(uint64_t *out, char *s, uint8_t min, uint8_t max
} }
// Parse the three possible numbers in the pattern // Parse the three possible numbers in the pattern
uint8_t start = min; uint8_t start = 0;
uint8_t end = max; uint8_t end = max;
uint8_t interval = 1; uint8_t interval = 1;
// * simply sets start as min and end as max SAFE_ATOI(start, s, min, max);
if (!(s[0] == '*' && strlen(s) == 1)) {
SAFE_ATOI(start, s, min, max);
if (dash_index > 0) { if (dash_index > 0) {
SAFE_ATOI(end, &s[dash_index + 1], min, max); SAFE_ATOI(end, &s[dash_index + 1], min, max);
}
} }
if (slash_index > 0) { if (slash_index > 0) {

View File

@ -36,7 +36,6 @@ enum ParseError as u8 {
too_many_parts = 4 too_many_parts = 4
} }
// str returns the string representation of a ParseError.
fn (e ParseError) str() string { fn (e ParseError) str() string {
return match e { return match e {
.ok { '' } .ok { '' }

View File

@ -2,13 +2,11 @@ module cron
import time import time
// free the memory associated with the Expression.
[unsafe] [unsafe]
pub fn (ce &Expression) free() { pub fn (ce &Expression) free() {
C.ce_free(ce) C.ce_free(ce)
} }
// parse_expression parses a string into an Expression.
pub fn parse_expression(exp string) !&Expression { pub fn parse_expression(exp string) !&Expression {
out := C.ce_init() out := C.ce_init()
res := C.ce_parse_expression(out, exp.str) res := C.ce_parse_expression(out, exp.str)
@ -20,8 +18,6 @@ pub fn parse_expression(exp string) !&Expression {
return out return out
} }
// next calculates the next occurence of the cron schedule, given a reference
// point.
pub fn (ce &Expression) next(ref time.Time) time.Time { pub fn (ce &Expression) next(ref time.Time) time.Time {
st := SimpleTime{ st := SimpleTime{
year: ref.year year: ref.year
@ -43,8 +39,6 @@ pub fn (ce &Expression) next(ref time.Time) time.Time {
}) })
} }
// next_from_now calculates the next occurence of the cron schedule with the
// current time as reference.
pub fn (ce &Expression) next_from_now() time.Time { pub fn (ce &Expression) next_from_now() time.Time {
out := SimpleTime{} out := SimpleTime{}
C.ce_next_from_now(&out, ce) C.ce_next_from_now(&out, ce)

View File

@ -34,11 +34,3 @@ fn test_next_simple() ! {
//// Overlap to next year //// Overlap to next year
util_test_time('0 3', '2002-12-31 04:00:00', '2003-01-01 03:00:00')! util_test_time('0 3', '2002-12-31 04:00:00', '2003-01-01 03:00:00')!
} }
fn test_leading_star() {
mut x := false
parse_expression('*5 8') or { x = true }
assert x
}