From: Martin Willi Date: Tue, 15 Oct 2013 14:23:44 +0000 (+0200) Subject: windows: Use localtime/gmtime to implement _r variants X-Git-Tag: 5.2.0dr6~24^2~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=95a8d53dbe1f0dcff27e170fc47902bd4006102d;p=thirdparty%2Fstrongswan.git windows: Use localtime/gmtime to implement _r variants The _s variants and friends do not seem to work on Windows 7 and always fail. --- 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; } /**