Module: wine Branch: master Commit: eb7d55761ed0ee9ee95b02036b4945cd2997f112 URL: http://source.winehq.org/git/wine.git/?a=commit;h=eb7d55761ed0ee9ee95b02036b...
Author: Piotr Caban piotr@codeweavers.com Date: Fri Oct 6 12:07:18 2017 +0200
msvcrt: Add _mbccpy_s_l implementation.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
.../api-ms-win-crt-multibyte-l1-1-0.spec | 8 ++-- dlls/crtdll/crtdll.spec | 2 +- dlls/msvcr100/msvcr100.spec | 8 ++-- dlls/msvcr110/msvcr110.spec | 8 ++-- dlls/msvcr120/msvcr120.spec | 8 ++-- dlls/msvcr80/msvcr80.spec | 8 ++-- dlls/msvcr90/msvcr90.spec | 8 ++-- dlls/msvcrt/mbcs.c | 56 ++++++++++++++++++++-- dlls/msvcrt/msvcrt.spec | 8 ++-- dlls/msvcrt20/msvcrt20.spec | 2 +- dlls/msvcrt40/msvcrt40.spec | 2 +- dlls/msvcrtd/msvcrtd.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 8 ++-- 13 files changed, 89 insertions(+), 39 deletions(-)
diff --git a/dlls/api-ms-win-crt-multibyte-l1-1-0/api-ms-win-crt-multibyte-l1-1-0.spec b/dlls/api-ms-win-crt-multibyte-l1-1-0/api-ms-win-crt-multibyte-l1-1-0.spec index 9db4f53..1c987d0 100644 --- a/dlls/api-ms-win-crt-multibyte-l1-1-0/api-ms-win-crt-multibyte-l1-1-0.spec +++ b/dlls/api-ms-win-crt-multibyte-l1-1-0/api-ms-win-crt-multibyte-l1-1-0.spec @@ -67,10 +67,10 @@ @ cdecl _mbbtype(long long) ucrtbase._mbbtype @ stub _mbbtype_l @ stub _mbcasemap -@ cdecl _mbccpy(ptr str) ucrtbase._mbccpy -@ stub _mbccpy_l -@ stub _mbccpy_s -@ stub _mbccpy_s_l +@ cdecl _mbccpy(ptr ptr) ucrtbase._mbccpy +@ cdecl _mbccpy_l(ptr ptr ptr) ucrtbase._mbccpy_l +@ cdecl _mbccpy_s(ptr long ptr ptr) ucrtbase._mbccpy_s +@ cdecl _mbccpy_s_l(ptr long ptr ptr ptr) ucrtbase._mbccpy_s_l @ cdecl _mbcjistojms(long) ucrtbase._mbcjistojms @ stub _mbcjistojms_l @ cdecl _mbcjmstojis(long) ucrtbase._mbcjmstojis diff --git a/dlls/crtdll/crtdll.spec b/dlls/crtdll/crtdll.spec index f8210b0..51729ce 100644 --- a/dlls/crtdll/crtdll.spec +++ b/dlls/crtdll/crtdll.spec @@ -188,7 +188,7 @@ @ cdecl _matherr(ptr) msvcrt._matherr @ cdecl _mbbtombc(long) msvcrt._mbbtombc @ cdecl _mbbtype(long long) msvcrt._mbbtype -@ cdecl _mbccpy(ptr str) msvcrt._mbccpy +@ cdecl _mbccpy(ptr ptr) msvcrt._mbccpy @ cdecl _mbcjistojms(long) msvcrt._mbcjistojms @ cdecl _mbcjmstojis(long) msvcrt._mbcjmstojis @ cdecl _mbclen(ptr) msvcrt._mbclen diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 5c8158a..ef49177 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1073,10 +1073,10 @@ @ cdecl _mbbtype(long long) @ stub _mbbtype_l # extern _mbcasemap -@ cdecl _mbccpy(ptr str) -@ stub _mbccpy_l -@ stub _mbccpy_s -@ stub _mbccpy_s_l +@ cdecl _mbccpy(ptr ptr) +@ cdecl _mbccpy_l(ptr ptr ptr) +@ cdecl _mbccpy_s(ptr long ptr ptr) +@ cdecl _mbccpy_s_l(ptr long ptr ptr ptr) @ cdecl _mbcjistojms(long) @ stub _mbcjistojms_l @ cdecl _mbcjmstojis(long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 2a7b777..be4d8c1 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1430,10 +1430,10 @@ @ cdecl _mbbtype(long long) @ stub _mbbtype_l # extern _mbcasemap -@ cdecl _mbccpy(ptr str) -@ stub _mbccpy_l -@ stub _mbccpy_s -@ stub _mbccpy_s_l +@ cdecl _mbccpy(ptr ptr) +@ cdecl _mbccpy_l(ptr ptr ptr) +@ cdecl _mbccpy_s(ptr long ptr ptr) +@ cdecl _mbccpy_s_l(ptr long ptr ptr ptr) @ cdecl _mbcjistojms(long) @ stub _mbcjistojms_l @ cdecl _mbcjmstojis(long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 725ecb2..60e0a32 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1440,10 +1440,10 @@ @ cdecl _mbbtype(long long) @ stub _mbbtype_l # extern _mbcasemap -@ cdecl _mbccpy(ptr str) -@ stub _mbccpy_l -@ stub _mbccpy_s -@ stub _mbccpy_s_l +@ cdecl _mbccpy(ptr ptr) +@ cdecl _mbccpy_l(ptr ptr ptr) +@ cdecl _mbccpy_s(ptr long ptr ptr) +@ cdecl _mbccpy_s_l(ptr long ptr ptr ptr) @ cdecl _mbcjistojms(long) @ stub _mbcjistojms_l @ cdecl _mbcjmstojis(long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index d8290dd..4d97db0 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -745,10 +745,10 @@ @ cdecl _mbbtype(long long) @ stub _mbbtype_l # extern _mbcasemap -@ cdecl _mbccpy(ptr str) -@ stub _mbccpy_l -@ stub _mbccpy_s -@ stub _mbccpy_s_l +@ cdecl _mbccpy(ptr ptr) +@ cdecl _mbccpy_l(ptr ptr ptr) +@ cdecl _mbccpy_s(ptr long ptr ptr) +@ cdecl _mbccpy_s_l(ptr long ptr ptr ptr) @ cdecl _mbcjistojms(long) @ stub _mbcjistojms_l @ cdecl _mbcjmstojis(long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index bfaf6f6..eccbf3c 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -723,10 +723,10 @@ @ cdecl _mbbtype(long long) @ stub _mbbtype_l # extern _mbcasemap -@ cdecl _mbccpy(ptr str) -@ stub _mbccpy_l -@ stub _mbccpy_s -@ stub _mbccpy_s_l +@ cdecl _mbccpy(ptr ptr) +@ cdecl _mbccpy_l(ptr ptr ptr) +@ cdecl _mbccpy_s(ptr long ptr ptr) +@ cdecl _mbccpy_s_l(ptr long ptr ptr ptr) @ cdecl _mbcjistojms(long) @ stub _mbcjistojms_l @ cdecl _mbcjmstojis(long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 12a7f5d..6e46b84 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -624,13 +624,63 @@ MSVCRT_size_t CDECL _mbsnlen(const unsigned char* str, MSVCRT_size_t maxsize) }
/********************************************************************* + * _mbccpy_s_l(MSVCRT.@) + */ +int CDECL _mbccpy_s_l(unsigned char* dest, MSVCRT_size_t maxsize, + int *copied, const unsigned char* src, MSVCRT__locale_t locale) +{ + if(copied) *copied = 0; + if(!MSVCRT_CHECK_PMT(dest != NULL && maxsize >= 1)) return MSVCRT_EINVAL; + dest[0] = 0; + if(!MSVCRT_CHECK_PMT(src != NULL)) return MSVCRT_EINVAL; + + if(_ismbblead_l(*src, locale)) { + if(!src[1]) { + if(copied) *copied = 1; + *MSVCRT__errno() = MSVCRT_EILSEQ; + return MSVCRT_EILSEQ; + } + + if(maxsize < 2) { + MSVCRT_INVALID_PMT("dst buffer is too small", MSVCRT_ERANGE); + return MSVCRT_ERANGE; + } + + *dest++ = *src++; + *dest = *src; + if(copied) *copied = 2; + }else { + *dest = *src; + if(copied) *copied = 1; + } + + return 0; +} + +/********************************************************************* * _mbccpy(MSVCRT.@) */ void CDECL _mbccpy(unsigned char* dest, const unsigned char* src) { - *dest = *src; - if(_ismbblead(*src)) - *++dest = *++src; /* MB char */ + _mbccpy_s_l(dest, 2, NULL, src, NULL); +} + +/********************************************************************* + * _mbccpy_l(MSVCRT.@) + */ +void CDECL _mbccpy_l(unsigned char* dest, const unsigned char* src, + MSVCRT__locale_t locale) +{ + _mbccpy_s_l(dest, 2, NULL, src, locale); +} + +/********************************************************************* + * _mbccpy_s(MSVCRT.@) + */ +int CDECL _mbccpy_s(unsigned char* dest, MSVCRT_size_t maxsize, + int *copied, const unsigned char* src) +{ + return _mbccpy_s_l(dest, maxsize, copied, src, NULL); }
/********************************************************************* diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 3c73ae2..50d051d 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -688,10 +688,10 @@ # stub _mbbtombc_l(long ptr) @ cdecl _mbbtype(long long) # extern _mbcasemap -@ cdecl _mbccpy(ptr str) -# stub _mbccpy_l(ptr str ptr) -# stub _mbccpy_s(ptr long ptr str) -# stub _mbccpy_s_l(ptr long ptr str ptr) +@ cdecl _mbccpy(ptr ptr) +@ cdecl _mbccpy_l(ptr ptr ptr) +@ cdecl _mbccpy_s(ptr long ptr ptr) +@ cdecl _mbccpy_s_l(ptr long ptr ptr ptr) @ cdecl _mbcjistojms (long) # stub _mbcjistojms_l(long ptr) @ cdecl _mbcjmstojis(long) diff --git a/dlls/msvcrt20/msvcrt20.spec b/dlls/msvcrt20/msvcrt20.spec index b77b2f3..6ced0fd 100644 --- a/dlls/msvcrt20/msvcrt20.spec +++ b/dlls/msvcrt20/msvcrt20.spec @@ -1015,7 +1015,7 @@ @ cdecl _matherr(ptr) msvcrt._matherr @ cdecl _mbbtombc(long) msvcrt._mbbtombc @ cdecl _mbbtype(long long) msvcrt._mbbtype -@ cdecl _mbccpy(ptr str) msvcrt._mbccpy +@ cdecl _mbccpy(ptr ptr) msvcrt._mbccpy @ cdecl _mbcjistojms(long) msvcrt._mbcjistojms @ cdecl _mbcjmstojis(long) msvcrt._mbcjmstojis @ cdecl _mbclen(ptr) msvcrt._mbclen diff --git a/dlls/msvcrt40/msvcrt40.spec b/dlls/msvcrt40/msvcrt40.spec index 5c10e67..e4ef8d7 100644 --- a/dlls/msvcrt40/msvcrt40.spec +++ b/dlls/msvcrt40/msvcrt40.spec @@ -1106,7 +1106,7 @@ @ cdecl _makepath(ptr str str str str) msvcrt._makepath @ cdecl _mbbtombc(long) msvcrt._mbbtombc @ cdecl _mbbtype(long long) msvcrt._mbbtype -@ cdecl _mbccpy(ptr str) msvcrt._mbccpy +@ cdecl _mbccpy(ptr ptr) msvcrt._mbccpy @ cdecl _mbcjistojms(long) msvcrt._mbcjistojms @ cdecl _mbcjmstojis(long) msvcrt._mbcjmstojis @ cdecl _mbclen(ptr) msvcrt._mbclen diff --git a/dlls/msvcrtd/msvcrtd.spec b/dlls/msvcrtd/msvcrtd.spec index 43b34c4..15066c3 100644 --- a/dlls/msvcrtd/msvcrtd.spec +++ b/dlls/msvcrtd/msvcrtd.spec @@ -396,7 +396,7 @@ @ cdecl _mbbtombc(long) msvcrt._mbbtombc @ cdecl _mbbtype(long long) msvcrt._mbbtype # extern _mbcasemap -@ cdecl _mbccpy(ptr str) msvcrt._mbccpy +@ cdecl _mbccpy(ptr ptr) msvcrt._mbccpy @ cdecl _mbcjistojms(long) msvcrt._mbcjistojms @ cdecl _mbcjmstojis(long) msvcrt._mbcjmstojis @ cdecl _mbclen(ptr) msvcrt._mbclen diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 6fc805d..2b0f6fa 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -586,10 +586,10 @@ @ cdecl _mbbtype(long long) @ stub _mbbtype_l @ stub _mbcasemap -@ cdecl _mbccpy(ptr str) -@ stub _mbccpy_l -@ stub _mbccpy_s -@ stub _mbccpy_s_l +@ cdecl _mbccpy(ptr ptr) +@ cdecl _mbccpy_l(ptr ptr ptr) +@ cdecl _mbccpy_s(ptr long ptr ptr) +@ cdecl _mbccpy_s_l(ptr long ptr ptr ptr) @ cdecl _mbcjistojms(long) @ stub _mbcjistojms_l @ cdecl _mbcjmstojis(long)