From d5d60a503f6de8866be843b40fe6de7c20a0f3a0 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Wed, 12 Dec 2018 14:08:15 -0500 Subject: Speed up UTC mktime by using library timegm if available instead of our slow implementation. --- missing_d/timegm.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 missing_d/timegm.c (limited to 'missing_d/timegm.c') diff --git a/missing_d/timegm.c b/missing_d/timegm.c new file mode 100644 index 00000000..f7b780de --- /dev/null +++ b/missing_d/timegm.c @@ -0,0 +1,29 @@ +#include +#include + +static time_t +timegm(struct tm *tm) +{ + time_t ret; + char *tz = getenv("TZ"); + const char *tzreq = "UTC+0"; /* more portable than ""? */ + + if (tz) + tz = estrdup(tz, strlen(tz)); + if (setenv("TZ", tzreq, 1) < 0) { + warning(_("setenv(TZ, %s) failed (%s)"), tzreq, strerror(errno)); + return -1; + } + tzset(); + ret = mktime(tm); + if (tz) { + if (setenv("TZ", tz, 1) < 0) + fatal(_("setenv(TZ, %s) restoration failed (%s)"), tz, strerror(errno)); + free(tz); + } else { + if (unsetenv("TZ") < 0) + fatal(_("unsetenv(TZ) failed (%s)"), strerror(errno)); + } + tzset(); + return ret; +} -- cgit v1.2.3