From eb8dbc0d4cddd1161e2b02d7973985a36e2efc95 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Fri, 18 Mar 2022 20:31:27 -0400 Subject: datetime: Get now (struct tm) from caller --- diff --git a/src/datetime.c b/src/datetime.c index 59adcb9..27c27a2 100644 --- a/src/datetime.c +++ b/src/datetime.c @@ -117,14 +117,9 @@ _datetime_reset_tm(struct tm *tm) } static void -_datetime_normalize(struct tm *arg_tm, time_t *arg_sec) +_datetime_normalize(struct tm *now_tm, struct tm *arg_tm, time_t *arg_sec) { - time_t now_sec; - struct tm *now_tm; - int wday; - - now_sec = time(NULL); - now_tm = localtime(&now_sec); + int wday; if (arg_tm->tm_sec == INT_MIN) { arg_tm->tm_sec = 0; @@ -177,7 +172,7 @@ _datetime_normalize(struct tm *arg_tm, time_t *arg_sec) } int -datetime_parse(const char *input, time_t *arg_sec) +datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec) { int date_fmt_len; int time_fmt_len; @@ -207,7 +202,7 @@ datetime_parse(const char *input, time_t *arg_sec) end = strptime(input, fmt_buf, &arg_tm); if (end != NULL && *end == '\0') { free(fmt_buf); - _datetime_normalize(&arg_tm, arg_sec); + _datetime_normalize(now_tm, &arg_tm, arg_sec); return 0; } } @@ -223,7 +218,7 @@ datetime_parse(const char *input, time_t *arg_sec) end = strptime(input, fmt_buf, &arg_tm); if (end != NULL && *end == '\0') { free(fmt_buf); - _datetime_normalize(&arg_tm, arg_sec); + _datetime_normalize(now_tm, &arg_tm, arg_sec); return 0; } } @@ -234,7 +229,7 @@ datetime_parse(const char *input, time_t *arg_sec) end = strptime(input, DATETIME_MISC_FMTS_[d], &arg_tm); if (end != NULL && *end == '\0') { free(fmt_buf); - _datetime_normalize(&arg_tm, arg_sec); + _datetime_normalize(now_tm, &arg_tm, arg_sec); return 0; } } diff --git a/src/datetime.h b/src/datetime.h index edff8f7..554748b 100644 --- a/src/datetime.h +++ b/src/datetime.h @@ -23,7 +23,7 @@ #include int -datetime_parse(const char *input, time_t *arg_sec); +datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec); int datetime_strftime_date(const struct tm *tm, char **out, size_t *out_sz, diff --git a/src/main.c b/src/main.c index 8740753..c8e90f4 100644 --- a/src/main.c +++ b/src/main.c @@ -181,12 +181,13 @@ _concat_args(int argc, char * const argv[]) int main(int argc, char * const argv[]) { - bool dbg; - int opt; - char *buf; - time_t arg; - time_t now; - double dif; + bool dbg; + int opt; + char *buf; + time_t now; + struct tm *now_tm_p; + time_t arg; + double dif; dbg = false; optind = 1; @@ -229,7 +230,10 @@ main(int argc, char * const argv[]) return EXIT_FAILURE; } - if (datetime_parse(buf, &arg) < 0) { + now = time(NULL); + now_tm_p = localtime(&now); + + if (datetime_parse(now_tm_p, buf, &arg) < 0) { free(buf); return EXIT_FAILURE; } -- cgit v0.9.1