diff --git a/CMakeLists.txt b/CMakeLists.txt index 06df8ffdb..4718a438d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -561,6 +561,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 118d1cf7c..b64f29e35 100644 --- a/cmake/lws_config.h.in +++ b/cmake/lws_config.h.in @@ -99,6 +99,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; }