Akihiro Sagawa : msvcrt: Add _mbctohira implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 16 10:34:24 CDT 2015


Module: wine
Branch: master
Commit: b6ab2b626820eebaf140cc29fbeb6637962457f1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b6ab2b626820eebaf140cc29fbeb6637962457f1

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Mon Mar 16 21:48:46 2015 +0900

msvcrt: Add _mbctohira implementation.

---

 dlls/msvcr100/msvcr100.spec |  2 +-
 dlls/msvcr110/msvcr110.spec |  2 +-
 dlls/msvcr120/msvcr120.spec |  2 +-
 dlls/msvcr70/msvcr70.spec   |  2 +-
 dlls/msvcr71/msvcr71.spec   |  2 +-
 dlls/msvcr80/msvcr80.spec   |  2 +-
 dlls/msvcr90/msvcr90.spec   |  2 +-
 dlls/msvcrt/mbcs.c          | 12 ++++++++++++
 dlls/msvcrt/msvcrt.spec     |  2 +-
 dlls/msvcrt/tests/string.c  | 31 +++++++++++++++++++++++++++++++
 10 files changed, 51 insertions(+), 8 deletions(-)

diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index a7df4b5..7ca7f8c 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1082,7 +1082,7 @@
 @ stub _mbcjmstojis_l
 @ cdecl _mbclen(ptr)
 @ stub _mbclen_l
-@ stub _mbctohira(long)
+@ cdecl _mbctohira(long)
 @ stub _mbctohira_l
 @ stub _mbctokata(long)
 @ stub _mbctokata_l
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index f696aaf..d4459a6 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -1440,7 +1440,7 @@
 @ stub _mbcjmstojis_l
 @ cdecl _mbclen(ptr)
 @ stub _mbclen_l
-@ stub _mbctohira(long)
+@ cdecl _mbctohira(long)
 @ stub _mbctohira_l
 @ stub _mbctokata(long)
 @ stub _mbctokata_l
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index 58e708d..03fff1a 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -1448,7 +1448,7 @@
 @ stub _mbcjmstojis_l
 @ cdecl _mbclen(ptr)
 @ stub _mbclen_l
-@ stub _mbctohira(long)
+@ cdecl _mbctohira(long)
 @ stub _mbctohira_l
 @ stub _mbctokata(long)
 @ stub _mbctokata_l
diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec
index fb47e78..9881eca 100644
--- a/dlls/msvcr70/msvcr70.spec
+++ b/dlls/msvcr70/msvcr70.spec
@@ -423,7 +423,7 @@
 @ cdecl _mbcjistojms(long)
 @ cdecl _mbcjmstojis(long)
 @ cdecl _mbclen(ptr)
-@ stub _mbctohira(long)
+@ cdecl _mbctohira(long)
 @ stub _mbctokata(long)
 @ cdecl _mbctolower(long)
 @ cdecl _mbctombb(long)
diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec
index 8b868db..6e1d309 100644
--- a/dlls/msvcr71/msvcr71.spec
+++ b/dlls/msvcr71/msvcr71.spec
@@ -418,7 +418,7 @@
 @ cdecl _mbcjistojms(long)
 @ cdecl _mbcjmstojis(long)
 @ cdecl _mbclen(ptr)
-@ stub _mbctohira(long)
+@ cdecl _mbctohira(long)
 @ stub _mbctokata(long)
 @ cdecl _mbctolower(long)
 @ cdecl _mbctombb(long)
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 68e7097..5709319 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -755,7 +755,7 @@
 @ stub _mbcjmstojis_l
 @ cdecl _mbclen(ptr)
 @ stub _mbclen_l
-@ stub _mbctohira(long)
+@ cdecl _mbctohira(long)
 @ stub _mbctohira_l
 @ stub _mbctokata(long)
 @ stub _mbctokata_l
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 2d88683..167e0f9 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -732,7 +732,7 @@
 @ stub _mbcjmstojis_l
 @ cdecl _mbclen(ptr)
 @ stub _mbclen_l
-@ stub _mbctohira(long)
+@ cdecl _mbctohira(long)
 @ stub _mbctohira_l
 @ stub _mbctokata(long)
 @ stub _mbctokata_l
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index ba88ff2..b76157f 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -2276,3 +2276,15 @@ MSVCRT_size_t CDECL MSVCRT_mbsrtowcs(MSVCRT_wchar_t *wcstr,
 
     return ret;
 }
+
+/*********************************************************************
+ *		_mbctohira (MSVCRT.@)
+ *
+ *              Converts a sjis katakana character to hiragana.
+ */
+unsigned int CDECL _mbctohira(unsigned int c)
+{
+    if(_ismbckata(c) && c <= 0x8393)
+        return (c - 0x8340 - (c >= 0x837f ? 1 : 0)) + 0x829f;
+    return c;
+}
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 6d9b4c3..ea7dd90 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -698,7 +698,7 @@
 # stub _mbcjmstojis_l(long ptr)
 @ cdecl _mbclen(ptr)
 # stub _mbclen_l(ptr ptr)
-@ stub _mbctohira(long)
+@ cdecl _mbctohira(long)
 # stub _mbctohira_l(long ptr)
 @ stub _mbctokata(long)
 # stub _mbctokata_l(long ptr)
diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c
index 4388085..4e48cd2 100644
--- a/dlls/msvcrt/tests/string.c
+++ b/dlls/msvcrt/tests/string.c
@@ -1142,6 +1142,36 @@ static void test_mbcjmsjis(void)
     _setmbcp(prev_cp);
 }
 
+static void test_mbctohira(void)
+{
+    static const unsigned int mbchira_932[][2] = {
+        {0x8152, 0x8152}, {0x8153, 0x8153}, {0x8154, 0x8154}, {0x8155, 0x8155},
+        {0x82a0, 0x82a0}, {0x833f, 0x833f}, {0x8340, 0x829f}, {0x837e, 0x82dd},
+        {0x837f, 0x837f}, {0x8380, 0x82de}, {0x8393, 0x82f1}, {0x8394, 0x8394},
+        {0x8396, 0x8396}, {0x8397, 0x8397},
+        {0xa5, 0xa5}, {0xb0, 0xb0}, {0xdd, 0xdd} };
+    unsigned int i;
+    unsigned int prev_cp = _getmbcp();
+
+    _setmbcp(_MB_CP_SBCS);
+    for (i = 0; i < sizeof(mbchira_932)/sizeof(mbchira_932[0]); i++)
+    {
+        int ret, exp = mbchira_932[i][0];
+        ret = _mbctohira(mbchira_932[i][0]);
+        ok(ret == exp, "Expected 0x%x, got 0x%x\n", exp, ret);
+    }
+
+    _setmbcp(932);
+    for (i = 0; i < sizeof(mbchira_932)/sizeof(mbchira_932[0]); i++)
+    {
+        unsigned int ret, exp;
+        ret = _mbctohira(mbchira_932[i][0]);
+        exp = mbchira_932[i][1];
+        ok(ret == exp, "Expected 0x%x, got 0x%x\n", exp, ret);
+    }
+    _setmbcp(prev_cp);
+}
+
 static void test_mbbtombc(void)
 {
     static const unsigned int mbbmbc[][2] = {
@@ -2888,6 +2918,7 @@ START_TEST(string)
     test__mbscpy_s();
     test_mbcjisjms();
     test_mbcjmsjis();
+    test_mbctohira();
     test_mbbtombc();
     test_mbctombb();
     test_ismbckata();




More information about the wine-cvs mailing list