From e7d5125e2bcfe66f4f6afaad64d6a118fe6307e4 Mon Sep 17 00:00:00 2001 From: Evan Miller Date: Thu, 17 Dec 2020 11:04:54 -0500 Subject: [PATCH] Fix libmdbsql build on Windows --- configure.ac | 2 +- src/sql/mdbsql.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 1f5dbe5..e19c008 100644 --- a/configure.ac +++ b/configure.ac @@ -36,7 +36,7 @@ AC_CHECK_DECLS([program_invocation_short_name], [], [], [[ dnl Checks for library functions. VL_LIB_READLINE -AC_CHECK_FUNCS(strptime fmemopen) +AC_CHECK_FUNCS(strptime fmemopen gmtime_r) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST diff --git a/src/sql/mdbsql.c b/src/sql/mdbsql.c index f45e3d1..9b440ed 100644 --- a/src/sql/mdbsql.c +++ b/src/sql/mdbsql.c @@ -763,9 +763,14 @@ int mdb_sql_find_sargcol(MdbSargNode *node, gpointer data) * Plain integers are UNIX timestamps for backwards compatibility of parser */ if (col->col_type == MDB_DATETIME && node->val_type == MDB_INT) { + struct tm *tmp; +#ifdef HAVE_GMTIME_R struct tm tm; - gmtime_r((time_t*)&node->value.i, &tm); - mdb_tm_to_date(&tm, &node->value.d); + tmp = gmtime_r((time_t*)&node->value.i, &tm); +#else // regular gmtime on Windows uses thread-local storage + tmp = gmtime((time_t*)&node->value.i); +#endif + mdb_tm_to_date(tmp, &node->value.d); node->val_type = MDB_DOUBLE; } }