From 95a8d53dbe1f0dcff27e170fc47902bd4006102d Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Tue, 15 Oct 2013 16:23:44 +0200 Subject: [PATCH] windows: Use localtime/gmtime to implement _r variants The _s variants and friends do not seem to work on Windows 7 and always fail. --- src/libstrongswan/utils/windows.h | 44 +++++++++++++------------------ 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/src/libstrongswan/utils/windows.h b/src/libstrongswan/utils/windows.h index 2457cff326..d47ae9a99b 100644 --- a/src/libstrongswan/utils/windows.h +++ b/src/libstrongswan/utils/windows.h @@ -111,21 +111,17 @@ static inline void timersub(struct timeval *a, struct timeval *b, */ static inline struct tm *gmtime_r(const time_t *timep, struct tm *result) { - if (sizeof(time_t) == 4) - { - if (_gmtime32_s(result, (__time32_t*)time) == 0) - { - return result; - } - } - else + struct tm *ret; + + /* gmtime_s() and friends seem not to be implemented/functioning. + * Relying on gmtime() on Windows works as well, as it uses thread + * specific buffers. */ + ret = gmtime(timep); + if (ret) { - if (_gmtime64_s(result, (__time64_t*)time) == 0) - { - return result; - } + memcpy(result, ret, sizeof(*result)); } - return NULL; + return ret; } /** @@ -133,21 +129,17 @@ static inline struct tm *gmtime_r(const time_t *timep, struct tm *result) */ static inline struct tm *localtime_r(const time_t *timep, struct tm *result) { - if (sizeof(time_t) == 4) - { - if (_localtime32_s(result, (__time32_t*)time) == 0) - { - return result; - } - } - else + struct tm *ret; + + /* localtime_s() and friends seem not to be implemented/functioning. + * Relying on localtime() on Windows works as well, as it uses thread + * specific buffers. */ + ret = localtime(timep); + if (ret) { - if (_localtime64_s(result, (__time64_t*)time) == 0) - { - return result; - } + memcpy(result, ret, sizeof(*result)); } - return NULL; + return ret; } /** -- 2.47.3