]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
windows: Use localtime/gmtime to implement _r variants
authorMartin Willi <martin@revosec.ch>
Tue, 15 Oct 2013 14:23:44 +0000 (16:23 +0200)
committerMartin Willi <martin@revosec.ch>
Wed, 4 Jun 2014 13:52:58 +0000 (15:52 +0200)
The _s variants and friends do not seem to work on Windows 7 and always fail.

src/libstrongswan/utils/windows.h

index 2457cff32675966977106ee19fc701649f47342a..d47ae9a99b49e5b74b8386631e7f94ea2bea7cba 100644 (file)
@@ -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;
 }
 
 /**