From: Detlef Riekenberg Subject: [PATCH 3/3] msvcrt: Implement _wcslwr_s [try3] Message-Id: <1294701214-5919-1-git-send-email-wine.dev@web.de> Date: Tue, 11 Jan 2011 00:13:34 +0100 based on _strlwr_s This let Radiotracker go a step forward try 2: without the _set_abort_behavior in msvcrt.spec try 3: using MSVCRT_CHECK_PMT sorry, didn't saw the mail before the last resend. using MSVCRT_CHECK_PMT in _srlwr_s is for a separate patch -- By by ... Detlef --- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt/wcs.c | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 39 insertions(+), 4 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 1e898df..e43f621 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1293,7 +1293,7 @@ @ stub _wcsicoll_l @ cdecl _wcslwr(wstr) msvcrt._wcslwr @ stub _wcslwr_l -@ stub _wcslwr_s +@ cdecl _wcslwr_s(ptr long) msvcrt._wcslwr_s @ stub _wcslwr_s_l @ stub _wcsncoll @ stub _wcsncoll_l diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index d530f78..063a645 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1146,7 +1146,7 @@ @ stub _wcsicoll_l @ cdecl _wcslwr(wstr) msvcrt._wcslwr @ stub _wcslwr_l -@ stub _wcslwr_s +@ cdecl _wcslwr_s(ptr long) msvcrt._wcslwr_s @ stub _wcslwr_s_l @ stub _wcsncoll @ stub _wcsncoll_l diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index c1d400a..32e6c75 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1133,7 +1133,7 @@ @ stub _wcsicoll_l @ cdecl _wcslwr(wstr) msvcrt._wcslwr @ stub _wcslwr_l -@ stub _wcslwr_s +@ cdecl _wcslwr_s(ptr long) msvcrt._wcslwr_s @ stub _wcslwr_s_l @ stub _wcsncoll @ stub _wcsncoll_l diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 172fd82..ad8f7b3 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1067,7 +1067,7 @@ # stub _wcsicoll_l @ cdecl _wcslwr(wstr) ntdll._wcslwr # stub _wcslwr_l -# stub _wcslwr_s +@ cdecl _wcslwr_s(ptr long) # stub _wcslwr_s_l @ stub _wcsncoll #(wstr wstr long) # stub _wcsncoll_l diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index b01e60b..317098c 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -1396,6 +1396,41 @@ int CDECL MSVCRT_wcscoll( const MSVCRT_wchar_t* str1, const MSVCRT_wchar_t* str2 } /********************************************************************* + * _wcslwr_s (MSVCRT.@) + */ +int CDECL _wcslwr_s(WCHAR *str, MSVCRT_size_t len) +{ + WCHAR *ptr = str; + + if (!MSVCRT_CHECK_PMT(str != NULL) || !MSVCRT_CHECK_PMT(len != 0)) + { + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EINVAL; + } + + while (len && *ptr) + { + len--; + ptr++; + } + + if (!MSVCRT_CHECK_PMT(len != 0)) + { + str[0] = '\0'; + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EINVAL; + } + + while (*str) + { + *str = tolowerW(*str); + str++; + } + + return 0; +} + +/********************************************************************* * wcspbrk (MSVCRT.@) */ MSVCRT_wchar_t* CDECL MSVCRT_wcspbrk( const MSVCRT_wchar_t* str, const MSVCRT_wchar_t* accept ) -- 1.7.1