43 ok( (needed > 0),
"returned %d with %u (expected '> 0')\n",
55 ok( (
len > 0),
"returned %d with %u and '%s' (expected '> 0')\n",
62 ok( (
len > 0),
"returned %d with %u and '%s' (expected '> 0')\n",
70 "returned %d with %u and '%s' (expected '0' with "
78 "returned %d with %u and '%s' (expected '0' with "
83 ok( (
len > 0),
"returned %d with %u (expected '> 0')\n",
89 "returned %d with %u (expected '0' with "
105 "WideCharToMultiByte returned %d with GLE=%u (expected 0 with ERROR_INVALID_PARAMETER)\n",
112 "WideCharToMultiByte returned %d with GLE=%u (expected 0 with ERROR_INVALID_PARAMETER)\n",
129 "WideCharToMultiByte(-2002): expected \"foobar\" got \"%s\"\n",
buf);
132 memset(bufW,
'x',
sizeof(bufW));
138 memset(bufW,
'x',
sizeof(bufW));
144#define LONGBUFLEN 100000
156 memset(bufA,
'x',
sizeof(bufA));
159 "WideCharToMultiByte(destlen -1): len=%d error=%x\n",
len,
GetLastError());
162 memset(bufW,
'x',
sizeof(bufW));
165 "MultiByteToWideChar(destlen -1): len=%d error=%x\n",
len,
GetLastError());
169 memset(bufA,
'x',
sizeof(bufA));
172 "WideCharToMultiByte(destlen -1000): len=%d error=%x\n",
len,
GetLastError());
175 memset(bufW,
'x',
sizeof(bufW));
178 "MultiByteToWideChar(destlen -1000): len=%d error=%x\n",
len,
GetLastError());
182 memset(bufA,
'x',
sizeof(bufA));
185 "WideCharToMultiByte(destlen INT_MAX): len=%d error=%x\n",
len,
GetLastError());
189 memset(bufA,
'x',
sizeof(bufA));
199 "WideCharToMultiByte(srclen %d, destlen INT_MAX): len %d error=%x\n",
LONGBUFLEN,
len, theError);
205 char c_string[] =
"Hello World";
206 size_t c_string_len =
sizeof(c_string);
207 WCHAR w_string[] = {
'H',
'e',
'l',
'l',
'o',
' ',
'W',
'o',
'r',
'l',
'd',0};
208 size_t w_string_len =
sizeof(w_string) /
sizeof(
WCHAR);
312 static const WCHAR strW[] = {
'j',
'u',
's',
't',
' ',
'a',
' ',
't',
'e',
's',
't',0};
313 static const char strA[] =
"just a test";
332 static const WCHAR wcs[] = {
'T',
'h', 1088,
'i', 0};
333 static const WCHAR dbwcs[] = {28953, 25152, 0};
334 static const WCHAR dbwcs2[] = {0x7bb8, 0x3d, 0xc813, 0xac00, 0xb77d, 0};
335 static const char default_char[] = {0xa3, 0xbf, 0};
340 ok(
mbc ==
'\xe4',
"mbc is %d\n",
mbc);
341 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
FALSE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
348 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
TRUE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
356 ok(
mbc ==
'\xf0',
"mbc is %d\n",
mbc);
357 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
FALSE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
366 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
FALSE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
370 skip(
"Codepage 1251 not available\n");
377 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
FALSE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
384 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
TRUE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
394 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
TRUE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
403 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
TRUE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
410 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
TRUE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
414 ok(!
strcmp(
mbs,
"\xf3\xe7\x3d\xa3\xbf\xa3\xbf\xa3\xbf"),
"mbs is %s\n",
mbs);
415 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
TRUE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
421 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
TRUE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
427 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
TRUE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
432 skip(
"Codepage 950 not available\n");
441 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
FALSE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
447 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
FALSE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
455 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
FALSE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
462 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
FALSE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
468 if(bUsedDefaultChar)
ok(*bUsedDefaultChar ==
FALSE,
"bUsedDefaultChar is %d\n", *bUsedDefaultChar);
476 int i,
len, expected_len;
478 static const BOOL directly_encodable_table[] =
480 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
481 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
482 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1,
483 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
484 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
485 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
486 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
487 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
489 static const char base64_encoding_table[] =
490 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
500 char expected_dst[16];
508 {0x4F60,0x597D,0x5417,0}, -1, output,
sizeof(output) - 1,
513 {0x4F60,0x597D,0x5417,0}, -2, output,
sizeof(output) - 1,
518 {0x4F60,0x597D,0x5417,0}, -1, output, 10,
523 {0x4F60,0x597D,0x5417,0}, -1, output, 11,
528 {0x4F60,0x597D,0x5417,0}, -1, output, 12,
533 {0x4F60,0x597D,0x5417,0}, -1,
NULL, 0,
538 {0x4F60,0x597D,0x5417,0}, -1, output, 0,
543 {
'h',
'e',
'l',
'l',
'o',0}, 2, output,
sizeof(output) - 1,
548 {0x4F60,0x597D,0x5417,0}, 2, output,
sizeof(output) - 1,
553 {0}, -1, output,
sizeof(output) - 1,
558 {
'h',
'e',
'l',
'l',
'o',0}, -1, output, 2,
563 {0x4F60,0x0001,0}, -1, output, 2,
568 {0x4F60,0x0001,0}, -1, output, 3,
573 {0x4F60,0x0001,0}, -1, output, 4,
578 {0x4F60,0}, -1, output, 1,
584 {0x4F60,0x597D,0x5417,0}, -1, output, 9,
590 {0x4F60,0}, -1, output, 4,
595 {
'+',0}, -1, output, 1,
601 for (
i = 0;
i <= 0xFFFF;
i++)
608 memset(output,
'#',
sizeof(output) - 1);
609 output[
sizeof(output) - 1] = 0;
619 else if (
i <= 0x7F && directly_encodable_table[
i])
630 base64_encoding_table[(
i & 0xFC00) >> 10],
631 base64_encoding_table[(
i & 0x03F0) >> 4],
632 base64_encoding_table[(
i & 0x000F) << 2]);
635 ok(
len == expected_len,
"i=0x%04x: expected len=%i, got len=%i\n",
i, expected_len,
len);
637 "i=0x%04x: expected output='%s', got output='%s'\n",
i,
expected, output);
638 ok(output[expected_len] ==
'#',
"i=0x%04x: expected output[%i]='#', got output[%i]=%i\n",
639 i, expected_len, expected_len, output[expected_len]);
644 for (
i = 0;
i <= 0xFFFF;
i++)
651 memset(output,
'#',
sizeof(output) - 1);
652 output[
sizeof(output) - 1] = 0;
662 else if (
i <= 0x7F && directly_encodable_table[
i])
673 base64_encoding_table[8 | ((
i & 0xC000) >> 14)],
674 base64_encoding_table[(
i & 0x3F00) >> 8],
675 base64_encoding_table[(
i & 0x00FC) >> 2],
676 base64_encoding_table[((
i & 0x0003) << 4) | 2]);
679 ok(
len == expected_len,
"i=0x%04x: expected len=%i, got len=%i\n",
i, expected_len,
len);
681 "i=0x%04x: expected output='%s', got output='%s'\n",
i,
expected, output);
682 ok(output[expected_len] ==
'#',
"i=0x%04x: expected output[%i]='#', got output[%i]=%i\n",
683 i, expected_len, expected_len, output[expected_len]);
688 memset(output,
'#',
sizeof(output) - 1);
689 output[
sizeof(output) - 1] = 0;
698 "tests[%i]: expected error=0x%x, got error=0x%x\n",
706 "tests[%i]: expected dst='%s', got dst='%s'\n",
709 "tests[%i]: expected dst[%i]='#', got dst[%i]=%i\n",
719 int i,
len, expected_len;
721 static const signed char base64_decoding_table[] =
723 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
724 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
725 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
726 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
727 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
728 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
729 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
730 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
741 WCHAR expected_dst[32];
749 "+T2BZfQ-", -1, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
750 {0x4F60,0x597D,0}, 3, 3
754 "+T2BZfQ-", -2, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
755 {0x4F60,0x597D,0}, 3, 3
759 "+T2BZfQ-", -1, output, 2,
760 {0x4F60,0x597D}, 2, 0
764 "+T2BZfQ-", -1, output, 3,
765 {0x4F60,0x597D,0}, 3, 3
769 "+T2BZfQ-", -1, output, 4,
770 {0x4F60,0x597D,0}, 3, 3
774 "+T2BZfQ-", -1,
NULL, 0,
779 "+T2BZfQ-", -1, output, 0,
784 "+T-+T-+T-hello", -1, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
785 {
'h',
'e',
'l',
'l',
'o',0}, 6, 6
789 "+T2-+T2-+T2-hello", -1, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
790 {
'h',
'e',
'l',
'l',
'o',0}, 6, 6
794 "+T2B-+T2B-+T2B-hello", -1, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
795 {0x4F60,0x4F60,0x4F60,
'h',
'e',
'l',
'l',
'o',0}, 9, 9
799 "+T2BZ-+T2BZ-+T2BZ-hello", -1, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
800 {0x4F60,0x4F60,0x4F60,
'h',
'e',
'l',
'l',
'o',0}, 9, 9
804 "+T2BZ-\x82\xFE", -1, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
805 {0x4F60,0x0082,0x00FE,0}, 4, 4
809 "a\0b", 4, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
814 "hello", 2, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
819 "+T2BZfQ-", 4, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
824 "hi+T2A-", 3, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
829 "+T2A-hi", 5, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
834 "hi+-", 3, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
839 "+-hi", 2, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
844 "+", 1, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
849 "", -1, output,
sizeof(output) /
sizeof(
WCHAR) - 1,
854 "hello", -1, output, 2,
859 "+T2BZfQ-", -1, output, 1,
865 for (
i = 0;
i < 256;
i++)
869 memset(output, 0x23,
sizeof(output) -
sizeof(
WCHAR));
870 output[
sizeof(output) /
sizeof(
WCHAR) - 1] = 0;
882 else if (
i <= 0x7F && base64_decoding_table[
i] != -1)
886 expected[0] = (base64_decoding_table[
i] << 10) | 0x03E0;
899 ok(
len == expected_len,
"i=0x%02x: expected len=%i, got len=%i\n",
i, expected_len,
len);
901 "i=0x%02x: expected output=%s, got output=%s\n",
907 for (
i = 0;
i < 256;
i++)
911 memset(output, 0x23,
sizeof(output) -
sizeof(
WCHAR));
912 output[
sizeof(output) /
sizeof(
WCHAR) - 1] = 0;
925 if (base64_decoding_table[
i] != -1)
929 expected[0] = 0x0400 | (base64_decoding_table[
i] << 4) | 0x000F;
952 ok(
len == expected_len,
"i=0x%02x: expected len=%i, got len=%i\n",
i, expected_len,
len);
954 "i=0x%02x: expected output=%s, got output=%s\n",
960 memset(output, 0x23,
sizeof(output) -
sizeof(
WCHAR));
961 output[
sizeof(output) /
sizeof(
WCHAR) - 1] = 0;
972 "tests[%i]: expected error=0x%x, got error=0x%x\n",
980 "tests[%i]: expected dst=%s, got dst=%s\n",
989 static const struct tag_testset {
994 { 874,
"\xdd",
TRUE },
995 { 932,
"\xfe",
TRUE },
996 { 932,
"\x80",
FALSE },
997 { 936,
"\xff",
TRUE },
998 { 949,
"\xff",
TRUE },
999 { 950,
"\xff",
TRUE },
1000 { 1252,
"\x90",
FALSE },
1001 { 1253,
"\xaa",
TRUE },
1002 { 1255,
"\xff",
TRUE },
1003 { 1257,
"\xa5",
TRUE },
1007 for (
i = 0;
i < (
sizeof(testset) /
sizeof(testset[0]));
i++) {
1017 if (testset[
i].is_error) {
1019 "ret is %d, GetLastError is %u (cp %d)\n",
1024 "ret is %d, GetLastError is %u (cp %d)\n",
1032 "ret is %d, GetLastError is %u (cp %d)\n",
1046 BOOL islead, islead_acp;
1065 struct test_islead_nocp {
1068 } isleads_nocp[] = {
1080 struct test_islead {
1085 { ENGLISH, 0x00,
FALSE },
1086 { ENGLISH, 0x81,
FALSE },
1087 { ENGLISH, 0xa0,
FALSE },
1088 { ENGLISH, 0xe0,
FALSE },
1090 { RUSSIAN, 0x00,
FALSE },
1091 { RUSSIAN, 0x81,
FALSE },
1092 { RUSSIAN, 0xa0,
FALSE },
1093 { RUSSIAN, 0xe0,
FALSE },
1095 { JAPANESE, 0x00,
FALSE },
1096 { JAPANESE, 0x81,
TRUE },
1097 { JAPANESE, 0xa0,
FALSE },
1098 { JAPANESE, 0xe0,
TRUE },
1100 { CHINESE, 0x00,
FALSE },
1101 { CHINESE, 0x81,
TRUE },
1102 { CHINESE, 0xa0,
TRUE },
1103 { CHINESE, 0xe0,
TRUE },
1109 for (
i = 0;
i <
sizeof(lcids)/
sizeof(lcids[0]);
i++)
1115 ok(
cp == lcids[
i].threadcp,
"wrong codepage %u for lcid %04x, should be %u\n",
cp, lcids[
i].threadcp,
cp);
1119 memset(&cpi, 0,
sizeof(cpi));
1121 ok(
ret,
"GetCPInfoExA failed for lcid %04x, error %d\n", lcids[
i].lcid,
GetLastError());
1122 ok(cpi.
CodePage == acp,
"wrong codepage %u for lcid %04x, should be %u\n", cpi.
CodePage, lcids[
i].lcid, acp);
1126 ok(
num == 7,
"ret is %d (%04x)\n",
num, lcids[
i].lcid);
1130 ok(
num == 7,
"ret is %d (%04x)\n",
num, lcids[
i].lcid);
1134 memset(&cpi, 0,
sizeof(cpi));
1136 ok(
ret,
"GetCPInfoExA failed for lcid %04x, error %d\n", lcids[
i].lcid,
GetLastError());
1137 if (lcids[
i].threadcp)
1138 ok(cpi.
CodePage == lcids[
i].threadcp,
"wrong codepage %u for lcid %04x, should be %u\n",
1139 cpi.
CodePage, lcids[
i].lcid, lcids[
i].threadcp);
1141 ok(cpi.
CodePage == acp,
"wrong codepage %u for lcid %04x, should be %u\n",
1146 ok(
num == 7,
"ret is %d (%04x)\n",
num, lcids[
i].lcid);
1150 ok(
num == 7,
"ret is %d (%04x)\n",
num, lcids[
i].lcid);
1154 for (
i = 0;
i <
sizeof(isleads_nocp)/
sizeof(isleads_nocp[0]);
i++)
1161 ok(islead == islead_acp,
"wrong islead %i for test char %x in lcid %04x. should be %i\n",
1162 islead, isleads_nocp[
i].testchar, isleads_nocp[
i].lcid, islead_acp);
1166 for (
i = 0;
i <
sizeof(isleads)/
sizeof(isleads[0]);
i++)
1171 ok(islead == isleads[
i].islead,
"wrong islead %i for test char %x in lcid %04x. should be %i\n",
1172 islead, isleads[
i].testchar, isleads[
i].lcid, isleads[
i].islead);
1182 unsigned char buf[] = {0xbf, 0xb4, 0xc7,
'\0',
'x'};
1199 memset(wbuf, 0xff,
sizeof(wbuf));
1204 ok(count2 == 1,
"%04x: returned %d (expected 1)\n",
flags[
i], count2);
1205 ok(wbuf[0] == 0x770b,
"%04x: returned %04x (expected 770b)\n",
flags[
i], wbuf[0]);
1206 ok(wbuf[1] == 0xffff,
"%04x: returned %04x (expected ffff)\n",
flags[
i], wbuf[1]);
1211 memset(wbuf, 0xff,
sizeof(wbuf));
1219 ok(count2 == 0,
"%04x: returned %d (expected 0)\n",
flags[
i], count2);
1226 ok(count2 == 2,
"%04x: returned %d (expected 2)\n",
flags[
i], count2);
1227 ok(wbuf[0] == 0x770b,
"%04x: returned %04x (expected 770b)\n",
flags[
i], wbuf[0]);
1228 ok(wbuf[1] == 0x003f ||
broken(wbuf[1] == 0),
1229 "%04x: wrong wide char: %04x\n",
flags[
i], wbuf[1]);
1230 ok(wbuf[2] == 0xffff,
"%04x: returned %04x (expected ffff)\n",
flags[
i], wbuf[2]);
1237 memset(wbuf, 0xff,
sizeof(wbuf));
1251 WCHAR wbuf_ok[] = { 0x770b, 0x003f,
'\0', 0xffff };
1252 WCHAR wbuf_broken[] = { 0x770b,
'\0', 0xffff, 0xffff };
1254 "%04x: returned %d (expected 3)\n",
flags[
i],
count);
1255 ok(!
memcmp(wbuf, wbuf_ok,
sizeof(wbuf_ok))
1256 ||
broken(!
memcmp(wbuf, wbuf_broken,
sizeof(wbuf_broken))),
1257 "%04x: returned %04x %04x %04x %04x (expected %04x %04x %04x %04x)\n",
1258 flags[
i], wbuf[0], wbuf[1], wbuf[2], wbuf[3],
1259 wbuf_ok[0], wbuf_ok[1], wbuf_ok[2], wbuf_ok[3]);
1266 memset(wbuf, 0xff,
sizeof(wbuf));
1280 WCHAR wbuf_ok[] = { 0x770b, 0x003f,
'\0',
'x', 0xffff };
1281 WCHAR wbuf_broken[] = { 0x770b,
'\0',
'x', 0xffff, 0xffff };
1283 "%04x: returned %d (expected 4)\n",
flags[
i],
count);
1284 ok(!
memcmp(wbuf, wbuf_ok,
sizeof(wbuf_ok))
1285 ||
broken(!
memcmp(wbuf, wbuf_broken,
sizeof(wbuf_broken))),
1286 "%04x: returned %04x %04x %04x %04x %04x (expected %04x %04x %04x %04x %04x)\n",
1287 flags[
i], wbuf[0], wbuf[1], wbuf[2], wbuf[3], wbuf[4],
1288 wbuf_ok[0], wbuf_ok[1], wbuf_ok[2], wbuf_ok[3], wbuf_ok[4]);
1295 BOOL bUsedDefaultChar;
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
char * strcpy(char *DstString, const char *SrcString)
static void test_threadcp(void)
static const WCHAR foobarW[]
static void test_other_invalid_parameters(void)
static void test_undefined_byte_char(void)
static void test_negative_source_length(void)
static const char foobarA[]
static void test_null_source(void)
static void test_utf7_decoding(void)
static void test_destination_buffer(void)
static void test_negative_dest_length(void)
static void test_utf7_encoding(void)
static void test_overlapped_buffers(void)
static void test_dbcs_to_widechar(void)
static void test_string_conversion(LPBOOL bUsedDefaultChar)
#define ERROR_INSUFFICIENT_BUFFER
const char * wine_dbgstr_wn(const WCHAR *str, int n)
#define ERROR_INVALID_PARAMETER
#define HeapFree(x, y, z)
#define WideCharToMultiByte
#define MultiByteToWideChar
LCID WINAPI GetThreadLocale(void)
BOOL WINAPI SetThreadLocale(LCID lcid)
BOOL WINAPI IsValidCodePage(UINT codepage)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
INT WINAPI GetLocaleInfoA(LCID lcid, LCTYPE lctype, LPSTR buffer, INT len)
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
BOOL WINAPI IsDBCSLeadByteEx(UINT codepage, BYTE testchar)
BOOL WINAPI GetCPInfoExA(UINT codepage, DWORD dwFlags, LPCPINFOEXA cpinfo)
GLuint GLuint GLsizei count
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum GLenum GLenum input
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define WC_COMPOSITECHECK
#define MB_ERR_INVALID_CHARS
#define memcpy(s1, s2, n)
static struct test_info tests[]
#define sprintf(buf, format,...)
static DWORD LPDWORD LPCSTR DWORD srclen
#define MAKELCID(lgid, srtid)
#define SUBLANG_JAPANESE_JAPAN
#define SUBLANG_HINDI_INDIA
#define SUBLANG_RUSSIAN_RUSSIA
#define SUBLANG_CHINESE_SIMPLIFIED
#define SUBLANG_GEORGIAN_GEORGIA
#define SUBLANG_ENGLISH_US
DWORD WINAPI GetLastError(void)
#define ERROR_NO_UNICODE_TRANSLATION
#define ERROR_INVALID_FLAGS
#define LOCALE_IDEFAULTANSICODEPAGE