27#define NO_SHLWAPI_PATH
29#define NO_SHLWAPI_STREAM
33#define expect_eq(expr, val, type, fmt) do { \
35 ok(ret == val, "Unexpected value of '" #expr "': " #fmt " instead of " #val "\n", ret); \
38#define expect_eq2(expr, val1, val2, type, fmt) do { \
40 ok(ret == val1 || ret == val2, "Unexpected value of '" #expr "': " #fmt " instead of " #val1 " or " #val2 "\n", ret); \
84 {
"1099", 1099, 1099, 1099 },
86 {
"+88987", 0, 88987, 88987 },
87 {
"012", 12, 12, 12 },
88 {
"-55", -55, -55, -55 },
90 {
"0x44ff", 0, 0, 0x44ff },
91 {
"0x2bdc546291f4b1", 0, 0, ((
LONGLONG)0x2bdc54 << 32) | 0x6291f4b1 },
92 {
"+0x44f4", 0, 0, 0x44f4 },
93 {
"-0x44fd", 0, 0, 0x44fd },
94 {
"+ 88987", 0, 0, 0,
TRUE },
96 {
"- 55", 0, 0, 0,
TRUE },
97 {
"- 0", 0, 0, 0,
TRUE },
98 {
"+ 0x44f4", 0, 0, 0,
TRUE },
99 {
"--0x44fd", 0, 0, 0,
TRUE },
100 {
" 1999", 0, 1999, 1999 },
101 {
" +88987", 0, 88987, 88987 },
102 {
" 012", 0, 12, 12 },
103 {
" -55", 0, -55, -55 },
104 {
" 0x44ff", 0, 0, 0x44ff },
105 {
" +0x44f4", 0, 0, 0x44f4 },
106 {
" -0x44fd", 0, 0, 0x44fd },
107 {
"\t\n +3", 0, 3, 3 },
108 {
"\v+4", 0, 0, 0,
TRUE },
109 {
"\f+5", 0, 0, 0,
TRUE },
110 {
"\r+6", 0, 0, 0,
TRUE },
126 { -1023,
"-1023 bytes",
"0 KB"},
127 { -24,
"-24 bytes",
"0 KB"},
128 { 309,
"309 bytes",
"1 KB"},
129 { 10191,
"9.95 KB",
"10 KB"},
130 { 100353,
"98.0 KB",
"99 KB"},
131 { 1022286,
"998 KB",
"999 KB"},
132 { 1046862,
"0.99 MB",
"1,023 KB", 1,
"1023 KB"},
133 { 1048574619,
"999 MB",
"1,023,999 KB", 1,
"1023999 KB"},
134 { 1073741775,
"0.99 GB",
"1,048,576 KB", 1,
"1048576 KB"},
135 { ((
LONGLONG)0x000000f9 << 32) | 0xfffff94e,
"999 GB",
"1,048,575,999 KB", 1,
"1048575999 KB"},
136 { ((
LONGLONG)0x000000ff << 32) | 0xfffffa9b,
"0.99 TB",
"1,073,741,823 KB", 1,
"1073741823 KB"},
137 { ((
LONGLONG)0x0003e7ff << 32) | 0xfffffa9b,
"999 TB",
"1,073,741,823,999 KB", 1,
"4294967295 KB"},
138 { ((
LONGLONG)0x0003ffff << 32) | 0xfffffbe8,
"0.99 PB",
"1,099,511,627,775 KB", 1,
"4294967295 KB"},
139 { ((
LONGLONG)0x0f9fffff << 32) | 0xfffffd35,
"999 PB",
"1,099,511,627,776,000 KB", 1,
"0 KB"},
140 { ((
LONGLONG)0x0fffffff << 32) | 0xfffffa9b,
"0.99 EB",
"1,125,899,906,842,623 KB", 1,
"4294967295 KB"},
162 { 1000000, 1,
" 10 min" },
163 { 1000000, 2,
" 16 min" },
164 { 1000000, 3,
" 16 min 40 sec" },
165 { 1000000, 4,
" 16 min 40 sec" },
166 { 1000000, 5,
" 16 min 40 sec" },
167 { 1000000, 6,
" 16 min 40 sec" },
168 { 1000000, 7,
" 16 min 40 sec" },
170 { 1999999, 1,
" 30 min" },
171 { 1999999, 2,
" 33 min" },
172 { 1999999, 3,
" 33 min 20 sec" },
173 { 1999999, 4,
" 33 min 20 sec" },
174 { 1999999, 5,
" 33 min 20 sec" },
175 { 1999999, 6,
" 33 min 20 sec" },
176 { 1999999, 7,
" 33 min 20 sec" },
178 { 3999997, 1,
" 1 hr" },
179 { 3999997, 2,
" 1 hr 6 min" },
180 { 3999997, 3,
" 1 hr 6 min 40 sec" },
181 { 3999997, 4,
" 1 hr 6 min 40 sec" },
182 { 3999997, 5,
" 1 hr 6 min 40 sec" },
183 { 3999997, 6,
" 1 hr 6 min 40 sec" },
184 { 3999997, 7,
" 1 hr 6 min 40 sec" },
186 { 149999851, 7,
" 41 hr 40 min 0 sec" },
187 { 150999850, 1,
" 40 hr" },
188 { 150999850, 2,
" 41 hr" },
189 { 150999850, 3,
" 41 hr 50 min" },
190 { 150999850, 4,
" 41 hr 56 min" },
191 { 150999850, 5,
" 41 hr 56 min 40 sec" },
192 { 150999850, 6,
" 41 hr 56 min 40 sec" },
193 { 150999850, 7,
" 41 hr 56 min 40 sec" },
195 { 493999507, 1,
" 100 hr" },
196 { 493999507, 2,
" 130 hr" },
197 { 493999507, 3,
" 137 hr" },
198 { 493999507, 4,
" 137 hr 10 min" },
199 { 493999507, 5,
" 137 hr 13 min" },
200 { 493999507, 6,
" 137 hr 13 min 20 sec" },
201 { 493999507, 7,
" 137 hr 13 min 20 sec" },
222 if (pGetThreadUILanguage)
224 if (pGetUserDefaultUILanguage)
275 string[16384] =
'\0';
286 ok(!
result,
"found char not in the string\n");
313 ok(!
result,
"found char not in the string\n");
340 ok(!
result,
"found char not in the string\n");
365 ok(!
result,
"found char not in the string\n");
371 ok(!
result,
"found char not in the string\n");
418 lpRes =
StrCpyW(szBuff, szSrc);
419 ok(!
StrCmpW(szSrc, szBuff) && lpRes == szBuff,
"Copied string %s wrong\n",
result->byte_size_64);
438 static const WCHAR string[] = {
'T',
'e',
's',
't',
'i',
'n',
'g',
' ',
'S',
't',
'r',
'i',
'n',
'g',0};
443 win_skip(
"StrChrNW not available\n");
447 p = pStrChrNW(
string,
't',10);
448 ok(*
p==
't',
"Found wrong 't'\n");
449 ok(*(
p+1)==
'i',
"next should be 'i'\n");
451 p = pStrChrNW(
string,
'S',10);
452 ok(*
p==
'S',
"Found wrong 'S'\n");
454 p = pStrChrNW(
string,
'r',10);
455 ok(
p==
NULL,
"Should not have found 'r'\n");
466 ok(return_val ==
result->str_to_int,
"converted '%s' wrong (%d)\n",
467 result->string, return_val);
482 ok(return_val ==
result->str_to_int,
"converted '%s' wrong (%d)\n",
483 result->string, return_val);
499 ok(!bRet,
"Got %d instead of failure for '%s'\n", return_val,
result->string);
501 ok(bRet,
"Failed for '%s'\n",
result->string);
503 ok(return_val == (
int)
result->str_to_int64_ex,
"converted '%s' wrong (%d)\n",
504 result->string, return_val);
514 ok(!bRet,
"Got %d instead of failure for '%s'\n", return_val,
result->string);
516 ok(bRet,
"Failed for '%s'\n",
result->string);
518 ok(return_val == (
int)
result->str_to_int64_hex,
"converted '%s' wrong (%d)\n",
519 result->string, return_val);
537 ok(!bRet,
"Got %d instead of failure for '%s'\n", return_val,
result->string);
539 ok(bRet,
"Failed for '%s'\n",
result->string);
541 ok(return_val == (
int)
result->str_to_int64_ex,
"converted '%s' wrong (%d)\n",
542 result->string, return_val);
553 ok(!bRet,
"Got %d instead of failure for '%s'\n", return_val,
result->string);
555 ok(bRet,
"Failed for '%s'\n",
result->string);
557 ok(return_val == (
int)
result->str_to_int64_hex,
"converted '%s' wrong (%d)\n",
558 result->string, return_val);
564 ok( !bRet,
"Returned %d for Unicode digits\n", return_val );
566 ok( !bRet,
"Returned %d for Unicode digits\n", return_val );
568 ok( !bRet,
"Returned %d for Unicode space\n", return_val );
579 win_skip(
"StrToInt64ExA() is not available\n");
586 bRet = pStrToInt64ExA(
result->string,0,&return_val);
588 ok(!bRet,
"Got %s instead of failure for '%s'\n",
591 ok(bRet,
"Failed for '%s'\n",
result->string);
593 ok(return_val ==
result->str_to_int64_ex,
"converted '%s' wrong (%s)\n",
604 ok(!bRet,
"Got %s instead of failure for '%s'\n",
607 ok(bRet,
"Failed for '%s'\n",
result->string);
609 ok(return_val ==
result->str_to_int64_hex,
"converted '%s' wrong (%s)\n",
624 win_skip(
"StrToInt64ExW() is not available\n");
632 bRet = pStrToInt64ExW(szBuff, 0, &return_val);
634 ok(!bRet,
"Got %s instead of failure for '%s'\n",
637 ok(bRet,
"Failed for '%s'\n",
result->string);
639 ok(return_val ==
result->str_to_int64_ex,
"converted '%s' wrong (%s)\n",
651 ok(!bRet,
"Got %s instead of failure for '%s'\n",
654 ok(bRet,
"Failed for '%s'\n",
result->string);
656 ok(return_val ==
result->str_to_int64_hex,
"converted '%s' wrong (%s)\n",
662 bRet = pStrToInt64ExW(
L"\x0661\x0662", 0, &return_val);
664 bRet = pStrToInt64ExW(
L"\x07c3\x07c4", 0, &return_val);
666 bRet = pStrToInt64ExW(
L"\xa0-2", 0, &return_val);
679 ok(lpszStr !=
NULL,
"Dup failed\n");
682 ok(!
strcmp(
result->byte_size_64, lpszStr),
"Copied string wrong\n");
692 ok(lpszStr ==
NULL || *lpszStr ==
'\0',
"NULL string returned %p\n", lpszStr);
701 if (!pStrFormatByteSize64A)
703 win_skip(
"StrFormatByteSize64A() is not available\n");
709 pStrFormatByteSize64A(
result->value, szBuff, 256);
712 "Formatted %s wrong: got %s, expected %s\n",
725 if (!pStrFormatByteSizeEx)
727 win_skip(
"StrFormatByteSizeEx is not available \n");
731 hr = pStrFormatByteSizeEx(0xdeadbeef,
735 hr = pStrFormatByteSizeEx(0xdeadbeef, 10, szBuff, 256);
740 ok(
hr ==
S_OK,
"Invalid arguments \n");
741 ok(!
wcscmp(szBuff,
L"2.00 GB"),
"Formatted %s wrong: got %ls, expected 2.00 GB\n",
746 ok(
hr ==
S_OK,
"Invalid arguments \n");
747 ok(!
wcscmp(szBuff,
L"1.99 GB"),
"Formatted %s wrong: got %ls, expected 1.99 GB\n",
757 if (!pStrFormatKBSizeW)
759 win_skip(
"StrFormatKBSizeW() is not available\n");
765 pStrFormatKBSizeW(
result->value, szBuffW, 256);
768 ok(!
strcmp(
result->kb_size, szBuff),
"Formatted %s wrong: got %s, expected %s\n",
779 if (!pStrFormatKBSizeA)
781 win_skip(
"StrFormatKBSizeA() is not available\n");
787 pStrFormatKBSizeA(
result->value, szBuff, 256);
793 "Formatted %s wrong: got %s, expected %s\n",
808 ok(!
strcmp(
result->time_interval, szBuff),
"Formatted %ld %d wrong: %s\n",
816 static const char str1[] = {
'a',
'b',
'c',
'd',
'e',
'f'};
817 static const char str2[] = {
'a',
'B',
'c',
'd',
'e',
'f'};
818 ok(0 !=
StrCmpNA(str1, str2, 6),
"StrCmpNA is case-insensitive\n");
819 ok(0 ==
StrCmpNIA(str1, str2, 6),
"StrCmpNIA is case-sensitive\n");
821 ok(!pChrCmpIA(
'a',
'a'),
"ChrCmpIA doesn't work at all!\n");
822 ok(!pChrCmpIA(
'b',
'B'),
"ChrCmpIA is not case-insensitive\n");
823 ok(pChrCmpIA(
'a',
'z'),
"ChrCmpIA believes that a == z!\n");
826 win_skip(
"ChrCmpIA() is not available\n");
828 if (pStrIsIntlEqualA)
830 ok(pStrIsIntlEqualA(
FALSE, str1, str2, 5),
"StrIsIntlEqualA(FALSE,...) isn't case-insensitive\n");
831 ok(!pStrIsIntlEqualA(
TRUE, str1, str2, 5),
"StrIsIntlEqualA(TRUE,...) isn't case-sensitive\n");
834 win_skip(
"StrIsIntlEqualA() is not available\n");
836 if (pIntlStrEqWorkerA)
838 ok(pIntlStrEqWorkerA(
FALSE, str1, str2, 5),
"IntlStrEqWorkerA(FALSE,...) isn't case-insensitive\n");
839 ok(!pIntlStrEqWorkerA(
TRUE, str1, str2, 5),
"pIntlStrEqWorkerA(TRUE,...) isn't case-sensitive\n");
842 win_skip(
"IntlStrEqWorkerA() is not available\n");
847 static const WCHAR str1[] = {
'a',
'b',
'c',
'd',
'e',
'f'};
848 static const WCHAR str2[] = {
'a',
'B',
'c',
'd',
'e',
'f'};
849 ok(0 !=
StrCmpNW(str1, str2, 5),
"StrCmpNW is case-insensitive\n");
850 ok(0 ==
StrCmpNIW(str1, str2, 5),
"StrCmpNIW is case-sensitive\n");
852 ok(!pChrCmpIW(
'a',
'a'),
"ChrCmpIW doesn't work at all!\n");
853 ok(!pChrCmpIW(
'b',
'B'),
"ChrCmpIW is not case-insensitive\n");
854 ok(pChrCmpIW(
'a',
'z'),
"ChrCmpIW believes that a == z!\n");
857 win_skip(
"ChrCmpIW() is not available\n");
859 if (pStrIsIntlEqualW)
861 ok(pStrIsIntlEqualW(
FALSE, str1, str2, 5),
"StrIsIntlEqualW(FALSE,...) isn't case-insensitive\n");
862 ok(!pStrIsIntlEqualW(
TRUE, str1, str2, 5),
"StrIsIntlEqualW(TRUE,...) isn't case-sensitive\n");
865 win_skip(
"StrIsIntlEqualW() is not available\n");
867 if (pIntlStrEqWorkerW)
869 ok(pIntlStrEqWorkerW(
FALSE, str1, str2, 5),
"IntlStrEqWorkerW(FALSE,...) isn't case-insensitive\n");
870 ok(!pIntlStrEqWorkerW(
TRUE, str1, str2, 5),
"IntlStrEqWorkerW(TRUE,...) isn't case-sensitive\n");
873 win_skip(
"IntlStrEqWorkerW() is not available\n");
886 static const WCHAR szTestW[] = {
'T',
'e',
's',
't',
'\0' };
894 win_skip(
"StrRetToBSTR() is not available\n");
901 ret = pStrRetToBSTR(&strret,
NULL, &bstr);
903 "STRRET_WSTR: dup failed, ret=0x%08lx, bstr %p\n",
ret, bstr);
908 ret = pStrRetToBSTR(&strret,
NULL, &bstr);
910 "STRRET_CSTR: dup failed, ret=0x%08lx, bstr %p\n",
ret, bstr);
915 strcpy((
char*)&iidl,
" Test");
916 ret = pStrRetToBSTR(&strret, iidl, &bstr);
918 "STRRET_OFFSET: dup failed, ret=0x%08lx, bstr %p\n",
ret, bstr);
932 win_skip(
"StrCpyNXA() is not available\n");
939 "StrCpyNXA: expected %p, \"hello\\0\\n\\n\", got %p, \"%d,%d,%d,%d,%d,%d,%d,%d\"\n",
945 static const WCHAR lpInit[] = {
'\n',
'\n',
'\n',
'\n',
'\n',
'\n',
'\n',
'\n' };
946 static const WCHAR lpSrc[] = {
'h',
'e',
'l',
'l',
'o',
'\0' };
947 static const WCHAR lpRes[] = {
'h',
'e',
'l',
'l',
'o',
'\0',
'\n',
'\n' };
953 win_skip(
"StrCpyNXW() is not available\n");
960 "StrCpyNXW: expected %p, \"hello\\0\\n\\n\", got %p, \"%d,%d,%d,%d,%d,%d,%d,%d\"\n",
964#define check_strrstri(type, str, pos, needle, exp) \
965 ret##type = StrRStrI##type(str, str+pos, needle); \
966 ok(ret##type == (exp), "Type " #type ", expected %p but got %p (string base %p)\n", \
967 (exp), ret##type, str);
971 static const CHAR szTest[] =
"yAxxxxAy";
972 static const CHAR szTest2[] =
"ABABABAB";
973 static const WCHAR wszTest[] = {
'y',
'A',
'x',
'x',
'x',
'x',
'A',
'y',0};
974 static const WCHAR wszTest2[] = {
'A',
'B',
'A',
'B',
'A',
'B',
'A',
'B',0};
976 static const WCHAR wszPattern1[] = {
'A',0};
977 static const WCHAR wszPattern2[] = {
'a',
'X',0};
978 static const WCHAR wszPattern3[] = {
'A',
'y',0};
979 static const WCHAR wszPattern4[] = {
'a',
'b',0};
1010 win_skip(
"SHAnsiToAnsi() is not available\n");
1014 if (pSHAnsiToAnsi == (
void *)pStrPBrkW)
1016 win_skip(
"Ordinal 345 corresponds to StrPBrkW, skipping SHAnsiToAnsi tests\n");
1023 "SHAnsiToAnsi: expected 6, \"hello\\0\\n\\n\", got %ld, \"%d,%d,%d,%d,%d,%d,%d,%d\"\n",
1029 static const WCHAR lpInit[] = {
'\n',
'\n',
'\n',
'\n',
'\n',
'\n',
'\n',
'\n' };
1030 static const WCHAR lpSrc[] = {
'h',
'e',
'l',
'l',
'o',
'\0' };
1031 static const WCHAR lpRes[] = {
'h',
'e',
'l',
'l',
'o',
'\0',
'\n',
'\n' };
1035 if (!pSHUnicodeToUnicode)
1037 win_skip(
"SHUnicodeToUnicode() is not available\n");
1041 if (pSHUnicodeToUnicode == (
void *)pStrRChrA)
1043 win_skip(
"Ordinal 346 corresponds to StrRChrA, skipping SHUnicodeToUnicode tests\n");
1050 "SHUnicodeToUnicode: expected 6, \"hello\\0\\n\\n\", got %ld, \"%d,%d,%d,%d,%d,%d,%d,%d\"\n",
1066 str1[
i] =
'0'+(
i%10);
1067 wstr1[
i] =
'0'+(
i%10);
1084 win_skip(
"StrCatBuffA() is not available\n");
1093 memset(wbuf, 0xbf,
sizeof(wbuf));
1098 memset(wbuf, 0xbf,
sizeof(wbuf));
1103 memset(wbuf, 0xbf,
sizeof(wbuf));
1108 memset(wbuf, 0xbf,
sizeof(wbuf));
1113 memset(wbuf, 0xbf,
sizeof(wbuf));
1125 win_skip(
"StrCatBuffW() is not available\n");
1129 memset(wbuf, 0xbf,
sizeof(wbuf));
1132 hres = pStrRetToBufW(&strret,
NULL, wbuf, 10);
1134 "StrRetToBufW returned %08lx\n",
hres);
1140 memset(wbuf, 0xbf,
sizeof(wbuf));
1143 hres = pStrRetToBufW(&strret,
NULL, wbuf, 10);
1147 memset(wbuf, 0xbf,
sizeof(wbuf));
1150 hres = pStrRetToBufW(&strret,
NULL, wbuf, 10);
1155 win_skip(
"StrRetToBufW() is not available\n");
1167 win_skip(
"StrRetToBufA() is not available\n");
1172 ret = pwnsprintfA(
buf, 10,
"%s", str1);
1173 ok(
broken(
ret == 9) ||
ret == -1 ,
"Unexpected wnsprintfA return %d, expected 9 or -1\n",
ret);
1178 ret = pwnsprintfA(
buf + 1, -1,
"%s", str1);
1193 ret = pwnsprintfA(
buf + 1, 0,
"%s", str1);
1203 ret = pwnsprintfA(
buf, 1,
"");
1209 win_skip(
"wnsprintfA() is not available\n");
1213 memset(wbuf, 0xbf,
sizeof(wbuf));
1214 ret = pwnsprintfW(wbuf, 10,
fmt, wstr1);
1215 ok(
broken(
ret == 9) ||
ret == -1 ,
"Unexpected wnsprintfW return %d, expected 9 or -1\n",
ret);
1219 memset(wbuf, 0xbf,
sizeof(wbuf));
1220 ret = pwnsprintfW(wbuf + 1, -1,
fmt, wstr1);
1234 memset(wbuf, 0xbf,
sizeof(wbuf));
1235 ret = pwnsprintfW(wbuf + 1, 0,
fmt, wstr1);
1244 memset(wbuf, 0xbf,
sizeof(wbuf));
1245 ret = pwnsprintfW(wbuf, 1,
L"");
1251 win_skip(
"wnsprintfW() is not available\n");
1256 static const char *deadbeefA =
"DeAdBeEf";
1265 {
"DeAd", deadbeefA},
1267 {
"AdBe", deadbeefA + 2},
1269 {
"BeEf", deadbeefA + 4},
1280 ok(!
ret,
"Expected StrStrA to return NULL, got %p\n",
ret);
1283 ok(!
ret,
"Expected StrStrA to return NULL, got %p\n",
ret);
1286 ok(!
ret,
"Expected StrStrA to return NULL, got %p\n",
ret);
1290 ok(!
ret,
"Expected StrStrA to return NULL, got %p\n",
ret);
1296 "[%d] Expected StrStrA to return %p, got %p\n",
1304 static const WCHAR deadbeefW[] = {
'D',
'e',
'A',
'd',
'B',
'e',
'E',
'f',0};
1305 static const WCHAR deadW[] = {
'D',
'e',
'A',
'd',0};
1306 static const WCHAR dead_lowerW[] = {
'd',
'e',
'a',
'd',0};
1307 static const WCHAR adbeW[] = {
'A',
'd',
'B',
'e',0};
1308 static const WCHAR adbe_lowerW[] = {
'a',
'd',
'b',
'e',0};
1309 static const WCHAR beefW[] = {
'B',
'e',
'E',
'f',0};
1310 static const WCHAR beef_lowerW[] = {
'b',
'e',
'e',
'f',0};
1320 {dead_lowerW,
NULL},
1321 {adbeW, deadbeefW + 2},
1322 {adbe_lowerW,
NULL},
1323 {beefW, deadbeefW + 4},
1324 {beef_lowerW,
NULL},
1334 ok(!
ret,
"Expected StrStrW to return NULL, got %p\n",
ret);
1337 ok(!
ret,
"Expected StrStrW to return NULL, got %p\n",
ret);
1340 ok(!
ret,
"Expected StrStrW to return NULL, got %p\n",
ret);
1344 ok(!
ret,
"Expected StrStrW to return NULL, got %p\n",
ret);
1350 "[%d] Expected StrStrW to return %p, got %p\n",
1357 static const char *deadbeefA =
"DeAdBeEf";
1363 } StrStrIA_cases[] =
1366 {
"DeAd", deadbeefA},
1367 {
"dead", deadbeefA},
1368 {
"AdBe", deadbeefA + 2},
1369 {
"adbe", deadbeefA + 2},
1370 {
"BeEf", deadbeefA + 4},
1371 {
"beef", deadbeefA + 4},
1382 ok(!
ret,
"Expected StrStrIA to return NULL, got %p\n",
ret);
1385 ok(!
ret,
"Expected StrStrIA to return NULL, got %p\n",
ret);
1388 ok(!
ret,
"Expected StrStrIA to return NULL, got %p\n",
ret);
1392 ok(!
ret,
"Expected StrStrIA to return NULL, got %p\n",
ret);
1398 "[%d] Expected StrStrIA to return %p, got %p\n",
1406 static const WCHAR deadbeefW[] = {
'D',
'e',
'A',
'd',
'B',
'e',
'E',
'f',0};
1407 static const WCHAR deadW[] = {
'D',
'e',
'A',
'd',0};
1408 static const WCHAR dead_lowerW[] = {
'd',
'e',
'a',
'd',0};
1409 static const WCHAR adbeW[] = {
'A',
'd',
'B',
'e',0};
1410 static const WCHAR adbe_lowerW[] = {
'a',
'd',
'b',
'e',0};
1411 static const WCHAR beefW[] = {
'B',
'e',
'E',
'f',0};
1412 static const WCHAR beef_lowerW[] = {
'b',
'e',
'e',
'f',0};
1413 static const WCHAR cafeW[] = {
'c',
'a',
'f',
'e',0};
1419 } StrStrIW_cases[] =
1423 {dead_lowerW, deadbeefW},
1424 {adbeW, deadbeefW + 2},
1425 {adbe_lowerW, deadbeefW + 2},
1426 {beefW, deadbeefW + 4},
1427 {beef_lowerW, deadbeefW + 4},
1438 ok(!
ret,
"Expected StrStrIW to return NULL, got %p\n",
ret);
1441 ok(!
ret,
"Expected StrStrIW to return NULL, got %p\n",
ret);
1444 ok(!
ret,
"Expected StrStrIW to return NULL, got %p\n",
ret);
1448 ok(!
ret,
"Expected StrStrIW to return NULL, got %p\n",
ret);
1454 "[%d] Expected StrStrIW to return %p, got %p\n",
1462 static const WCHAR deadbeefW[] = {
'D',
'e',
'A',
'd',
'B',
'e',
'E',
'f',0};
1463 static const WCHAR deadW[] = {
'D',
'e',
'A',
'd',0};
1464 static const WCHAR dead_lowerW[] = {
'd',
'e',
'a',
'd',0};
1465 static const WCHAR adbeW[] = {
'A',
'd',
'B',
'e',0};
1466 static const WCHAR adbe_lowerW[] = {
'a',
'd',
'b',
'e',0};
1467 static const WCHAR beefW[] = {
'B',
'e',
'E',
'f',0};
1468 static const WCHAR beef_lowerW[] = {
'b',
'e',
'e',
'f',0};
1475 } StrStrNW_cases[] =
1480 {adbeW,
ARRAY_SIZE(deadbeefW), deadbeefW + 2},
1482 {beefW,
ARRAY_SIZE(deadbeefW), deadbeefW + 4},
1489 {beefW, 5, deadbeefW + 4},
1490 {beefW, 6, deadbeefW + 4},
1491 {beefW, 7, deadbeefW + 4},
1492 {beefW, 8, deadbeefW + 4},
1493 {beefW, 9, deadbeefW + 4},
1501 win_skip(
"StrStrNW() is not available\n");
1506 ok(!
ret,
"Expected StrStrNW to return NULL, got %p\n",
ret);
1509 ok(!
ret,
"Expected StrStrNW to return NULL, got %p\n",
ret);
1512 ok(!
ret,
"Expected StrStrNW to return NULL, got %p\n",
ret);
1515 ok(!
ret,
"Expected StrStrNW to return NULL, got %p\n",
ret);
1518 ok(!
ret,
"Expected StrStrNW to return NULL, got %p\n",
ret);
1522 ret = pStrStrNW(deadbeefW, StrStrNW_cases[
i].
search, StrStrNW_cases[
i].
count);
1524 "[%d] Expected StrStrNW to return %p, got %p\n",
1531 ret = pStrStrNW(deadbeefW, beefW, 100);
1532 ok(
ret == deadbeefW + 4,
"Expected StrStrNW to return deadbeefW + 4, got %p\n",
ret);
1536 ret = pStrStrNW(deadbeefW, beefW, ~0
U);
1537 ok(!
ret,
"Expected StrStrNW to return NULL, got %p\n",
ret);
1544 static const WCHAR deadbeefW[] = {
'D',
'e',
'A',
'd',
'B',
'e',
'E',
'f',0};
1545 static const WCHAR deadW[] = {
'D',
'e',
'A',
'd',0};
1546 static const WCHAR dead_lowerW[] = {
'd',
'e',
'a',
'd',0};
1547 static const WCHAR adbeW[] = {
'A',
'd',
'B',
'e',0};
1548 static const WCHAR adbe_lowerW[] = {
'a',
'd',
'b',
'e',0};
1549 static const WCHAR beefW[] = {
'B',
'e',
'E',
'f',0};
1550 static const WCHAR beef_lowerW[] = {
'b',
'e',
'e',
'f',0};
1551 static const WCHAR cafeW[] = {
'c',
'a',
'f',
'e',0};
1558 } StrStrNIW_cases[] =
1562 {dead_lowerW,
ARRAY_SIZE(deadbeefW), deadbeefW},
1563 {adbeW,
ARRAY_SIZE(deadbeefW), deadbeefW + 2},
1564 {adbe_lowerW,
ARRAY_SIZE(deadbeefW), deadbeefW + 2},
1565 {beefW,
ARRAY_SIZE(deadbeefW), deadbeefW + 4},
1566 {beef_lowerW,
ARRAY_SIZE(deadbeefW), deadbeefW + 4},
1573 {beefW, 5, deadbeefW + 4},
1574 {beefW, 6, deadbeefW + 4},
1575 {beefW, 7, deadbeefW + 4},
1576 {beefW, 8, deadbeefW + 4},
1577 {beefW, 9, deadbeefW + 4},
1578 {beef_lowerW, 0,
NULL},
1579 {beef_lowerW, 1,
NULL},
1580 {beef_lowerW, 2,
NULL},
1581 {beef_lowerW, 3,
NULL},
1582 {beef_lowerW, 4,
NULL},
1583 {beef_lowerW, 5, deadbeefW + 4},
1584 {beef_lowerW, 6, deadbeefW + 4},
1585 {beef_lowerW, 7, deadbeefW + 4},
1586 {beef_lowerW, 8, deadbeefW + 4},
1587 {beef_lowerW, 9, deadbeefW + 4},
1595 win_skip(
"StrStrNIW() is not available\n");
1600 ok(!
ret,
"Expected StrStrNIW to return NULL, got %p\n",
ret);
1603 ok(!
ret,
"Expected StrStrNIW to return NULL, got %p\n",
ret);
1606 ok(!
ret,
"Expected StrStrNIW to return NULL, got %p\n",
ret);
1609 ok(!
ret,
"Expected StrStrNIW to return NULL, got %p\n",
ret);
1612 ok(!
ret,
"Expected StrStrNIW to return NULL, got %p\n",
ret);
1616 ret = pStrStrNIW(deadbeefW, StrStrNIW_cases[
i].
search, StrStrNIW_cases[
i].
count);
1618 "[%d] Expected StrStrNIW to return %p, got %p\n",
1625 ret = pStrStrNIW(deadbeefW, beefW, 100);
1626 ok(
ret == deadbeefW + 4,
"Expected StrStrNIW to return deadbeefW + 4, got %p\n",
ret);
1630 ret = pStrStrNIW(deadbeefW, beefW, ~0
U);
1631 ok(!
ret,
"Expected StrStrNIW to return NULL, got %p\n",
ret);
1637 static const WCHAR deadbeefW[] = {
'D',
'e',
'A',
'd',
'B',
'e',
'E',
'f',0};
1638 static const WCHAR deadW[] = {
'D',
'e',
'A',
'd',0};
1639 static const WCHAR beefW[] = {
'B',
'e',
'E',
'f',0};
1646 win_skip(
"StrCatChainW is not available\n");
1651 ret = pStrCatChainW(
NULL, 0, 0, beefW);
1652 ok(
ret == 0,
"Expected StrCatChainW to return 0, got %lu\n",
ret);
1656 ret = pStrCatChainW(
buf, 0, 0, beefW);
1657 ok(
ret == 0,
"Expected StrCatChainW to return 0, got %lu\n",
ret);
1658 ok(
buf[0] == 0x1111,
"Expected buf[0] = 0x1111, got %x\n",
buf[0]);
1660 memcpy(
buf, deadbeefW,
sizeof(deadbeefW));
1661 ret = pStrCatChainW(
buf, 0, -1, beefW);
1662 ok(
ret == 8,
"Expected StrCatChainW to return 8, got %lu\n",
ret);
1663 ok(!
memcmp(
buf, deadbeefW,
sizeof(deadbeefW)),
"Buffer contains wrong data\n");
1667 ret = pStrCatChainW(
buf, 32, 0, deadW);
1668 ok(
ret == 4,
"Expected StrCatChainW to return 4, got %lu\n",
ret);
1669 ok(!
memcmp(
buf, deadW,
sizeof(deadW)),
"Buffer contains wrong data\n");
1671 ret = pStrCatChainW(
buf, 32, -1, beefW);
1672 ok(
ret == 8,
"Expected StrCatChainW to return 8, got %lu\n",
ret);
1673 ok(!
memcmp(
buf, deadbeefW,
sizeof(deadbeefW)),
"Buffer contains wrong data\n");
1677 ret = pStrCatChainW(
buf, 32, 0, deadW);
1678 ok(
ret == 4,
"Expected StrCatChainW to return 4, got %lu\n",
ret);
1679 ok(!
memcmp(
buf, deadW,
sizeof(deadW)),
"Buffer contains wrong data\n");
1681 ret = pStrCatChainW(
buf, 32, 4, beefW);
1682 ok(
ret == 8,
"Expected StrCatChainW to return 8, got %lu\n",
ret);
1683 ok(!
memcmp(
buf, deadbeefW,
sizeof(deadbeefW)),
"Buffer contains wrong data\n");
1687 ret = pStrCatChainW(
buf, 5, 0, deadW);
1688 ok(
ret == 4,
"Expected StrCatChainW to return 4, got %lu\n",
ret);
1689 ok(!
memcmp(
buf, deadW,
sizeof(deadW)),
"Buffer contains wrong data\n");
1693 ret = pStrCatChainW(
buf, 4, 0, deadW);
1699 win_skip(
"Windows2000/XP behaviour detected for StrCatChainW, skipping tests\n");
1702 ok(
ret == 3,
"Expected StrCatChainW to return 3, got %lu\n",
ret);
1703 ok(!
memcmp(
buf, deadW, 3 *
sizeof(
WCHAR)),
"Buffer contains wrong data\n");
1704 ok(!
buf[3],
"String is not nullterminated\n");
1705 ok(
buf[4] == 0x1111,
"Expected buf[4] = 0x1111, got %x\n",
buf[4]);
1708 ret = pStrCatChainW(
buf, 4, 1, beefW);
1709 ok(
ret == 3,
"Expected StrCatChainW to return 3, got %lu\n",
ret);
1710 ok(
buf[0] ==
'D',
"Expected buf[0] = 'D', got %x\n",
buf[0]);
1711 ok(
buf[1] ==
'B',
"Expected buf[1] = 'B', got %x\n",
buf[1]);
1712 ok(
buf[2] ==
'e',
"Expected buf[2] = 'e', got %x\n",
buf[2]);
1713 ok(!
buf[3],
"String is not nullterminated\n");
1714 ok(
buf[4] == 0x1111,
"Expected buf[4] = 0x1111, got %x\n",
buf[4]);
1718 memcpy(
buf, deadbeefW,
sizeof(deadbeefW));
1720 ret = pStrCatChainW(
buf, 9, 8, beefW);
1721 ok(
ret == 8,
"Expected StrCatChainW to return 8, got %lu\n",
ret);
1722 ok(!
memcmp(
buf, deadbeefW,
sizeof(deadbeefW)),
"Buffer contains wrong data\n");
1723 ok(!
memcmp(
buf + 9, deadW,
sizeof(deadW)),
"Buffer contains wrong data\n");
1726 ret = pStrCatChainW(
buf, 9, 9, beefW);
1727 ok(
ret == 8,
"Expected StrCatChainW to return 8, got %lu\n",
ret);
1728 ok(!
memcmp(
buf, deadbeefW,
sizeof(deadbeefW)),
"Buffer contains wrong data\n");
1729 ok(!
memcmp(
buf + 9, deadW,
sizeof(deadW)),
"Buffer contains wrong data\n");
1732 ret = pStrCatChainW(
buf, 9, 10, beefW);
1733 ok(
ret == 10,
"Expected StrCatChainW to return 10, got %lu\n",
ret);
1734 ok(!
memcmp(
buf, deadbeefW,
sizeof(deadbeefW)),
"Buffer contains wrong data\n");
1735 ok(!
memcmp(
buf + 9, deadW,
sizeof(deadW)),
"Buffer contains wrong data\n");
1738 memcpy(
buf, deadbeefW,
sizeof(deadbeefW));
1739 ret = pStrCatChainW(
buf, 5, -1, deadW);
1740 ok(
ret == 8,
"Expected StrCatChainW to return 8, got %lu\n",
ret);
1741 ok(!
memcmp(
buf, deadbeefW,
sizeof(deadbeefW)),
"Buffer contains wrong data\n");
1743 ret = pStrCatChainW(
buf, 5, 5, deadW);
1744 ok(
ret == 4,
"Expected StrCatChainW to return 4, got %lu\n",
ret);
1745 ok(!
memcmp(
buf, deadW,
sizeof(deadW)),
"Buffer contains wrong data\n");
1746 ok(
buf[5] ==
'e',
"Expected buf[5] = 'e', got %x\n",
buf[5]);
1748 ret = pStrCatChainW(
buf, 5, 6, deadW);
1749 ok(
ret == 6,
"Expected StrCatChainW to return 6, got %lu\n",
ret);
1750 ok(!
memcmp(
buf, deadW,
sizeof(deadW)),
"Buffer contains wrong data\n");
1751 ok(
buf[5] ==
'e',
"Expected buf[5] = 'e', got %x\n",
buf[5]);
1759 unsigned int arg_size;
1767 {
"%lu",
sizeof(
ULONG), 65537 },
1768 {
"%llu",
sizeof(
ULONG64), 10 },
1769 {
"%lllllllu",
sizeof(
ULONG64), 10 },
1770 {
"%#lx",
sizeof(
ULONG), 10 },
1771 {
"%#llx",
sizeof(
ULONG64), 0x1000000000 },
1772 {
"%#lllx",
sizeof(
ULONG64), 0x1000000000 },
1773 {
"%hu",
sizeof(
ULONG), 65537 },
1774 {
"%hlu",
sizeof(
ULONG), 65537 },
1775 {
"%hllx",
sizeof(
ULONG64), 0x100000010 },
1776 {
"%hlllx",
sizeof(
ULONG64), 0x100000010 },
1777 {
"%llhx",
sizeof(
ULONG64), 0x100000010 },
1778 {
"%lllhx",
sizeof(
ULONG64), 0x100000010 },
1779 {
"%lhu",
sizeof(
ULONG), 65537 },
1780 {
"%hhu",
sizeof(
ULONG), 65537 },
1781 {
"%hwu",
sizeof(
ULONG), 65537 },
1782 {
"%whu",
sizeof(
ULONG), 65537 },
1783 {
"%##lhllwlx",
sizeof(
ULONG64), 0x1000000010 },
1784 {
"%##lhlwlx",
sizeof(
ULONG), 0x1000000010 },
1785 {
"%04lhlwllx",
sizeof(
ULONG64), 0x1000000010 },
1818 {
"%c",
sizeof(
SHORT), 0x95c8 },
1819 {
"%lc",
sizeof(
SHORT), 0x95c8 },
1820 {
"%llc",
sizeof(
SHORT), 0x95c8 },
1821 {
"%lllc",
sizeof(
SHORT), 0x95c8 },
1822 {
"%llllc",
sizeof(
SHORT), 0x95c8 },
1823 {
"%lllllc",
sizeof(
SHORT), 0x95c8 },
1824 {
"%C",
sizeof(
SHORT), 0x95c8 },
1825 {
"%lC",
sizeof(
SHORT), 0x95c8 },
1826 {
"%llC",
sizeof(
SHORT), 0x95c8 },
1827 {
"%lllC",
sizeof(
SHORT), 0x95c8 },
1828 {
"%llllC",
sizeof(
SHORT), 0x95c8 },
1829 {
"%lllllC",
sizeof(
SHORT), 0x95c8 },
1830 {
"%hc",
sizeof(
BYTE), 0x95c8 },
1831 {
"%hhc",
sizeof(
BYTE), 0x95c8 },
1832 {
"%hhhc",
sizeof(
BYTE), 0x95c8 },
1833 {
"%wc",
sizeof(
BYTE), 0x95c8 },
1834 {
"%wC",
sizeof(
BYTE), 0x95c8 },
1835 {
"%hwc",
sizeof(
BYTE), 0x95c8 },
1836 {
"%whc",
sizeof(
BYTE), 0x95c8 },
1837 {
"%hwC",
sizeof(
BYTE), 0x95c8 },
1838 {
"%whC",
sizeof(
BYTE), 0x95c8 },
1839 {
"%I64u",
sizeof(
ULONG64), 10 },
1840 {
"%llI64u",
sizeof(
ULONG64), 10 },
1841 {
"%I64llu",
sizeof(
ULONG64), 10 },
1843 {
"%q%u",
sizeof(
ULONG), 10 },
1844 {
"%lhw%u", 0, 10 },
1845 {
"%u% ",
sizeof(
ULONG), 10 },
1846 {
"%u% %u",
sizeof(
ULONG), 10 },
1847 {
"% ll u", 0, 10 },
1848 {
"% llu",
sizeof(
ULONG64), 10 },
1849 {
"%# llx",
sizeof(
ULONG64), 10 },
1850 {
"% #llx",
sizeof(
ULONG64), 10 },
1854 WCHAR ws[256], expectedw[256], specw[256];
1857 int len_a, len_w = 0, expected_len_a, expected_len_w = 0;
1861 ok(!!ntdll__snprintf,
"_snprintf not found.\n");
1863 ok(!!ntdll__snwprintf,
"_snwprintf not found.\n");
1869 if (_ntMajor < 6 || (_ntMajor == 6 && _ntMinor == 0)) {
1870 skip(
"These tests are broken on WS03 and Vista.\n");
1889 expected_len_w = ntdll__snwprintf(expectedw,
ARRAY_SIZE(expectedw), specw,
tests[
i].argw,
L"end");
1891 switch (
tests[
i].arg_size)
1897 expected_len_w = ntdll__snwprintf(expectedw,
ARRAY_SIZE(expectedw), specw,
L"end");
1920 len_a = len_w = expected_len_a = expected_len_w = 0;
1921 ok(0,
"unknown length %u.\n",
tests[
i].arg_size);
1924 ok(len_a == expected_len_a,
"got len %d, expected %d.\n", len_a, expected_len_a);
1926 ok(len_w == expected_len_w,
"got len %d, expected %d.\n", len_a, expected_len_a);
1935 CHAR thousandDelim[8];
1936 CHAR decimalDelim[8];
1998 skip(
"An English UI and locale is required for the StrFormat*Size tests\n");
2002 skip(
"An English UI is required for the StrFromTimeInterval tests\n");
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
INT WINAPI StrToIntW(LPCWSTR lpString)
LPWSTR WINAPI StrChrIW(LPCWSTR lpszStr, WCHAR ch)
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
LPWSTR WINAPI StrRChrW(LPCWSTR str, LPCWSTR end, WORD ch)
LPSTR WINAPI StrStrIA(LPCSTR lpszStr, LPCSTR lpszSearch)
INT WINAPI StrCmpNIA(LPCSTR lpszStr, LPCSTR lpszComp, INT iLen)
LPSTR WINAPI StrChrIA(LPCSTR lpszStr, WORD ch)
LPWSTR WINAPI StrStrW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
LPSTR WINAPI StrRChrA(LPCSTR lpszStr, LPCSTR lpszEnd, WORD ch)
INT WINAPI StrToIntA(LPCSTR lpszStr)
LPSTR WINAPI StrChrA(LPCSTR lpszStr, WORD ch)
INT WINAPI StrCmpNIW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
LPSTR WINAPI StrStrA(LPCSTR lpszStr, LPCSTR lpszSearch)
INT WINAPI StrCmpNA(LPCSTR lpszStr, LPCSTR lpszComp, INT iLen)
#define GetProcAddress(x, y)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define WideCharToMultiByte
#define MultiByteToWideChar
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
INT WINAPI GetLocaleInfoA(LCID lcid, LCTYPE lctype, LPSTR buffer, INT len)
LANGID WINAPI GetUserDefaultLangID(void)
BOOL WINAPI StrToIntExW(const WCHAR *str, DWORD flags, INT *ret)
int WINAPI StrCmpW(const WCHAR *str, const WCHAR *comp)
BOOL WINAPI StrToIntExA(const char *str, DWORD flags, INT *ret)
WCHAR *WINAPI StrDupW(const WCHAR *str)
char *WINAPI StrDupA(const char *str)
WCHAR *WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
DWORD WINAPI GetVersion(void)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
INT WINAPI StrFromTimeIntervalA(LPSTR lpszStr, UINT cchMax, DWORD dwMS, int iDigits)
LPWSTR WINAPI StrCpyW(LPWSTR lpszStr, LPCWSTR lpszSrc)
GLuint GLuint GLsizei count
GLenum GLuint GLenum GLsizei const GLchar * buf
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
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 GLint GLint j
HLOCAL NTAPI LocalFree(HLOCAL hMem)
static const WCHAR emptyW[]
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl winetest_push_context(const char *fmt,...) __WINE_PRINTF_ATTR(1
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl void winetest_pop_context(void)
#define memcpy(s1, s2, n)
static struct test_info tests[]
static HINSTANCE hkernel32
#define expect_eq(expr, value, type, format)
static const ITEMIDLIST *static WCHAR * CoDupStrW(const char *src)
static void test_StrFormatByteSize64A(void)
static void test_StrChrIW(void)
static void test_StrStrIW(void)
static void test_StrChrW(void)
static void test_StrFormatKBSizeA(void)
static BOOL is_locale_english(void)
static void test_StrStrNW(void)
static void test_StrDupA(void)
static const StrFormatSizeResult StrFormatSize_results[]
#define check_strrstri(type, str, pos, needle, exp)
static void test_StrCmpA(void)
static void test_StrStrIA(void)
static void test_printf_format(void)
static void test_StrToInt64ExW(void)
static void test_StrFromTimeIntervalA(void)
static void test_SHUnicodeToUnicode(void)
static void test_StrToInt64ExA(void)
static void test_StrToIntA(void)
static const StrFromTimeIntervalResult StrFromTimeInterval_results[]
static void test_StrRChrA(void)
static void test_StrRetToBSTR(void)
static void test_StrToIntExW(void)
static BOOL is_lang_english(void)
static void test_StrChrA(void)
static void test_StrCatChainW(void)
static void test_StrRStrI(void)
static void test_StrStrW(void)
static void test_SHAnsiToAnsi(void)
static void test_StrToIntW(void)
#define expect_eq2(expr, val1, val2, type, fmt)
static void test_StrChrIA(void)
static void test_StrCpyW(void)
struct tagStrFormatSizeResult StrFormatSizeResult
static void test_StrFormatKBSizeW(void)
static void test_StrToIntExA(void)
static void test_StrCmpW(void)
static void test_StrFormatByteSizeEx(void)
static void test_StrChrNW(void)
static LONGLONG *static LONGLONG *struct tagStrToIntResult StrToIntResult
static void test_StrStrNIW(void)
static void test_StrXXX_overflows(void)
static void test_StrStrA(void)
static const StrToIntResult StrToInt_results[]
struct tagStrFromTimeIntervalResult StrFromTimeIntervalResult
static void test_StrRChrW(void)
static void test_StrCpyNXW(void)
static void test_StrCpyNXA(void)
static short search(int val, const short *table, int size)
#define LOCALE_USER_DEFAULT
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
@ SFBS_FLAGS_TRUNCATE_UNDISPLAYED_DECIMAL_DIGITS
@ SFBS_FLAGS_ROUND_TO_NEAREST_DISPLAYED_DIGIT
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define E_NOT_SUFFICIENT_BUFFER