Piotr Caban : msvcrt: Add _mbccpy_s_l implementation.
Alexandre Julliard
julliard at winehq.org
Fri Oct 6 14:58:53 CDT 2017
Module: wine
Branch: master
Commit: eb7d55761ed0ee9ee95b02036b4945cd2997f112
URL: http://source.winehq.org/git/wine.git/?a=commit;h=eb7d55761ed0ee9ee95b02036b4945cd2997f112
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri Oct 6 12:07:18 2017 +0200
msvcrt: Add _mbccpy_s_l implementation.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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)
More information about the wine-cvs
mailing list