From 182d541fd660642544d66f122c61c7342ba89c21 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Tue, 29 Mar 2022 19:02:59 -0400 Subject: datetime: Get target (struct tm *) from caller --- (limited to 'src') diff --git a/src/datetime.c b/src/datetime.c index 455e7dc..2c971a4 100644 --- a/src/datetime.c +++ b/src/datetime.c @@ -153,7 +153,8 @@ _datetime_normalize(struct tm *now_tm, struct tm *arg_tm, time_t *arg_sec) } int -datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec) +datetime_parse(struct tm *now_tm, const char *input, + struct tm *arg_tm, time_t *arg_sec) { int date_fmt_len; int time_fmt_len; @@ -163,7 +164,6 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec) size_t d; size_t t; char *end; - struct tm arg_tm; time_t sec; bool got; @@ -185,11 +185,11 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec) got = false; for (t = 0; t < sizeof(FORMATS_TIME) / sizeof(FORMATS_TIME[0]); ++t) { _datetime_buf_cpy_p(fmt_buf, FORMATS_TIME[t]); - _datetime_reset_tm(&arg_tm); - end = strptime(input, fmt_buf, &arg_tm); + _datetime_reset_tm(arg_tm); + end = strptime(input, fmt_buf, arg_tm); if (end != NULL && *end == '\0') { - _datetime_normalize(now_tm, &arg_tm, arg_sec); - if (arg_tm.tm_year >= 0) { + _datetime_normalize(now_tm, arg_tm, arg_sec); + if (arg_tm->tm_year >= 0) { free(fmt_buf); return 0; } @@ -206,11 +206,11 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec) ++t) { _datetime_buf_cpy_p(fmt_buf + date_fmt_len, FORMATS_TIME[t]); - _datetime_reset_tm(&arg_tm); - end = strptime(input, fmt_buf, &arg_tm); + _datetime_reset_tm(arg_tm); + end = strptime(input, fmt_buf, arg_tm); if (end != NULL && *end == '\0') { - _datetime_normalize(now_tm, &arg_tm, arg_sec); - if (arg_tm.tm_year >= 0) { + _datetime_normalize(now_tm, arg_tm, arg_sec); + if (arg_tm->tm_year >= 0) { free(fmt_buf); return 0; } @@ -228,11 +228,11 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec) } _datetime_buf_cpy_p(fmt_buf + time_fmt_len, FORMATS_DATE[d]); - _datetime_reset_tm(&arg_tm); - end = strptime(input, fmt_buf, &arg_tm); + _datetime_reset_tm(arg_tm); + end = strptime(input, fmt_buf, arg_tm); if (end != NULL && *end == '\0') { - _datetime_normalize(now_tm, &arg_tm, arg_sec); - if (arg_tm.tm_year >= 0) { + _datetime_normalize(now_tm, arg_tm, arg_sec); + if (arg_tm->tm_year >= 0) { free(fmt_buf); return 0; } @@ -243,11 +243,11 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec) } for (d = 0; d < sizeof(FORMATS_MISC) / sizeof(FORMATS_MISC[0]); ++d) { _datetime_buf_cpy_p(fmt_buf, FORMATS_MISC[d]); - _datetime_reset_tm(&arg_tm); - end = strptime(input, fmt_buf, &arg_tm); + _datetime_reset_tm(arg_tm); + end = strptime(input, fmt_buf, arg_tm); if (end != NULL && *end == '\0') { - _datetime_normalize(now_tm, &arg_tm, arg_sec); - if (arg_tm.tm_year >= 0) { + _datetime_normalize(now_tm, arg_tm, arg_sec); + if (arg_tm->tm_year >= 0) { free(fmt_buf); return 0; } diff --git a/src/datetime.h b/src/datetime.h index e225b52..9de8799 100644 --- a/src/datetime.h +++ b/src/datetime.h @@ -23,7 +23,8 @@ #include int -datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec); +datetime_parse(struct tm *now_tm, const char *input, + struct tm *arg_tm, 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 cdee4b7..93689d3 100644 --- a/src/main.c +++ b/src/main.c @@ -196,6 +196,7 @@ main(int argc, char * const argv[]) char *buf; time_t now; struct tm *now_tm; + struct tm arg_tm; time_t arg; double dif; @@ -265,7 +266,7 @@ main(int argc, char * const argv[]) return EXIT_FAILURE; } - if (datetime_parse(now_tm, buf, &arg) < 0) { + if (datetime_parse(now_tm, buf, &arg_tm, &arg) < 0) { free(buf); return EXIT_FAILURE; } -- cgit v0.9.1