Alexandre Julliard : msvcrt/tests: Load __mb_cur_max and _mbctype dynamically since they may not be available to link against .
Alexandre Julliard
julliard at winehq.org
Fri Dec 12 07:04:08 CST 2008
Module: wine
Branch: master
Commit: 82bd6f1e100745e36b394379a143548e7d90a931
URL: http://source.winehq.org/git/wine.git/?a=commit;h=82bd6f1e100745e36b394379a143548e7d90a931
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Dec 11 22:53:36 2008 +0100
msvcrt/tests: Load __mb_cur_max and _mbctype dynamically since they may not be available to link against.
---
dlls/msvcrt/tests/string.c | 40 ++++++++++++++++++++++------------------
1 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c
index 5247515..fdd2580 100644
--- a/dlls/msvcrt/tests/string.c
+++ b/dlls/msvcrt/tests/string.c
@@ -51,6 +51,8 @@ static int (*pstrcpy_s)(char *dst, size_t len, const char *src);
static int (*pstrcat_s)(char *dst, size_t len, const char *src);
static int (*p_mbsnbcpy_s)(unsigned char * dst, size_t size, const unsigned char * src, size_t count);
static int (*p_wcscpy_s)(wchar_t *wcDest, size_t size, const wchar_t *wcSrc);
+static int *p__mb_cur_max;
+static unsigned char *p_mbctype;
#define SETNOFAIL(x,y) x = (void*)GetProcAddress(hMsvcrt,y)
#define SET(x,y) SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y)
@@ -111,14 +113,14 @@ static void test_codepage(int cp)
ok(_setmbcp(cp) == 0, "Couldn't set mbcp\n");
- prev = _mbctype[0];
+ prev = p_mbctype[0];
printf("static int result_cp_%d_mbctype[] = { ", cp);
for (i = 1; i < 257; i++)
{
- if (_mbctype[i] != prev)
+ if (p_mbctype[i] != prev)
{
printf("0x%x,%d, ", prev, count);
- prev = _mbctype[i];
+ prev = p_mbctype[i];
count = 1;
}
else
@@ -160,11 +162,11 @@ void test_cp_table(int cp, int *result, int *todo)
}
if (i == *todo + 1)
{
- todo_wine ok(_mbctype[i] == curr, "CP%d: Mismatch in ctype for character %d - %d instead of %d\n", cp, i-1, _mbctype[i], curr);
+ todo_wine ok(p_mbctype[i] == curr, "CP%d: Mismatch in ctype for character %d - %d instead of %d\n", cp, i-1, p_mbctype[i], curr);
todo++;
}
else
- ok(_mbctype[i] == curr, "CP%d: Mismatch in ctype for character %d - %d instead of %d\n", cp, i-1, _mbctype[i], curr);
+ ok(p_mbctype[i] == curr, "CP%d: Mismatch in ctype for character %d - %d instead of %d\n", cp, i-1, p_mbctype[i], curr);
count--;
}
}
@@ -176,7 +178,7 @@ void test_cp_table(int cp, int *result, int *todo)
static void test_mbcp(void)
{
- int mb_orig_max = __mb_cur_max;
+ int mb_orig_max = *p__mb_cur_max;
int curr_mbcp = _getmbcp();
unsigned char *mbstring = (unsigned char *)"\xb0\xb1\xb2 \xb3\xb4 \xb5"; /* incorrect string */
unsigned char *mbstring2 = (unsigned char *)"\xb0\xb1\xb2\xb3Q\xb4\xb5"; /* correct string */
@@ -190,17 +192,17 @@ static void test_mbcp(void)
* between versions of Windows. Also Windows 9x seems to ignore the codepage and always uses
* CP1252 (or the ACP?) so we test only a few ASCII characters */
_setmbcp(1252);
- expect_eq(_mbctype[10], 0, char, "%x");
- expect_eq(_mbctype[50], 0, char, "%x");
- expect_eq(_mbctype[66], _SBUP, char, "%x");
- expect_eq(_mbctype[100], _SBLOW, char, "%x");
- expect_eq(_mbctype[128], 0, char, "%x");
+ expect_eq(p_mbctype[10], 0, char, "%x");
+ expect_eq(p_mbctype[50], 0, char, "%x");
+ expect_eq(p_mbctype[66], _SBUP, char, "%x");
+ expect_eq(p_mbctype[100], _SBLOW, char, "%x");
+ expect_eq(p_mbctype[128], 0, char, "%x");
_setmbcp(1250);
- expect_eq(_mbctype[10], 0, char, "%x");
- expect_eq(_mbctype[50], 0, char, "%x");
- expect_eq(_mbctype[66], _SBUP, char, "%x");
- expect_eq(_mbctype[100], _SBLOW, char, "%x");
- expect_eq(_mbctype[128], 0, char, "%x");
+ expect_eq(p_mbctype[10], 0, char, "%x");
+ expect_eq(p_mbctype[50], 0, char, "%x");
+ expect_eq(p_mbctype[66], _SBUP, char, "%x");
+ expect_eq(p_mbctype[100], _SBLOW, char, "%x");
+ expect_eq(p_mbctype[128], 0, char, "%x");
/* double byte code pages */
test_codepage_todo(932, todo_cp_932);
@@ -209,7 +211,7 @@ static void test_mbcp(void)
test_codepage(950);
_setmbcp(936);
- ok(__mb_cur_max == mb_orig_max, "__mb_cur_max shouldn't be updated (is %d != %d)\n", __mb_cur_max, mb_orig_max);
+ ok(*p__mb_cur_max == mb_orig_max, "__mb_cur_max shouldn't be updated (is %d != %d)\n", *p__mb_cur_max, mb_orig_max);
ok(_ismbblead('\354'), "\354 should be a lead byte\n");
ok(_ismbblead(' ') == FALSE, "' ' should not be a lead byte\n");
ok(_ismbblead(0x1234b0), "0x1234b0 should not be a lead byte\n");
@@ -346,7 +348,7 @@ static void test_mbcp(void)
* 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)
+ if (*p__mb_cur_max == 1)
{
expect_eq(mblen((char *)mbstring, 3), 1, int, "%x");
expect_eq(_mbstrlen((char *)mbstring2), 7, int, "%d");
@@ -619,6 +621,8 @@ START_TEST(string)
ok(hMsvcrt != 0, "GetModuleHandleA failed\n");
SET(pmemcpy,"memcpy");
SET(pmemcmp,"memcmp");
+ SET(p_mbctype,"_mbctype");
+ SET(p__mb_cur_max,"__mb_cur_max");
pstrcpy_s = (void *)GetProcAddress( hMsvcrt,"strcpy_s" );
pstrcat_s = (void *)GetProcAddress( hMsvcrt,"strcat_s" );
p_mbsnbcpy_s = (void *)GetProcAddress( hMsvcrt,"_mbsnbcpy_s" );
More information about the wine-cvs
mailing list