Piotr Caban : msvcrt: Change the way how localtime/ gmtime buffer is stored in __thread_data.

Alexandre Julliard julliard at winehq.org
Wed May 25 11:28:12 CDT 2011


Module: wine
Branch: master
Commit: 12229aeeb28b55add3356e3fe17924319f014a54
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=12229aeeb28b55add3356e3fe17924319f014a54

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue May 24 17:22:54 2011 +0200

msvcrt: Change the way how localtime/gmtime buffer is stored in __thread_data.

---

 dlls/msvcrt/main.c   |    1 +
 dlls/msvcrt/msvcrt.h |    2 +-
 dlls/msvcrt/time.c   |   14 ++++++++++----
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/dlls/msvcrt/main.c b/dlls/msvcrt/main.c
index e6c21f5..902fb64 100644
--- a/dlls/msvcrt/main.c
+++ b/dlls/msvcrt/main.c
@@ -73,6 +73,7 @@ static inline void msvcrt_free_tls_mem(void)
     HeapFree(GetProcessHeap(),0,tls->wasctime_buffer);
     HeapFree(GetProcessHeap(),0,tls->strerror_buffer);
     HeapFree(GetProcessHeap(),0,tls->wcserror_buffer);
+    HeapFree(GetProcessHeap(),0,tls->time_buffer);
     free_locinfo(tls->locinfo);
     free_mbcinfo(tls->mbcinfo);
   }
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h
index 9b8ac38..90056ba 100644
--- a/dlls/msvcrt/msvcrt.h
+++ b/dlls/msvcrt/msvcrt.h
@@ -172,7 +172,7 @@ struct __thread_data {
     void                           *unk2[4];
     char                           *asctime_buffer;     /* buffer for asctime */
     MSVCRT_wchar_t                 *wasctime_buffer;    /* buffer for wasctime */
-    struct MSVCRT_tm                time_buffer;        /* buffer for localtime/gmtime */
+    struct MSVCRT_tm               *time_buffer;        /* buffer for localtime/gmtime */
     char                           *efcvt_buffer;       /* buffer for ecvt/fcvt */
     int                             unk3[2];
     void                           *unk4[4];
diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c
index 9dc2a3e..0aa1e58 100644
--- a/dlls/msvcrt/time.c
+++ b/dlls/msvcrt/time.c
@@ -212,10 +212,13 @@ struct MSVCRT_tm* CDECL MSVCRT__localtime64(const MSVCRT___time64_t* secs)
     }
 
     data = msvcrt_get_thread_data();
-    unix_tm_to_msvcrt( &data->time_buffer, tm );
+    if(!data->time_buffer)
+        data->time_buffer = MSVCRT_malloc(sizeof(struct MSVCRT_tm));
+
+    unix_tm_to_msvcrt( data->time_buffer, tm );
     _munlock(_TIME_LOCK);
 
-    return &data->time_buffer;
+    return data->time_buffer;
 }
 
 /*********************************************************************
@@ -344,9 +347,12 @@ struct MSVCRT_tm* CDECL MSVCRT__gmtime64(const MSVCRT___time64_t *secs)
 {
     thread_data_t * const data = msvcrt_get_thread_data();
 
-    if(MSVCRT__gmtime64_s(&data->time_buffer, secs))
+    if(!data->time_buffer)
+        data->time_buffer = MSVCRT_malloc(sizeof(struct MSVCRT_tm));
+
+    if(MSVCRT__gmtime64_s(data->time_buffer, secs))
         return NULL;
-    return &data->time_buffer;
+    return data->time_buffer;
 }
 
 /*********************************************************************




More information about the wine-cvs mailing list