From ecac39c19b8938066978f4c6b4a6e617d9ccf2ff Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Mon, 14 Sep 2015 17:48:44 +0200 Subject: [PATCH] msvcrt: Add _wctime32_s implementation. --- dlls/msvcr100/msvcr100.spec | 4 ++-- dlls/msvcr110/msvcr110.spec | 4 ++-- dlls/msvcr120/msvcr120.spec | 4 ++-- dlls/msvcr120_app/msvcr120_app.spec | 4 ++-- dlls/msvcr80/msvcr80.spec | 4 ++-- dlls/msvcr90/msvcr90.spec | 4 ++-- dlls/msvcrt/msvcrt.spec | 4 ++-- dlls/msvcrt/time.c | 47 ++++++++++++++++++++++++++++++++++++- 8 files changed, 60 insertions(+), 15 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index f9eae912684..edff2c96407 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1525,9 +1525,9 @@ @ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l @ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l @ cdecl _wctime32(ptr) MSVCRT__wctime32 -@ stub _wctime32_s +@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s @ cdecl _wctime64(ptr) MSVCRT__wctime64 -@ stub _wctime64_s +@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l # extern _wctype diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 51eddfbd422..9dda90a4054 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1884,9 +1884,9 @@ @ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l @ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l @ cdecl _wctime32(ptr) MSVCRT__wctime32 -@ stub _wctime32_s +@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s @ cdecl _wctime64(ptr) MSVCRT__wctime64 -@ stub _wctime64_s +@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l # extern _wctype diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 184c9b5467a..6e13eefc1ce 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1908,9 +1908,9 @@ @ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l @ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l @ cdecl _wctime32(ptr) MSVCRT__wctime32 -@ stub _wctime32_s +@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s @ cdecl _wctime64(ptr) MSVCRT__wctime64 -@ stub _wctime64_s +@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l # extern _wctype diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index ec97ad7c34d..bc4d63b8ece 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -1601,9 +1601,9 @@ @ cdecl _wcsupr_s_l(wstr long ptr) msvcr120._wcsupr_s_l @ cdecl _wcsxfrm_l(ptr wstr long ptr) msvcr120._wcsxfrm_l @ cdecl _wctime32(ptr) msvcr120._wctime32 -@ stub _wctime32_s +@ cdecl _wctime32_s(ptr long ptr) msvcr120._wctime32_s @ cdecl _wctime64(ptr) msvcr120._wctime64 -@ stub _wctime64_s +@ cdecl _wctime64_s(ptr long ptr) msvcr120._wctime64_s @ cdecl _wctomb_l(ptr long ptr) msvcr120._wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) msvcr120._wctomb_s_l # extern _wctype diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index fac24463789..cc10014fc1a 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1205,9 +1205,9 @@ @ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l @ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l @ cdecl _wctime32(ptr) MSVCRT__wctime32 -@ stub _wctime32_s +@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s @ cdecl _wctime64(ptr) MSVCRT__wctime64 -@ stub _wctime64_s +@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l # extern _wctype diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 479b88b00e5..e5415c4adf4 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1180,9 +1180,9 @@ @ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l @ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l @ cdecl _wctime32(ptr) MSVCRT__wctime32 -@ stub _wctime32_s +@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s @ cdecl _wctime64(ptr) MSVCRT__wctime64 -@ stub _wctime64_s +@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l # extern _wctype diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 37b94e3d8c0..3bd47d2976a 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1137,9 +1137,9 @@ @ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l @ cdecl _wctime(ptr) MSVCRT__wctime @ cdecl _wctime32(ptr) MSVCRT__wctime32 -# stub _wctime32_s(ptr long ptr) +@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s @ cdecl _wctime64(ptr) MSVCRT__wctime64 -# stub _wctime64_s(ptr long ptr) +@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s @ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l @ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l # extern _wctype diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c index e52e1d8d8dc..7fed3b38f2a 100644 --- a/dlls/msvcrt/time.c +++ b/dlls/msvcrt/time.c @@ -1358,7 +1358,7 @@ int CDECL MSVCRT__wasctime_s(MSVCRT_wchar_t* time, MSVCRT_size_t size, const str if (!MSVCRT_CHECK_PMT(mstm != NULL)) return MSVCRT_EINVAL; ret = MSVCRT_asctime_s(buffer, sizeof(buffer), mstm); - if(!ret) + if(ret) return ret; MultiByteToWideChar(CP_ACP, 0, buffer, -1, time, size); return 0; @@ -1469,6 +1469,51 @@ MSVCRT_wchar_t * CDECL MSVCRT__wctime(const MSVCRT___time32_t *time) #endif /********************************************************************* + * _wctime64_s (MSVCRT.@) + */ +int CDECL MSVCRT__wctime64_s(MSVCRT_wchar_t *buf, + MSVCRT_size_t size, const MSVCRT___time64_t *time) +{ + struct MSVCRT_tm tm; + int ret; + + if(!MSVCRT_CHECK_PMT(buf != NULL)) return MSVCRT_EINVAL; + if(!MSVCRT_CHECK_PMT(size != 0)) return MSVCRT_EINVAL; + buf[0] = 0; + if(!MSVCRT_CHECK_PMT(time != NULL)) return MSVCRT_EINVAL; + if(!MSVCRT_CHECK_PMT(*time >= 0)) return MSVCRT_EINVAL; + if(!MSVCRT_CHECK_PMT(*time <= _MAX__TIME64_T)) return MSVCRT_EINVAL; + + ret = _localtime64_s(&tm, time); + if(ret != 0) + return ret; + + return MSVCRT__wasctime_s(buf, size, &tm); +} + +/********************************************************************* + * _wctime32_s (MSVCRT.@) + */ +int CDECL MSVCRT__wctime32_s(MSVCRT_wchar_t *buf, MSVCRT_size_t size, + const MSVCRT___time32_t *time) +{ + struct MSVCRT_tm tm; + int ret; + + if(!MSVCRT_CHECK_PMT(buf != NULL)) return MSVCRT_EINVAL; + if(!MSVCRT_CHECK_PMT(size != 0)) return MSVCRT_EINVAL; + buf[0] = 0; + if(!MSVCRT_CHECK_PMT(time != NULL)) return MSVCRT_EINVAL; + if(!MSVCRT_CHECK_PMT(*time >= 0)) return MSVCRT_EINVAL; + + ret = _localtime32_s(&tm, time); + if(ret != 0) + return ret; + + return MSVCRT__wasctime_s(buf, size, &tm); +} + +/********************************************************************* * _get_timezone (MSVCR100.@) */ int CDECL _get_timezone(LONG *timezone) -- 2.11.4.GIT