diff --git a/CMakeLists.txt b/CMakeLists.txt index 91dbeca3a..a09b92b61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -558,6 +558,7 @@ CHECK_FUNCTION_EXISTS(getgrgid_r LWS_HAVE_GETGRGID_R) CHECK_FUNCTION_EXISTS(getgrnam_r LWS_HAVE_GETGRNAM_R) CHECK_FUNCTION_EXISTS(getpwuid_r LWS_HAVE_GETPWUID_R) CHECK_FUNCTION_EXISTS(getpwnam_r LWS_HAVE_GETPWNAM_R) +CHECK_FUNCTION_EXISTS(timegm LWS_HAVE_TIMEGM) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") if(CMAKE_OSX_DEPLOYMENT_TARGET LESS "10.12") diff --git a/cmake/lws_config.h.in b/cmake/lws_config.h.in index a7fcfca91..b5e2aa09d 100644 --- a/cmake/lws_config.h.in +++ b/cmake/lws_config.h.in @@ -95,6 +95,7 @@ #cmakedefine LWS_HAVE__STAT32I64 #cmakedefine LWS_HAVE_STDINT_H #cmakedefine LWS_HAVE_SYS_CAPABILITY_H +#cmakedefine LWS_HAVE_TIMEGM #cmakedefine LWS_HAVE_TLS_CLIENT_METHOD #cmakedefine LWS_HAVE_TLSV1_2_CLIENT_METHOD #cmakedefine LWS_HAVE_SUSECONDS_T diff --git a/lib/roles/http/date.c b/lib/roles/http/date.c index 0b0012b6d..6ac42ba9c 100644 --- a/lib/roles/http/date.c +++ b/lib/roles/http/date.c @@ -139,7 +139,16 @@ lws_http_date_parse_unix(const char *b, size_t len, time_t *t) if (lws_http_date_parse(b, len, &tm)) return -1; +#if defined(WIN32) + *t = _mkgmtime(&tm); +#else +#if defined(LWS_HAVE_TIMEGM) + *t = timegm(&tm); +#else + /* this is a poor fallback since it uses localtime zone */ *t = mktime(&tm); +#endif +#endif return (int)*t == -1 ? -1 : 0; }