Mikolaj Zalewski : msvcrt:
Test that some functions depends on locale codepage,
not the one set by _setmbcp.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Aug 21 07:21:00 CDT 2007
Module: wine
Branch: master
Commit: 12ff6788b3f94b8c4f803c92c42b99adab623110
URL: http://source.winehq.org/git/wine.git/?a=commit;h=12ff6788b3f94b8c4f803c92c42b99adab623110
Author: Mikolaj Zalewski <mikolajz at google.com>
Date: Sun Aug 19 22:59:52 2007 -0700
msvcrt: Test that some functions depends on locale codepage, not the one set by _setmbcp.
---
dlls/msvcrt/mbcs.c | 83 +++++++++++++++++++++++++-------------------
dlls/msvcrt/tests/string.c | 13 +++++++
2 files changed, 60 insertions(+), 36 deletions(-)
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index 024c9b5..38c249b 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -360,21 +360,6 @@ unsigned int CDECL _mbclen(const unsigned char* str)
}
/*********************************************************************
- * mblen(MSVCRT.@)
- */
-int CDECL MSVCRT_mblen(const char* str, MSVCRT_size_t size)
-{
- if (str && *str && size)
- {
- if(MSVCRT___mb_cur_max == 1)
- return 1; /* ASCII CP */
-
- return !MSVCRT_isleadbyte(*str) ? 1 : (size>1 ? 2 : -1);
- }
- return 0;
-}
-
-/*********************************************************************
* _mbslen(MSVCRT.@)
*/
MSVCRT_size_t CDECL _mbslen(const unsigned char* str)
@@ -395,27 +380,6 @@ MSVCRT_size_t CDECL _mbslen(const unsigned char* str)
}
/*********************************************************************
- * _mbstrlen(MSVCRT.@)
- */
-MSVCRT_size_t CDECL _mbstrlen(const char* str)
-{
- if(MSVCRT___mb_cur_max > 1)
- {
- MSVCRT_size_t len = 0;
- while(*str)
- {
- /* FIXME: According to the documentation we are supposed to test for
- * multi-byte character validity. Whatever that means
- */
- str += MSVCRT_isleadbyte(*str) ? 2 : 1;
- len++;
- }
- return len;
- }
- return strlen(str); /* ASCII CP */
-}
-
-/*********************************************************************
* _mbccpy(MSVCRT.@)
*/
void CDECL _mbccpy(unsigned char* dest, const unsigned char* src)
@@ -1477,3 +1441,50 @@ unsigned char* CDECL _mbspbrk(const unsigned char* str, const unsigned char* acc
}
return NULL;
}
+
+
+/*
+ * Functions depending on locale codepage
+ */
+
+/*********************************************************************
+ * mblen(MSVCRT.@)
+ * REMARKS
+ * Unlike most of the multibyte string functions this function uses
+ * the locale codepage, not the codepage set by _setmbcp
+ */
+int CDECL MSVCRT_mblen(const char* str, MSVCRT_size_t size)
+{
+ if (str && *str && size)
+ {
+ if(MSVCRT___mb_cur_max == 1)
+ return 1; /* ASCII CP */
+
+ return !MSVCRT_isleadbyte(*str) ? 1 : (size>1 ? 2 : -1);
+ }
+ return 0;
+}
+
+/*********************************************************************
+ * _mbstrlen(MSVCRT.@)
+ * REMARKS
+ * Unlike most of the multibyte string functions this function uses
+ * the locale codepage, not the codepage set by _setmbcp
+ */
+MSVCRT_size_t CDECL _mbstrlen(const char* str)
+{
+ if(MSVCRT___mb_cur_max > 1)
+ {
+ MSVCRT_size_t len = 0;
+ while(*str)
+ {
+ /* FIXME: According to the documentation we are supposed to test for
+ * multi-byte character validity. Whatever that means
+ */
+ str += MSVCRT_isleadbyte(*str) ? 2 : 1;
+ len++;
+ }
+ return len;
+ }
+ return strlen(str); /* ASCII CP */
+}
diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c
index 209f1fa..4f82652 100644
--- a/dlls/msvcrt/tests/string.c
+++ b/dlls/msvcrt/tests/string.c
@@ -201,6 +201,19 @@ static void test_mbcp(void)
expect_eq(_mbslen(mbsonlylead), 0, int, "%d"); /* lead + NUL not counted as character */
expect_eq(_mbslen(mbstring), 4, int, "%d"); /* lead + invalid trail counted */
+
+ /* functions that depend on locale codepage, not mbcp.
+ * we hope the current locale to be SBCS because setlocale(LC_ALL, ".1252") seems not to work yet
+ * (as of Wine 0.9.43)
+ */
+ if (__mb_cur_max == 1)
+ {
+ expect_eq(mblen((char *)mbstring, 3), 1, int, "%x");
+ expect_eq(_mbstrlen((char *)mbstring2), 7, int, "%d");
+ }
+ else
+ skip("Current locale has double-byte charset - could leave to false positives\n");
+
_setmbcp(curr_mbcp);
}
More information about the wine-cvs
mailing list