Module: wine Branch: master Commit: 1505684a85b3f4819d9e7711e526fd8fb2431beb URL: http://source.winehq.org/git/wine.git/?a=commit;h=1505684a85b3f4819d9e7711e5...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Aug 10 17:18:09 2016 +0200
msvcrt: Add _strftime_l.
Based on Daniel Lehman's patch.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
.../api-ms-win-crt-time-l1-1-0.spec | 2 +- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/time.c | 31 ++++++++++++++++------ dlls/ucrtbase/ucrtbase.spec | 2 +- 9 files changed, 31 insertions(+), 16 deletions(-)
diff --git a/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec b/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec index 2939b95..fc39007 100644 --- a/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec +++ b/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec @@ -42,7 +42,7 @@ @ cdecl _setsystime(ptr long) ucrtbase._setsystime @ cdecl _strdate(ptr) ucrtbase._strdate @ cdecl _strdate_s(ptr long) ucrtbase._strdate_s -@ stub _strftime_l +@ cdecl _strftime_l(str long str ptr ptr) ucrtbase._strftime_l @ cdecl _strtime(ptr) ucrtbase._strtime @ cdecl _strtime_s(ptr long) ucrtbase._strtime_s @ cdecl _time32(ptr) ucrtbase._time32 diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index fa09827..3cfac96 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1340,7 +1340,7 @@ @ cdecl _strdup(str) MSVCRT__strdup @ cdecl _strerror(long) MSVCRT__strerror @ stub _strerror_s -@ stub _strftime_l +@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l @ cdecl _stricmp(str str) MSVCRT__stricmp @ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l @ cdecl _stricoll(str str) MSVCRT__stricoll diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index e0ab69a..2eb5064 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1697,7 +1697,7 @@ @ cdecl _strdup(str) MSVCRT__strdup @ cdecl _strerror(long) MSVCRT__strerror @ stub _strerror_s -@ stub _strftime_l +@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l @ cdecl _stricmp(str str) MSVCRT__stricmp @ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l @ cdecl _stricoll(str str) MSVCRT__stricoll diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index a2e7832..5ba624a 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1708,7 +1708,7 @@ @ cdecl _strdup(str) MSVCRT__strdup @ cdecl _strerror(long) MSVCRT__strerror @ stub _strerror_s -@ stub _strftime_l +@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l @ cdecl _stricmp(str str) MSVCRT__stricmp @ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l @ cdecl _stricoll(str str) MSVCRT__stricoll diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 94c0e08..ffcfcbd 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -1419,7 +1419,7 @@ @ cdecl _strdup(str) msvcr120._strdup @ cdecl _strerror(long) msvcr120._strerror @ stub _strerror_s -@ stub _strftime_l +@ cdecl _strftime_l(str long str ptr ptr) msvcr120._strftime_l @ cdecl _stricmp(str str) msvcr120._stricmp @ cdecl _stricmp_l(str str ptr) msvcr120._stricmp_l @ cdecl _stricoll(str str) msvcr120._stricoll diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index c0edc8f..069bc9f 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1020,7 +1020,7 @@ @ cdecl _strdup(str) MSVCRT__strdup @ cdecl _strerror(long) MSVCRT__strerror @ stub _strerror_s -@ stub _strftime_l +@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l @ cdecl _stricmp(str str) MSVCRT__stricmp @ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l @ cdecl _stricoll(str str) MSVCRT__stricoll diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index bf5ab57..b30cd4d 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -995,7 +995,7 @@ @ cdecl _strdup(str) MSVCRT__strdup @ cdecl _strerror(long) MSVCRT__strerror @ stub _strerror_s -@ stub _strftime_l +@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l @ cdecl _stricmp(str str) MSVCRT__stricmp @ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l @ cdecl _stricoll(str str) MSVCRT__stricoll diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c index ed88e3c..004dffb 100644 --- a/dlls/msvcrt/time.c +++ b/dlls/msvcrt/time.c @@ -1055,11 +1055,8 @@ static inline BOOL strftime_int(char *str, MSVCRT_size_t *pos, MSVCRT_size_t max return TRUE; }
-/********************************************************************* - * _Strftime (MSVCRT.@) - */ -MSVCRT_size_t CDECL _Strftime(char *str, MSVCRT_size_t max, const char *format, - const struct MSVCRT_tm *mstm, MSVCRT___lc_time_data *time_data) +static MSVCRT_size_t strftime_helper(char *str, MSVCRT_size_t max, const char *format, + const struct MSVCRT_tm *mstm, MSVCRT___lc_time_data *time_data, MSVCRT__locale_t loc) { MSVCRT_size_t ret, tmp; BOOL alternate; @@ -1074,11 +1071,11 @@ MSVCRT_size_t CDECL _Strftime(char *str, MSVCRT_size_t max, const char *format, }
if(!time_data) - time_data = get_locinfo()->lc_time_curr; + time_data = loc ? loc->locinfo->lc_time_curr : get_locinfo()->lc_time_curr;
for(ret=0; *format && ret<max; format++) { if(*format != '%') { - if(MSVCRT_isleadbyte((unsigned char)*format)) { + if(MSVCRT__isleadbyte_l((unsigned char)*format, loc)) { str[ret++] = *(format++); if(ret == max) continue; if(!str[ret]) goto einval_error; @@ -1239,13 +1236,31 @@ einval_error: return 0; }
+/******************************************************************** + * _strftime_l (MSVCRT.@) + */ +MSVCRT_size_t CDECL MSVCRT__strftime_l( char *str, MSVCRT_size_t max, const char *format, + const struct MSVCRT_tm *mstm, MSVCRT__locale_t loc ) +{ + return strftime_helper(str, max, format, mstm, NULL, loc); +} + +/********************************************************************* + * _Strftime (MSVCRT.@) + */ +MSVCRT_size_t CDECL _Strftime(char *str, MSVCRT_size_t max, const char *format, + const struct MSVCRT_tm *mstm, MSVCRT___lc_time_data *time_data) +{ + return strftime_helper(str, max, format, mstm, time_data, NULL); +} + /********************************************************************* * strftime (MSVCRT.@) */ MSVCRT_size_t CDECL MSVCRT_strftime( char *str, MSVCRT_size_t max, const char *format, const struct MSVCRT_tm *mstm ) { - return _Strftime(str, max, format, mstm, NULL); + return strftime_helper(str, max, format, mstm, NULL, NULL); }
/********************************************************************* diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index bb549d1..a0260d3 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -1926,7 +1926,7 @@ @ cdecl _strdup(str) MSVCRT__strdup @ cdecl _strerror(long) MSVCRT__strerror @ stub _strerror_s -@ stub _strftime_l +@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l @ cdecl _stricmp(str str) MSVCRT__stricmp @ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l @ cdecl _stricoll(str str) MSVCRT__stricoll