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