From b0a0583a35e95bbce3a9b4956ccc4b605b7baaec Mon Sep 17 00:00:00 2001 From: John Kerl Date: Tue, 17 Jan 2017 22:06:09 -0500 Subject: [PATCH] split out mlrdatetime from mlrutil to ease iterative windows port --- c/lib/mlrdatetime.c | 33 +++++++++++++++++++++++++++++++++ c/lib/mlrdatetime.h | 14 ++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 c/lib/mlrdatetime.c create mode 100644 c/lib/mlrdatetime.h diff --git a/c/lib/mlrdatetime.c b/c/lib/mlrdatetime.c new file mode 100644 index 000000000..20be36671 --- /dev/null +++ b/c/lib/mlrdatetime.c @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include +#include "lib/mlrdatetime.h" + +// ---------------------------------------------------------------- +// seconds since the epoch +double get_systime() { + struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; + (void)gettimeofday(&tv, NULL); + return (double)tv.tv_sec + (double)tv.tv_usec * 1e-6; +} + +// ---------------------------------------------------------------- +// See the GNU timegm manpage -- this is what it does. +time_t mlr_timegm(struct tm* ptm) { + time_t ret; + char* tz; + + tz = getenv("TZ"); + setenv("TZ", "GMT0", 1); + tzset(); + ret = mktime(ptm); + if (tz) { + setenv("TZ", tz, 1); + } else { + unsetenv("TZ"); + } + tzset(); + return ret; +} diff --git a/c/lib/mlrdatetime.h b/c/lib/mlrdatetime.h new file mode 100644 index 000000000..85e6c86f4 --- /dev/null +++ b/c/lib/mlrdatetime.h @@ -0,0 +1,14 @@ +#ifndef MLRDATETIME_H +#define MLRDATETIME_H + +#include +#include +#include +#include + +double get_systime(); + +// portable timegm replacement +time_t mlr_timegm (struct tm *ptm); + +#endif // MLRDATETIME_H