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