summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2022-03-18 20:31:27 (EDT)
committer P. J. McDermott <pj@pehjota.net>2022-03-18 20:31:27 (EDT)
commiteb8dbc0d4cddd1161e2b02d7973985a36e2efc95 (patch)
tree180f4105c7554a91ee2f99a4f7d3c7ce297affe3
parent557090b458bc5a61b56eaf4a0cc66376ac84bdd4 (diff)
downloadatsign-eb8dbc0d4cddd1161e2b02d7973985a36e2efc95.zip
atsign-eb8dbc0d4cddd1161e2b02d7973985a36e2efc95.tar.gz
atsign-eb8dbc0d4cddd1161e2b02d7973985a36e2efc95.tar.bz2
datetime: Get now (struct tm) from caller
-rw-r--r--src/datetime.c17
-rw-r--r--src/datetime.h2
-rw-r--r--src/main.c18
3 files changed, 18 insertions, 19 deletions
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 <time.h>
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;
}