Module: wine Branch: master Commit: e38cbd82bdbba0d25f542138c9d1d62c1fde15cb URL: http://source.winehq.org/git/wine.git/?a=commit;h=e38cbd82bdbba0d25f542138c9...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Aug 10 17:18:16 2016 +0200
msvcrt: Add wcsftime_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/msvcrt.h | 2 ++ dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt/time.c | 25 +++++++++++++++------- dlls/ucrtbase/ucrtbase.spec | 2 +- 11 files changed, 28 insertions(+), 17 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 fc39007..5da3851 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 @@ -54,7 +54,7 @@ @ cdecl _utime64(str ptr) ucrtbase._utime64 @ cdecl _wasctime(ptr) ucrtbase._wasctime @ cdecl _wasctime_s(ptr long ptr) ucrtbase._wasctime_s -@ stub _wcsftime_l +@ cdecl _wcsftime_l(ptr long wstr ptr ptr) ucrtbase._wcsftime_l @ cdecl _wctime32(ptr) ucrtbase._wctime32 @ cdecl _wctime32_s(ptr long ptr) ucrtbase._wctime32_s @ cdecl _wctime64(ptr) ucrtbase._wctime64 diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 3cfac96..7e80adc 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1491,7 +1491,7 @@ @ cdecl _wcsdup(wstr) MSVCRT__wcsdup @ cdecl _wcserror(long) MSVCRT__wcserror @ cdecl _wcserror_s(ptr long long) MSVCRT__wcserror_s -@ stub _wcsftime_l +@ cdecl _wcsftime_l(ptr long wstr ptr ptr) MSVCRT__wcsftime_l @ cdecl _wcsicmp(wstr wstr) MSVCRT__wcsicmp @ cdecl _wcsicmp_l(wstr wstr ptr) MSVCRT__wcsicmp_l @ cdecl _wcsicoll(wstr wstr) MSVCRT__wcsicoll diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 2eb5064..5f33acf 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1849,7 +1849,7 @@ @ cdecl _wcsdup(wstr) MSVCRT__wcsdup @ cdecl _wcserror(long) MSVCRT__wcserror @ cdecl _wcserror_s(ptr long long) MSVCRT__wcserror_s -@ stub _wcsftime_l +@ cdecl _wcsftime_l(ptr long wstr ptr ptr) MSVCRT__wcsftime_l @ cdecl _wcsicmp(wstr wstr) MSVCRT__wcsicmp @ cdecl _wcsicmp_l(wstr wstr ptr) MSVCRT__wcsicmp_l @ cdecl _wcsicoll(wstr wstr) MSVCRT__wcsicoll diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 5ba624a..0ac1de8 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1867,7 +1867,7 @@ @ cdecl _wcsdup(wstr) MSVCRT__wcsdup @ cdecl _wcserror(long) MSVCRT__wcserror @ cdecl _wcserror_s(ptr long long) MSVCRT__wcserror_s -@ stub _wcsftime_l +@ cdecl _wcsftime_l(ptr long wstr ptr ptr) MSVCRT__wcsftime_l @ cdecl _wcsicmp(wstr wstr) MSVCRT__wcsicmp @ cdecl _wcsicmp_l(wstr wstr ptr) MSVCRT__wcsicmp_l @ cdecl _wcsicoll(wstr wstr) MSVCRT__wcsicoll diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index ffcfcbd..99e1fa9 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -1560,7 +1560,7 @@ @ cdecl _wcsdup(wstr) msvcr120._wcsdup @ cdecl _wcserror(long) msvcr120._wcserror @ cdecl _wcserror_s(ptr long long) msvcr120._wcserror_s -@ stub _wcsftime_l +@ cdecl _wcsftime_l(ptr long wstr ptr ptr) msvcr120._wcsftime_l @ cdecl _wcsicmp(wstr wstr) msvcr120._wcsicmp @ cdecl _wcsicmp_l(wstr wstr ptr) msvcr120._wcsicmp_l @ cdecl _wcsicoll(wstr wstr) msvcr120._wcsicoll diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 069bc9f..aae7fc1 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1170,7 +1170,7 @@ @ cdecl _wcsdup(wstr) MSVCRT__wcsdup @ cdecl _wcserror(long) MSVCRT__wcserror @ cdecl _wcserror_s(ptr long long) MSVCRT__wcserror_s -@ stub _wcsftime_l +@ cdecl _wcsftime_l(ptr long wstr ptr ptr) MSVCRT__wcsftime_l @ cdecl _wcsicmp(wstr wstr) MSVCRT__wcsicmp @ cdecl _wcsicmp_l(wstr wstr ptr) MSVCRT__wcsicmp_l @ cdecl _wcsicoll(wstr wstr) MSVCRT__wcsicoll diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index b30cd4d..d9fe6bb 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1146,7 +1146,7 @@ @ cdecl _wcsdup(wstr) MSVCRT__wcsdup @ cdecl _wcserror(long) MSVCRT__wcserror @ cdecl _wcserror_s(ptr long long) MSVCRT__wcserror_s -@ stub _wcsftime_l +@ cdecl _wcsftime_l(ptr long wstr ptr ptr) MSVCRT__wcsftime_l @ cdecl _wcsicmp(wstr wstr) MSVCRT__wcsicmp @ cdecl _wcsicmp_l(wstr wstr ptr) MSVCRT__wcsicmp_l @ cdecl _wcsicoll(wstr wstr) MSVCRT__wcsicoll diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index e744ef0..c96d0dc 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -1051,7 +1051,9 @@ int __cdecl _ismbclegal(unsigned int c); int __cdecl _ismbstrail(const unsigned char* start, const unsigned char* str); int __cdecl MSVCRT_mbtowc(MSVCRT_wchar_t*,const char*,MSVCRT_size_t); MSVCRT_size_t __cdecl MSVCRT_mbstowcs(MSVCRT_wchar_t*,const char*,MSVCRT_size_t); +MSVCRT_size_t __cdecl MSVCRT__mbstowcs_l(MSVCRT_wchar_t*, const char*, MSVCRT_size_t, MSVCRT__locale_t); MSVCRT_size_t __cdecl MSVCRT_wcstombs(char*,const MSVCRT_wchar_t*,MSVCRT_size_t); +MSVCRT_size_t __cdecl MSVCRT__wcstombs_l(char*, const MSVCRT_wchar_t*, MSVCRT_size_t, MSVCRT__locale_t); MSVCRT_intptr_t __cdecl MSVCRT__spawnve(int,const char*,const char* const *,const char* const *); MSVCRT_intptr_t __cdecl MSVRT__spawnvpe(int,const char*,const char* const *,const char* const *); MSVCRT_intptr_t __cdecl MSVCRT__wspawnve(int,const MSVCRT_wchar_t*,const MSVCRT_wchar_t* const *,const MSVCRT_wchar_t* const *); diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 274d2e7..2998376 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1101,7 +1101,7 @@ # stub _wcsdup_dbg(wstr long str long) @ cdecl _wcserror(long) MSVCRT__wcserror @ cdecl _wcserror_s(ptr long long) MSVCRT__wcserror_s -# stub _wcsftime_l(ptr long wstr ptr ptr) +@ cdecl _wcsftime_l(ptr long wstr ptr ptr) MSVCRT__wcsftime_l @ cdecl _wcsicmp(wstr wstr) MSVCRT__wcsicmp @ cdecl _wcsicmp_l(wstr wstr ptr) MSVCRT__wcsicmp_l @ cdecl _wcsicoll(wstr wstr) MSVCRT__wcsicoll diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c index 004dffb..b0f5285 100644 --- a/dlls/msvcrt/time.c +++ b/dlls/msvcrt/time.c @@ -1264,24 +1264,24 @@ MSVCRT_size_t CDECL MSVCRT_strftime( char *str, MSVCRT_size_t max, const char *f }
/********************************************************************* - * wcsftime (MSVCRT.@) + * _wcsftime_l (MSVCRT.@) */ -MSVCRT_size_t CDECL MSVCRT_wcsftime( MSVCRT_wchar_t *str, MSVCRT_size_t max, - const MSVCRT_wchar_t *format, const struct MSVCRT_tm *mstm ) +MSVCRT_size_t CDECL MSVCRT__wcsftime_l( MSVCRT_wchar_t *str, MSVCRT_size_t max, + const MSVCRT_wchar_t *format, const struct MSVCRT_tm *mstm, MSVCRT__locale_t loc ) { char *s, *fmt; MSVCRT_size_t len;
- TRACE("%p %ld %s %p\n", str, max, debugstr_w(format), mstm ); + TRACE("%p %ld %s %p %p\n", str, max, debugstr_w(format), mstm, loc);
- len = MSVCRT_wcstombs( NULL, format, 0 ) + 1; + len = MSVCRT__wcstombs_l( NULL, format, 0, loc ) + 1; if (!(fmt = MSVCRT_malloc( len ))) return 0; - MSVCRT_wcstombs(fmt, format, len); + MSVCRT__wcstombs_l(fmt, format, len, loc);
if ((s = MSVCRT_malloc( max*4 ))) { - if (!MSVCRT_strftime( s, max*4, fmt, mstm )) s[0] = 0; - len = MSVCRT_mbstowcs( str, s, max ); + if (!MSVCRT__strftime_l( s, max*4, fmt, mstm, loc )) s[0] = 0; + len = MSVCRT__mbstowcs_l( str, s, max, loc ); MSVCRT_free( s ); } else len = 0; @@ -1290,6 +1290,15 @@ MSVCRT_size_t CDECL MSVCRT_wcsftime( MSVCRT_wchar_t *str, MSVCRT_size_t max, return len; }
+/********************************************************************* + * wcsftime (MSVCRT.@) + */ +MSVCRT_size_t CDECL MSVCRT_wcsftime( MSVCRT_wchar_t *str, MSVCRT_size_t max, + const MSVCRT_wchar_t *format, const struct MSVCRT_tm *mstm ) +{ + return MSVCRT__wcsftime_l(str, max, format, mstm, NULL); +} + static char* asctime_buf(char *buf, const struct MSVCRT_tm *mstm) { static const char wday[7][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index a0260d3..7582ba9 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -2016,7 +2016,7 @@ @ cdecl _wcsdup(wstr) MSVCRT__wcsdup @ cdecl _wcserror(long) MSVCRT__wcserror @ cdecl _wcserror_s(ptr long long) MSVCRT__wcserror_s -@ stub _wcsftime_l +@ cdecl _wcsftime_l(ptr long wstr ptr ptr) MSVCRT__wcsftime_l @ cdecl _wcsicmp(wstr wstr) MSVCRT__wcsicmp @ cdecl _wcsicmp_l(wstr wstr ptr) MSVCRT__wcsicmp_l @ cdecl _wcsicoll(wstr wstr) MSVCRT__wcsicoll