summaryrefslogtreecommitdiffstats
path: root/src/datetime.c
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2022-03-19 19:57:05 (EDT)
committer P. J. McDermott <pj@pehjota.net>2022-03-19 19:57:05 (EDT)
commit004891c1800b77f8a1e84030b42b100484bae8a0 (patch)
tree77a333766249698843fabf57f920d8e12e44d9f6 /src/datetime.c
parent989a30e669b3a4fc3b25a5b3b5d39baf4e76bd7c (diff)
parent44cb41b8995b30c6b2754f3e1182cfdefc6c7b7b (diff)
downloadatsign-004891c1800b77f8a1e84030b42b100484bae8a0.zip
atsign-004891c1800b77f8a1e84030b42b100484bae8a0.tar.gz
atsign-004891c1800b77f8a1e84030b42b100484bae8a0.tar.bz2
Merge branch 'feature/tests'
Diffstat (limited to 'src/datetime.c')
-rw-r--r--src/datetime.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/datetime.c b/src/datetime.c
index 7c5dcfa..230a348 100644
--- a/src/datetime.c
+++ b/src/datetime.c
@@ -116,19 +116,15 @@ _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;
+ int wday;
if (arg_tm->tm_sec == INT_MIN) {
arg_tm->tm_sec = 0;
}
if (arg_tm->tm_mday == INT_MIN && arg_tm->tm_wday == INT_MIN) {
/* No date specified; try today. */
- now_sec = time(NULL);
- now_tm = localtime(&now_sec);
arg_tm->tm_year = now_tm->tm_year;
arg_tm->tm_mon = now_tm->tm_mon;
arg_tm->tm_mday = now_tm->tm_mday;
@@ -150,8 +146,6 @@ _datetime_normalize(struct tm *arg_tm, time_t *arg_sec)
/* Only a weekday specified; try tomorrow or next week. Uses
* same shortcut as above. */
wday = arg_tm->tm_wday;
- now_sec = time(NULL);
- now_tm = localtime(&now_sec);
arg_tm->tm_year = now_tm->tm_year;
arg_tm->tm_mon = now_tm->tm_mon;
arg_tm->tm_mday = now_tm->tm_mday;
@@ -163,8 +157,6 @@ _datetime_normalize(struct tm *arg_tm, time_t *arg_sec)
*arg_sec += (60 * 60 * 24) * (wday - now_tm->tm_wday);
} else if (arg_tm->tm_year == INT_MIN) {
/* No year specified; try this year. */
- now_sec = time(NULL);
- now_tm = localtime(&now_sec);
arg_tm->tm_year = now_tm->tm_year;
*arg_sec = mktime(arg_tm);
if (*arg_sec <= mktime(now_tm)) {
@@ -179,7 +171,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;
@@ -219,7 +211,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;
}
}
@@ -235,7 +227,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;
}
}
@@ -246,7 +238,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;
}
}