windows: Use localtime/gmtime to implement _r variants

The _s variants and friends do not seem to work on Windows 7 and always fail.
This commit is contained in:
Martin Willi
2014-06-04 15:52:58 +02:00
parent a4719c5767
commit 95a8d53dbe
+18 -26
View 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) static inline struct tm *gmtime_r(const time_t *timep, struct tm *result)
{ {
if (sizeof(time_t) == 4) 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 (_gmtime32_s(result, (__time32_t*)time) == 0) memcpy(result, ret, sizeof(*result));
{
return result;
}
} }
else return ret;
{
if (_gmtime64_s(result, (__time64_t*)time) == 0)
{
return result;
}
}
return NULL;
} }
/** /**
@@ -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) static inline struct tm *localtime_r(const time_t *timep, struct tm *result)
{ {
if (sizeof(time_t) == 4) 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 (_localtime32_s(result, (__time32_t*)time) == 0) memcpy(result, ret, sizeof(*result));
{
return result;
}
} }
else return ret;
{
if (_localtime64_s(result, (__time64_t*)time) == 0)
{
return result;
}
}
return NULL;
} }
/** /**