Commit 8c954c09 authored by Piotr Caban's avatar Piotr Caban Committed by Alexandre Julliard

msvcrt: Avoid using localtime_r.

parent 8a57f501
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <limits.h> #include <limits.h>
#include "msvcrt.h" #include "msvcrt.h"
#include "mtdll.h"
#include "winbase.h" #include "winbase.h"
#include "winnls.h" #include "winnls.h"
#include "wine/debug.h" #include "wine/debug.h"
...@@ -127,16 +128,21 @@ MSVCRT___time32_t CDECL MSVCRT_mktime(struct MSVCRT_tm *mstm) ...@@ -127,16 +128,21 @@ MSVCRT___time32_t CDECL MSVCRT_mktime(struct MSVCRT_tm *mstm)
*/ */
struct MSVCRT_tm* CDECL MSVCRT__localtime64(const MSVCRT___time64_t* secs) struct MSVCRT_tm* CDECL MSVCRT__localtime64(const MSVCRT___time64_t* secs)
{ {
struct tm tm; struct tm *tm;
thread_data_t *data; thread_data_t *data;
time_t seconds = *secs; time_t seconds = *secs;
if (seconds < 0) return NULL; if (seconds < 0) return NULL;
if (!localtime_r( &seconds, &tm )) return NULL; _mlock(_TIME_LOCK);
if (!(tm = localtime( &seconds))) {
_munlock(_TIME_LOCK);
return NULL;
}
data = msvcrt_get_thread_data(); data = msvcrt_get_thread_data();
unix_tm_to_msvcrt( &data->time_buffer, &tm ); unix_tm_to_msvcrt( &data->time_buffer, tm );
_munlock(_TIME_LOCK);
return &data->time_buffer; return &data->time_buffer;
} }
...@@ -492,12 +498,15 @@ void CDECL MSVCRT__tzset(void) ...@@ -492,12 +498,15 @@ void CDECL MSVCRT__tzset(void)
struct tm *tmp; struct tm *tmp;
int zone_january, zone_july; int zone_january, zone_july;
_mlock(_TIME_LOCK);
t = (time(NULL) / seconds_in_year) * seconds_in_year; t = (time(NULL) / seconds_in_year) * seconds_in_year;
tmp = localtime(&t); tmp = localtime(&t);
zone_january = -tmp->tm_gmtoff; zone_january = -tmp->tm_gmtoff;
t += seconds_in_year / 2; t += seconds_in_year / 2;
tmp = localtime(&t); tmp = localtime(&t);
zone_july = -tmp->tm_gmtoff; zone_july = -tmp->tm_gmtoff;
_munlock(_TIME_LOCK);
MSVCRT___daylight = (zone_january != zone_july); MSVCRT___daylight = (zone_january != zone_july);
MSVCRT___timezone = max(zone_january, zone_july); MSVCRT___timezone = max(zone_january, zone_july);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment