summaryrefslogtreecommitdiffstats
path: root/src/datetime.c
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2022-03-21 14:32:00 (EDT)
committer P. J. McDermott <pj@pehjota.net>2022-03-21 14:32:00 (EDT)
commit5dd4d9fb8acafa428f6db2b380e5d6222821bc9a (patch)
treeacf81aebac8599ba593bc4c4fd5e8c73d3073b16 /src/datetime.c
parent46dffa4b113cb08e6a88f09820a735bb56b2bfbe (diff)
downloadatsign-5dd4d9fb8acafa428f6db2b380e5d6222821bc9a.zip
atsign-5dd4d9fb8acafa428f6db2b380e5d6222821bc9a.tar.gz
atsign-5dd4d9fb8acafa428f6db2b380e5d6222821bc9a.tar.bz2
datetime: Move formats into another file
Diffstat (limited to 'src/datetime.c')
-rw-r--r--src/datetime.c219
1 files changed, 25 insertions, 194 deletions
diff --git a/src/datetime.c b/src/datetime.c
index 4c5dd49..57bae20 100644
--- a/src/datetime.c
+++ b/src/datetime.c
@@ -28,172 +28,7 @@
#include <string.h>
#include <time.h>
#include "datetime.h"
-
-/* IMPORTANT: All of the format strings in each array must be padded with spaces
- * to be of equal lengths */
-static const char *DATETIME_DATE_FMTS_[] = {
- " %a ", /* Wed */
- " %Y-%m-%d ", /* 1969-12-31 */
- " %Y/%m/%d ", /* 1969/12/31 */
- " %Y.%m.%d ", /* 1969.12.31 */
- " %m-%d-%Y ", /* 12-31-1969 */
- " %m-%d ", /* 12-31 */
- " %m/%d/%Y ", /* 12/31/1969 */
- " %m/%d ", /* 12/31 */
- " %m.%d.%Y ", /* 12.31.1969 */
- " %m.%d ", /* 12.31 */
- " %e %b %Y ", /* 31 Dec 1969 */
- " %e %b ", /* 31 Dec */
- " %d-%b-%Y ", /* 31-Dec-1969 */
- " %d-%b ", /* 31-Dec */
- " %d/%b/%Y ", /* 31/Dec/1969 */
- " %d/%b ", /* 31/Dec */
- " %a %e %b %Y ", /* Wed 31 Dec 1969 */
- " %a %e %b ", /* Wed 31 Dec */
- " %a %d-%b-%Y ", /* Wed 31-Dec-1969 */
- " %a %d-%b ", /* Wed 31-Dec */
- " %a %d/%b/%Y ", /* Wed 31/Dec/1969 */
- " %a %d/%b ", /* Wed 31/Dec */
- " %a, %e %b %Y ", /* Wed, 31 Dec 1969 */
- " %a, %e %b ", /* Wed, 31 Dec */
- " %a, %d-%b-%Y ", /* Wed, 31-Dec-1969 */
- " %a, %d-%b ", /* Wed, 31-Dec */
- " %a, %d/%b/%Y ", /* Wed, 31/Dec/1969 */
- " %a, %d/%b ", /* Wed, 31/Dec */
- " %b %e, %Y ", /* Dec 31, 1969 */
- " %b %e ", /* Dec 31 */
- " %b-%d-%Y ", /* Dec-31-1969 */
- " %b-%d ", /* Dec-31 */
- " %b/%d/%Y ", /* Dec/31/1969 */
- " %b/%d ", /* Dec/31 */
- " %a %b %e, %Y ", /* Wed Dec 31, 1969 */
- " %a %b %e ", /* Wed Dec 31 */
- " %a %b-%d-%Y ", /* Wed Dec-31-1969 */
- " %a %b-%d ", /* Wed Dec-31 */
- " %a %b/%d/%Y ", /* Wed Dec/31/1969 */
- " %a %b/%d ", /* Wed Dec/31 */
- " %a, %b %e, %Y ", /* Wed, Dec 31, 1969 */
- " %a, %b %e ", /* Wed, Dec 31 */
- " %a, %b-%d-%Y ", /* Wed, Dec-31-1969 */
- " %a, %b-%d ", /* Wed, Dec-31 */
- " %a, %b/%d/%Y ", /* Wed, Dec/31/1969 */
- " %a, %b/%d ", /* Wed, Dec/31 */
- "", /* End of parsing formats */
- " %A ", /* Wednesday */
- " %A %e %b %Y ", /* Wednesday 31 Dec 1969 */
- " %A %e %b ", /* Wednesday 31 Dec */
- " %A %d-%b-%Y ", /* Wednesday 31-Dec-1969 */
- " %A %d-%b ", /* Wednesday 31-Dec */
- " %A %d/%b/%Y ", /* Wednesday 31/Dec/1969 */
- " %A %d/%b ", /* Wednesday 31/Dec */
- " %A, %e %b %Y ", /* Wednesday, 31 Dec 1969 */
- " %A, %e %b ", /* Wednesday, 31 Dec */
- " %A, %d-%b-%Y ", /* Wednesday, 31-Dec-1969 */
- " %A, %d-%b ", /* Wednesday, 31-Dec */
- " %A, %d/%b/%Y ", /* Wednesday, 31/Dec/1969 */
- " %A, %d/%b ", /* Wednesday, 31/Dec */
- " %A %b %e, %Y ", /* Wednesday Dec 31, 1969 */
- " %A %b %e ", /* Wednesday Dec 31 */
- " %A %b-%d-%Y ", /* Wednesday Dec-31-1969 */
- " %A %b-%d ", /* Wednesday Dec-31 */
- " %A %b/%d/%Y ", /* Wednesday Dec/31/1969 */
- " %A %b/%d ", /* Wednesday Dec/31 */
- " %A, %b %e, %Y ", /* Wednesday, Dec 31, 1969 */
- " %A, %b %e ", /* Wednesday, Dec 31 */
- " %A, %b-%d-%Y ", /* Wednesday, Dec-31-1969 */
- " %A, %b-%d ", /* Wednesday, Dec-31 */
- " %A, %b/%d/%Y ", /* Wednesday, Dec/31/1969 */
- " %A, %b/%d ", /* Wednesday, Dec/31 */
- " %e %B %Y ", /* 31 December 1969 */
- " %e %B ", /* 31 December */
- " %d-%B-%Y ", /* 31-December-1969 */
- " %d-%B ", /* 31-December */
- " %d/%B/%Y ", /* 31/December/1969 */
- " %d/%B ", /* 31/December */
- " %a %e %B %Y ", /* Wed 31 December 1969 */
- " %a %e %B ", /* Wed 31 December */
- " %a %d-%B-%Y ", /* Wed 31-December-1969 */
- " %a %d-%B ", /* Wed 31-December */
- " %a %d/%B/%Y ", /* Wed 31/December/1969 */
- " %a %d/%B ", /* Wed 31/December */
- " %a, %e %B %Y ", /* Wed, 31 December 1969 */
- " %a, %e %B ", /* Wed, 31 December */
- " %a, %d-%B-%Y ", /* Wed, 31-December-1969 */
- " %a, %d-%B ", /* Wed, 31-December */
- " %a, %d/%B/%Y ", /* Wed, 31/December/1969 */
- " %a, %d/%B ", /* Wed, 31/December */
- " %B %e, %Y ", /* December 31, 1969 */
- " %B %e ", /* December 31 */
- " %B-%d-%Y ", /* December-31-1969 */
- " %B-%d ", /* December-31 */
- " %B/%d/%Y ", /* December/31/1969 */
- " %B/%d ", /* December/31 */
- " %a %B %e, %Y ", /* Wed December 31, 1969 */
- " %a %B %e ", /* Wed December 31 */
- " %a %B-%d-%Y ", /* Wed December-31-1969 */
- " %a %B-%d ", /* Wed December-31 */
- " %a %B/%d/%Y ", /* Wed December/31/1969 */
- " %a %B/%d ", /* Wed December/31 */
- " %a, %B %e, %Y ", /* Wed, December 31, 1969 */
- " %a, %B %e ", /* Wed, December 31 */
- " %a, %B-%d-%Y ", /* Wed, December-31-1969 */
- " %a, %B-%d ", /* Wed, December-31 */
- " %a, %B/%d/%Y ", /* Wed, December/31/1969 */
- " %a, %B/%d ", /* Wed, December/31 */
- " %A %e %B %Y ", /* Wednesday 31 December 1969 */
- " %A %e %B ", /* Wednesday 31 December */
- " %A %d-%B-%Y ", /* Wednesday 31-December-1969 */
- " %A %d-%B ", /* Wednesday 31-December */
- " %A %d/%B/%Y ", /* Wednesday 31/December/1969 */
- " %A %d/%B ", /* Wednesday 31/December */
- " %A, %e %B %Y ", /* Wednesday, 31 December 1969 */
- " %A, %e %B ", /* Wednesday, 31 December */
- " %A, %d-%B-%Y ", /* Wednesday, 31-December-1969 */
- " %A, %d-%B ", /* Wednesday, 31-December */
- " %A, %d/%B/%Y ", /* Wednesday, 31/December/1969 */
- " %A, %d/%B ", /* Wednesday, 31/December */
- " %A %B %e, %Y ", /* Wednesday December 31, 1969 */
- " %A %B %e ", /* Wednesday December 31 */
- " %A %B-%d-%Y ", /* Wednesday December-31-1969 */
- " %A %B-%d ", /* Wednesday December-31 */
- " %A %B/%d/%Y ", /* Wednesday December/31/1969 */
- " %A %B/%d ", /* Wednesday December/31 */
- " %A, %B %e, %Y ", /* Wednesday, December 31, 1969 */
- " %A, %B %e ", /* Wednesday, December 31 */
- " %A, %B-%d-%Y ", /* Wednesday, December-31-1969 */
- " %A, %B-%d ", /* Wednesday, December-31 */
- " %A, %B/%d/%Y ", /* Wednesday, December/31/1969 */
- " %A, %B/%d ", /* Wednesday, December/31 */
-};
-static const char *DATETIME_TIME_FMTS_[] = {
- " %I:%M:%S %p ", /* 7:00:01 PM */
- " %H:%M:%S ", /* 19:00:01 */
- " %I:%M %p ", /* 7:00 PM */
- " %H:%M ", /* 19:00 */
- " %I.%M.%S %p ", /* 7.00.01 PM */
- " %H.%M.%S ", /* 19.00.01 */
- " %I.%M %p ", /* 7.00 PM */
- " %H.%M ", /* 19.00 */
- " %I%M%S %p ", /* 70001 PM */
- " %H%M%S ", /* 190001 */
- " %I%M %p ", /* 700 PM */
- " %H%M ", /* 1900 */
-};
-static const char *DATETIME_MISC_FMTS_[] = {
- /* ISO 8601: 1969-12-31 delimited by "T" */
- " %Y-%m-%dT%H:%M:%S ",
- " %Y-%m-%dT%H:%M ",
- /* ISO 8601: 19691231 delimited by "T" */
- " %Y%m%dT%H%M%S ",
- " %Y%m%dT%H%M ",
- /* 19691231 */
- " %Y%m%d %I%M%S %p ",
- " %Y%m%d %H%M%S ",
- " %Y%m%d %I%M %p ",
- " %Y%m%d %H%M ",
- /* Wed Dec 31 19:00:01 1969 */
- " %a %b %d %H:%M:%S %Y ",
-};
+#include "formats.h"
static struct tm DATETIME_EPOCH_ = {
.tm_sec = 0,
@@ -288,8 +123,8 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec)
time_t sec;
bool got;
- date_fmt_len = strlen(DATETIME_DATE_FMTS_[0]);
- time_fmt_len = strlen(DATETIME_TIME_FMTS_[0]);
+ date_fmt_len = strlen(FORMATS_DATE[0]);
+ time_fmt_len = strlen(FORMATS_TIME[0]);
fmt_buf = calloc(date_fmt_len + time_fmt_len + 1, sizeof(*fmt_buf));
if (fmt_buf == NULL) {
fprintf(stderr, "Failed to allocate buffer: %s\n",
@@ -299,10 +134,9 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec)
sec = *arg_sec; /* GCC is dumb. */
got = false;
- for (t = 0; t < sizeof(DATETIME_TIME_FMTS_) /
- sizeof(DATETIME_TIME_FMTS_[0]) ; ++t) {
+ for (t = 0; t < sizeof(FORMATS_TIME) / sizeof(FORMATS_TIME[0]) ; ++t) {
_datetime_reset_tm(&arg_tm);
- end = strptime(input, DATETIME_TIME_FMTS_[t], &arg_tm);
+ end = strptime(input, FORMATS_TIME[t], &arg_tm);
if (end != NULL && *end == '\0') {
_datetime_normalize(now_tm, &arg_tm, arg_sec);
if (datetime_diff_epoch(*arg_sec) >= 0) {
@@ -313,15 +147,14 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec)
got = true;
}
}
- for (d = 0; d < sizeof(DATETIME_DATE_FMTS_) /
- sizeof(DATETIME_DATE_FMTS_[0]); ++d) {
- if (DATETIME_DATE_FMTS_[d][0] == '\0') {
+ for (d = 0; d < sizeof(FORMATS_DATE) / sizeof(FORMATS_DATE[0]); ++d) {
+ if (FORMATS_DATE[d][0] == '\0') {
break;
}
- memcpy(fmt_buf, DATETIME_DATE_FMTS_[d], date_fmt_len);
- for (t = 0; t < sizeof(DATETIME_TIME_FMTS_) /
- sizeof(DATETIME_TIME_FMTS_[0]); ++t) {
- memcpy(fmt_buf + date_fmt_len, DATETIME_TIME_FMTS_[t],
+ memcpy(fmt_buf, FORMATS_DATE[d], date_fmt_len);
+ for (t = 0; t < sizeof(FORMATS_TIME) / sizeof(FORMATS_TIME[0]);
+ ++t) {
+ memcpy(fmt_buf + date_fmt_len, FORMATS_TIME[t],
time_fmt_len);
_datetime_reset_tm(&arg_tm);
end = strptime(input, fmt_buf, &arg_tm);
@@ -336,15 +169,14 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec)
}
}
}
- for (t = 0; t < sizeof(DATETIME_TIME_FMTS_) /
- sizeof(DATETIME_TIME_FMTS_[0]); ++t) {
- memcpy(fmt_buf, DATETIME_TIME_FMTS_[t], time_fmt_len);
- for (d = 0; d < sizeof(DATETIME_DATE_FMTS_) /
- sizeof(DATETIME_DATE_FMTS_[0]); ++d) {
- if (DATETIME_DATE_FMTS_[d][0] == '\0') {
+ for (t = 0; t < sizeof(FORMATS_TIME) / sizeof(FORMATS_TIME[0]); ++t) {
+ memcpy(fmt_buf, FORMATS_TIME[t], time_fmt_len);
+ for (d = 0; d < sizeof(FORMATS_DATE) / sizeof(FORMATS_DATE[0]);
+ ++d) {
+ if (FORMATS_DATE[d][0] == '\0') {
break;
}
- memcpy(fmt_buf + time_fmt_len, DATETIME_DATE_FMTS_[d],
+ memcpy(fmt_buf + time_fmt_len, FORMATS_DATE[d],
date_fmt_len);
_datetime_reset_tm(&arg_tm);
end = strptime(input, fmt_buf, &arg_tm);
@@ -359,10 +191,9 @@ datetime_parse(struct tm *now_tm, const char *input, time_t *arg_sec)
}
}
}
- for (d = 0; d < sizeof(DATETIME_MISC_FMTS_) /
- sizeof(DATETIME_MISC_FMTS_[0]) ; ++d) {
+ for (d = 0; d < sizeof(FORMATS_MISC) / sizeof(FORMATS_MISC[0]) ; ++d) {
_datetime_reset_tm(&arg_tm);
- end = strptime(input, DATETIME_MISC_FMTS_[d], &arg_tm);
+ end = strptime(input, FORMATS_MISC[d], &arg_tm);
if (end != NULL && *end == '\0') {
_datetime_normalize(now_tm, &arg_tm, arg_sec);
if (datetime_diff_epoch(*arg_sec) >= 0) {
@@ -473,7 +304,7 @@ int
datetime_strftime_date(const struct tm *tm, char **out, size_t *buf_sz,
char **buf, size_t *i)
{
- if (*i >= sizeof(DATETIME_DATE_FMTS_) / sizeof(DATETIME_DATE_FMTS_[0])){
+ if (*i >= sizeof(FORMATS_DATE) / sizeof(FORMATS_DATE[0])) {
if (*out != NULL) {
free(*out);
}
@@ -483,14 +314,14 @@ datetime_strftime_date(const struct tm *tm, char **out, size_t *buf_sz,
return 0;
}
- return _datetime_strftime(DATETIME_DATE_FMTS_, tm, out, buf_sz, buf, i);
+ return _datetime_strftime(FORMATS_DATE, tm, out, buf_sz, buf, i);
}
int
datetime_strftime_time(const struct tm *tm, char **out, size_t *buf_sz,
char **buf, size_t *i)
{
- if (*i >= sizeof(DATETIME_TIME_FMTS_) / sizeof(DATETIME_TIME_FMTS_[0])){
+ if (*i >= sizeof(FORMATS_TIME) / sizeof(FORMATS_TIME[0])) {
if (*out != NULL) {
free(*out);
}
@@ -500,14 +331,14 @@ datetime_strftime_time(const struct tm *tm, char **out, size_t *buf_sz,
return 0;
}
- return _datetime_strftime(DATETIME_TIME_FMTS_, tm, out, buf_sz, buf, i);
+ return _datetime_strftime(FORMATS_TIME, tm, out, buf_sz, buf, i);
}
int
datetime_strftime_misc(const struct tm *tm, char **out, size_t *buf_sz,
char **buf, size_t *i)
{
- if (*i >= sizeof(DATETIME_MISC_FMTS_) / sizeof(DATETIME_MISC_FMTS_[0])){
+ if (*i >= sizeof(FORMATS_MISC) / sizeof(FORMATS_MISC[0])) {
if (*out != NULL) {
free(*out);
}
@@ -517,7 +348,7 @@ datetime_strftime_misc(const struct tm *tm, char **out, size_t *buf_sz,
return 0;
}
- return _datetime_strftime(DATETIME_MISC_FMTS_, tm, out, buf_sz, buf, i);
+ return _datetime_strftime(FORMATS_MISC, tm, out, buf_sz, buf, i);
}
double