summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2022-03-29 19:02:59 (EDT)
committer P. J. McDermott <pj@pehjota.net>2022-03-29 19:02:59 (EDT)
commit182d541fd660642544d66f122c61c7342ba89c21 (patch)
treeb6dde3fb9aa6ae9be844bb2efa20d21431cbe60a /src
parent0ac472958c146d990e24a7ca0a621938def30b3c (diff)
downloadatsign-182d541fd660642544d66f122c61c7342ba89c21.zip
atsign-182d541fd660642544d66f122c61c7342ba89c21.tar.gz
atsign-182d541fd660642544d66f122c61c7342ba89c21.tar.bz2
datetime: Get target (struct tm *) from caller
Diffstat (limited to 'src')
-rw-r--r--src/datetime.c36
-rw-r--r--src/datetime.h3
-rw-r--r--src/main.c3
3 files changed, 22 insertions, 20 deletions
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 <time.h>
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;
}