33static const char*
TEST_URL_1 =
"http://www.winehq.org/tests?date=10/10/1923";
34static const char*
TEST_URL_2 =
"http://localhost:8080/tests%2e.html?date=Mon%2010/10/1923";
35static const char*
TEST_URL_3 =
"http://foo:bar@localhost:21/internal.php?query=x&return=y";
38static const char winehqA[] =
"http://www.winehq.org/";
84 {
"http://www.winehq.org/tests0", 0,
"http://www.winehq.org/tests0"},
85 {
"http://www.winehq.org/tests1\n", 0,
"http://www.winehq.org/tests1%0A"},
86 {
"http://www.winehq.org/tests2\r", 0,
"http://www.winehq.org/tests2%0D"},
90 {
"/direct/swhelp/series6/6.2i_latestservicepack.dat\r",
URL_ESCAPE_SPACES_ONLY,
"/direct/swhelp/series6/6.2i_latestservicepack.dat\r"},
92 {
"file://////foo/bar\\baz", 0,
"file://foo/bar/baz"},
93 {
"file://///foo/bar\\baz", 0,
"file://foo/bar/baz"},
94 {
"file:////foo/bar\\baz", 0,
"file://foo/bar/baz"},
95 {
"file:///localhost/foo/bar\\baz", 0,
"file:///localhost/foo/bar/baz"},
96 {
"file:///foo/bar\\baz", 0,
"file:///foo/bar/baz"},
97 {
"file://loCalHost/foo/bar\\baz", 0,
"file:///foo/bar/baz"},
98 {
"file://foo/bar\\baz", 0,
"file://foo/bar/baz"},
99 {
"file:/localhost/foo/bar\\baz", 0,
"file:///localhost/foo/bar/baz"},
100 {
"file:/foo/bar\\baz", 0,
"file:///foo/bar/baz"},
101 {
"file:foo/bar\\baz", 0,
"file:foo/bar/baz"},
102 {
"file:\\foo/bar\\baz", 0,
"file:///foo/bar/baz"},
103 {
"file:\\\\foo/bar\\baz", 0,
"file://foo/bar/baz"},
104 {
"file:\\\\\\foo/bar\\baz", 0,
"file:///foo/bar/baz"},
105 {
"file:\\\\localhost\\foo/bar\\baz", 0,
"file:///foo/bar/baz"},
106 {
"file:///f oo/b?a r\\baz", 0,
"file:///f%20oo/b?a r\\baz"},
107 {
"file:///foo/b#a r\\baz", 0,
"file:///foo/b%23a%20r/baz"},
108 {
"file:///f o^&`{}|][\"<>\\%o/b#a r\\baz", 0,
"file:///f%20o%5E%26%60%7B%7D%7C%5D%5B%22%3C%3E/%o/b%23a%20r/baz"},
114 {
"foo/bar\\ba?z\\", 0,
"foo/bar%5Cba?z\\"},
115 {
"/foo/bar\\ba?z\\", 0,
"/foo/bar%5Cba?z\\"},
116 {
"/foo/bar\\ba#z\\", 0,
"/foo/bar%5Cba#z\\"},
117 {
"/foo/%5C", 0,
"/foo/%5C"},
120 {
"http://////foo/bar\\baz", 0,
"http://////foo/bar/baz"},
121 {
"http://///foo/bar\\baz", 0,
"http://///foo/bar/baz"},
122 {
"http:////foo/bar\\baz", 0,
"http:////foo/bar/baz"},
123 {
"http:///foo/bar\\baz", 0,
"http:///foo/bar/baz"},
124 {
"http://localhost/foo/bar\\baz", 0,
"http://localhost/foo/bar/baz"},
125 {
"http://foo/bar\\baz", 0,
"http://foo/bar/baz"},
126 {
"http:/foo/bar\\baz", 0,
"http:/foo/bar/baz"},
127 {
"http:foo/bar\\ba?z\\", 0,
"http:foo%2Fbar%2Fba?z\\"},
128 {
"http:foo/bar\\ba#z\\", 0,
"http:foo%2Fbar%2Fba#z\\"},
129 {
"http:\\foo/bar\\baz", 0,
"http:/foo/bar/baz"},
130 {
"http:\\\\foo/bar\\baz", 0,
"http://foo/bar/baz"},
131 {
"http:\\\\\\foo/bar\\baz", 0,
"http:///foo/bar/baz"},
132 {
"http:\\\\\\\\foo/bar\\baz", 0,
"http:////foo/bar/baz"},
133 {
"http:/fo ?o/b ar\\baz", 0,
"http:/fo%20?o/b ar\\baz"},
134 {
"http:fo ?o/b ar\\baz", 0,
"http:fo%20?o/b ar\\baz"},
137 {
"https://foo/bar\\baz", 0,
"https://foo/bar/baz"},
138 {
"https:/foo/bar\\baz", 0,
"https:/foo/bar/baz"},
139 {
"https:\\foo/bar\\baz", 0,
"https:/foo/bar/baz"},
141 {
"foo:////foo/bar\\baz", 0,
"foo:////foo/bar%5Cbaz"},
142 {
"foo:///foo/bar\\baz", 0,
"foo:///foo/bar%5Cbaz"},
143 {
"foo://localhost/foo/bar\\baz", 0,
"foo://localhost/foo/bar%5Cbaz"},
144 {
"foo://foo/bar\\baz", 0,
"foo://foo/bar%5Cbaz"},
145 {
"foo:/foo/bar\\baz", 0,
"foo:/foo/bar%5Cbaz"},
146 {
"foo:foo/bar\\baz", 0,
"foo:foo%2Fbar%5Cbaz"},
147 {
"foo:\\foo/bar\\baz", 0,
"foo:%5Cfoo%2Fbar%5Cbaz"},
148 {
"foo:/foo/bar\\ba?\\z", 0,
"foo:/foo/bar%5Cba?\\z"},
149 {
"foo:/foo/bar\\ba#\\z", 0,
"foo:/foo/bar%5Cba#\\z"},
151 {
"mailto:/fo/o@b\\%a?\\r.b#\\az", 0,
"mailto:%2Ffo%2Fo@b%5C%a%3F%5Cr.b%23%5Caz"},
152 {
"mailto:fo/o@b\\%a?\\r.b#\\az", 0,
"mailto:fo%2Fo@b%5C%a%3F%5Cr.b%23%5Caz"},
153 {
"mailto:fo/o@b\\%a?\\r.b#\\az",
URL_ESCAPE_PERCENT,
"mailto:fo%2Fo@b%5C%25a%3F%5Cr.b%23%5Caz"},
155 {
"ftp:fo/o@bar.baz/foo/bar", 0,
"ftp:fo%2Fo@bar.baz%2Ffoo%2Fbar"},
156 {
"ftp:/fo/o@bar.baz/foo/bar", 0,
"ftp:/fo/o@bar.baz/foo/bar"},
157 {
"ftp://fo/o@bar.baz/fo?o\\bar", 0,
"ftp://fo/o@bar.baz/fo?o\\bar"},
158 {
"ftp://fo/o@bar.baz/fo#o\\bar", 0,
"ftp://fo/o@bar.baz/fo#o\\bar"},
159 {
"ftp://localhost/o@bar.baz/fo#o\\bar", 0,
"ftp://localhost/o@bar.baz/fo#o\\bar"},
160 {
"ftp:///fo/o@bar.baz/foo/bar", 0,
"ftp:///fo/o@bar.baz/foo/bar"},
161 {
"ftp:////fo/o@bar.baz/foo/bar", 0,
"ftp:////fo/o@bar.baz/foo/bar"},
163 {
"ftp\x1f\1end/", 0,
"ftp%1F%01end/"}
200 {
"http://www.winehq.org/tests",
"tests1", 0,
"http://www.winehq.org/tests1"},
201 {
"http://www.%77inehq.org/tests",
"tests1", 0,
"http://www.%77inehq.org/tests1"},
203 {
"http://www.winehq.org/tests/",
"../tests3", 0,
"http://www.winehq.org/tests3"},
204 {
"http://www.winehq.org/tests/test1",
"test2", 0,
"http://www.winehq.org/tests/test2"},
205 {
"http://www.winehq.org/tests/../tests",
"tests4", 0,
"http://www.winehq.org/tests4"},
206 {
"http://www.winehq.org/tests/../tests/",
"tests5", 0,
"http://www.winehq.org/tests/tests5"},
207 {
"http://www.winehq.org/tests/../tests/",
"/tests6/..", 0,
"http://www.winehq.org/"},
208 {
"http://www.winehq.org/tests/../tests/",
"\\tests6\\..", 0,
"http://www.winehq.org/"},
209 {
"http://www.winehq.org/tests/../tests/..",
"tests7/..", 0,
"http://www.winehq.org/"},
210 {
"http://www.winehq.org/tests/?query=x&return=y",
"tests8", 0,
"http://www.winehq.org/tests/tests8"},
211 {
"http://www.winehq.org/tests/#example",
"tests9", 0,
"http://www.winehq.org/tests/tests9"},
212 {
"http://www.winehq.org/tests/../tests/",
"/tests10/..",
URL_DONT_SIMPLIFY,
"http://www.winehq.org/tests10/.."},
213 {
"http://www.winehq.org/tests/../",
"tests11",
URL_DONT_SIMPLIFY,
"http://www.winehq.org/tests/../tests11"},
214 {
"http://www.winehq.org/test12",
"#", 0,
"http://www.winehq.org/test12#"},
215 {
"http://www.winehq.org/test13#aaa",
"#bbb", 0,
"http://www.winehq.org/test13#bbb"},
216 {
"http://www.winehq.org/test14#aaa/bbb#ccc",
"#", 0,
"http://www.winehq.org/test14#"},
217 {
"http://www.winehq.org/tests/?query=x/y/z",
"tests15", 0,
"http://www.winehq.org/tests/tests15"},
218 {
"http://www.winehq.org/tests/?query=x/y/z#example",
"tests16", 0,
"http://www.winehq.org/tests/tests16"},
219 {
"file:///C:\\dir\\file.txt",
"test.txt", 0,
"file:///C:/dir/test.txt"},
220 {
"file:///C:\\dir\\file.txt#hash\\hash",
"test.txt", 0,
"file:///C:/dir/file.txt#hash/test.txt"},
221 {
"file:///C:\\dir\\file.html#hash\\hash",
"test.html", 0,
"file:///C:/dir/test.html"},
222 {
"file:///C:\\dir\\file.htm#hash\\hash",
"test.htm", 0,
"file:///C:/dir/test.htm"},
223 {
"file:///C:\\dir\\file.hTmL#hash\\hash",
"test.hTmL", 0,
"file:///C:/dir/test.hTmL"},
224 {
"file:///C:\\dir.html\\file.txt#hash\\hash",
"test.txt", 0,
"file:///C:/dir.html/file.txt#hash/test.txt"},
225 {
"C:\\winehq\\winehq.txt",
"C:\\Test\\test.txt", 0,
"file:///C:/Test/test.txt"},
226 {
"http://www.winehq.org/test/",
"test%20file.txt", 0,
"http://www.winehq.org/test/test%20file.txt"},
227 {
"http://www.winehq.org/test/",
"test%20file.txt",
URL_FILE_USE_PATHURL,
"http://www.winehq.org/test/test%20file.txt"},
228 {
"http://www.winehq.org%2ftest/",
"test%20file.txt",
URL_FILE_USE_PATHURL,
"http://www.winehq.org%2ftest/test%20file.txt"},
229 {
"xxx:@MSITStore:file.chm/file.html",
"dir/file", 0,
"xxx:dir/file"},
230 {
"mk:@MSITStore:file.chm::/file.html",
"/dir/file", 0,
"mk:@MSITStore:file.chm::/dir/file"},
231 {
"mk:@MSITStore:file.chm::/file.html",
"mk:@MSITStore:file.chm::/dir/file", 0,
"mk:@MSITStore:file.chm::/dir/file"},
232 {
"foo:today",
"foo:calendar", 0,
"foo:calendar"},
233 {
"foo:today",
"bar:calendar", 0,
"bar:calendar"},
234 {
"foo:/today",
"foo:calendar", 0,
"foo:/calendar"},
235 {
"Foo:/today/",
"fOo:calendar", 0,
"foo:/today/calendar"},
236 {
"mk:@MSITStore:dir/test.chm::dir/index.html",
"image.jpg", 0,
"mk:@MSITStore:dir/test.chm::dir/image.jpg"},
237 {
"mk:@MSITStore:dir/test.chm::dir/dir2/index.html",
"../image.jpg", 0,
"mk:@MSITStore:dir/test.chm::dir/image.jpg"},
238 {
"c:\\test\\",
"//share/file.txt", 0,
"file://share/file.txt"},
239 {
"c:\\test\\",
"\\\\share\\file.txt", 0,
"file://share/file.txt"},
241 {
"outbind://xxxxxxxxx",
"http://wine1/dir", 0,
"http://wine1/dir"},
242 {
"xxxx://xxxxxxxxx",
"http://wine2/dir", 0,
"http://wine2/dir"},
243 {
"ftp://xxxxxxxxx/",
"http://wine3/dir", 0,
"http://wine3/dir"},
247 {
"http://xxxxxxxxx",
"outbind://wine7/dir", 0,
"outbind://wine7/dir"},
248 {
"xxx://xxxxxxxxx",
"ftp://wine8/dir", 0,
"ftp://wine8/dir"},
249 {
"ftp://xxxxxxxxx/",
"xxx://wine9/dir", 0,
"xxx://wine9/dir"},
253 {
"http://xxxxxxxxx",
"outbind:wine13/dir", 0,
"outbind:wine13/dir"},
254 {
"xxx://xxxxxxxxx",
"ftp:wine14/dir", 0,
"ftp:wine14/dir"},
255 {
"ftp://xxxxxxxxx/",
"xxx:wine15/dir", 0,
"xxx:wine15/dir"},
256 {
"outbind://xxxxxxxxx/",
"http:wine16/dir", 0,
"http:wine16/dir"},
271 {
"foo",
"file:foo",
S_OK},
272 {
"foo\\bar",
"file:foo/bar",
S_OK},
273 {
"\\foo\\bar",
"file:///foo/bar",
S_OK},
274 {
"c:\\foo\\bar",
"file:///c:/foo/bar",
S_OK},
275 {
"c:foo\\bar",
"file:///c:foo/bar",
S_OK},
276 {
"c:\\foo/b a%r",
"file:///c:/foo/b%20a%25r",
S_OK},
277 {
"c:\\foo\\foo bar",
"file:///c:/foo/foo%20bar",
S_OK},
278 {
"file:///c:/foo/bar",
"file:///c:/foo/bar",
S_FALSE},
279 {
"xx:c:\\foo\\bar",
"xx:c:\\foo\\bar",
S_FALSE}
288 {
"file://foo/bar",
"file://foo/bar"},
289 {
"file://fo%20o%5Ca/bar",
"file://fo o\\a/bar"},
290 {
"file://%24%25foobar",
"file://$%foobar"}
300 {
L"file://foo/bar",
L"file://foo/bar" },
301 {
L"file://fo%20o%5Ca/bar",
L"file://fo o\\a/bar" },
302 {
L"file://%24%25foobar",
L"file://$%foobar" },
303 {
L"file:///C:/Program Files",
L"file:///C:/Program Files" },
305 {
L"file:///C:/Program%20Files",
L"file:///C:/Program Files" },
307 {
L"file://foo/%E4%B8%AD%E6%96%87/bar",
L"file://foo/\xe4\xb8\xad\xe6\x96\x87/bar" },
311 {
L"file://foo/%F0%9F%8D%B7/bar",
L"file://foo/\xf0\x9f\x8d\xb7/bar" },
314#if defined(__REACTOS__) && defined(_MSC_VER)
330 {
"http://foo/bar",
TRUE},
331 {
"c:\\foo\\bar",
FALSE},
332 {
"foo://foo/bar",
TRUE},
335 {
"bogusscheme:",
TRUE},
336 {
"http:partial",
TRUE}
369 {
"mailto://www.winehq.org/test.html",
TRUE,
FALSE },
431 ok(!
wcscmp(newurlW, expectW),
"Test %lu: Expected %s, got %s.\n",
448 ok(
len ==
i,
"got len %ld (expected %ld)\n",
len,
i);
480 DWORD dwHash1, dwHash2;
482 ok(
res ==
S_OK,
"UrlHashA returned 0x%lx (expected S_OK) for %s\n",
res, szUrl);
485 ok(
res ==
S_OK,
"UrlHashW returned 0x%lx (expected S_OK) for %s\n",
res, szUrl);
486 ok(dwHash1 == dwHash2,
487 "Hashes didn't match (A: 0x%lx, W: 0x%lx) for %s\n", dwHash1, dwHash2, szUrl);
523 {
"http://foo:bar@localhost:21/internal.php?query=x&return=y",
URL_PART_SCHEME, 0,
S_OK,
"http"},
526 {
"http://foo:bar@localhost:21/internal.php?query=x&return=y",
URL_PART_HOSTNAME, 0,
S_OK,
"localhost"},
527 {
"http://foo:bar@localhost:21/internal.php?query=x&return=y",
URL_PART_PORT, 0,
S_OK,
"21"},
528 {
"http://foo:bar@localhost:21/internal.php?query=x&return=y",
URL_PART_QUERY, 0,
S_OK,
"query=x&return=y"},
590 {
"http://foo:bar@google.*.com:21/internal.php?query=x&return=y",
URL_PART_HOSTNAME, 0,
S_OK,
"google.*.com"},
591 {
"http:// !\"$%&'()*+,-.;<=>[]^_`{|~}:pass@host",
URL_PART_USERNAME, 0,
S_OK,
" !\"$%&'()*+,-.;<=>[]^_`{|~}"},
592 {
"http://user: !\"$%&'()*+,-.;<=>[]^_`{|~}@host",
URL_PART_PASSWORD, 0,
S_OK,
" !\"$%&'()*+,-.;<=>[]^_`{|~}"},
594 {
"http://host: !\"$%&'()*+,-.;<=>[]^_`{|~}",
URL_PART_PORT, 0,
S_OK,
" !\"$%&'()*+,-.;<=>[]^_`{|~}"},
609 {
"x-excid://36C00000/guid:{048B4E89-2E92-496F-A837-33BA02FF6D32}/Message.htm",
URL_PART_SCHEME, 0,
S_OK,
"x-excid"},
611 {
"x-excid://36C00000/guid:{048B4E89-2E92-496F-A837-33BA02FF6D32}/Message.htm",
URL_PART_QUERY, 0,
S_FALSE,
""},
684 skip(
"UrlGetPart test list broken on WS03.\n");
685 goto skip_UrlGetPartTestList;
691 WCHAR urlW[200], expectW[200];
781skip_UrlGetPartTestList:
815 ok(
hr ==
S_OK,
"Got unexpected hr %#lx.\n",
hr);
832 char empty_string[] =
"";
836 ok(
size == 0,
"got %ld, expected %d\n",
size, 0);
841 ok(
size == 0,
"got %ld, expected %d\n",
size, 0);
846 ok(
size == 1,
"got %ld, expected %d\n",
size, 1);
851 ok(
size == 1,
"got %ld, expected %d\n",
size, 1);
854 empty_string[0] = 127;
857 ok(
size == 34,
"got %ld, expected %d\n",
size, 34);
858 ok(empty_string[0] == 127,
"String has changed, empty_string[0] = %d\n", empty_string[0]);
861 empty_string[0] = 127;
868 ok(
size == 1,
"Got unexpected size %lu.\n",
size);
870 ok(empty_string[0] == 127,
"String has changed, empty_string[0] = %d\n", empty_string[0]);
886 WCHAR overwrite[10] =
L"foo bar";
887 WCHAR empty_string[] = {0};
906 ok(
size == 0,
"got %ld, expected %d\n",
size, 0);
914 ok(
size == 0,
"got %ld, expected %d\n",
size, 0);
922 ok(
size == 1,
"got %ld, expected %d\n",
size, 1);
930 ok(
size == 6,
"got %ld, expected %d\n",
size, 6);
938 ok(!
wcscmp(overwrite,
L"foo%20bar"),
"Got unexpected string %s.\n",
debugstr_w(overwrite));
944 ok(
size == 10,
"got %ld, expected 10\n",
size);
945 ok(wc == 127,
"String has changed, wc = %d\n", wc);
951 ok(!
wcscmp(ret_urlW,
L"ftp%1F%FF%FA\x2122q/"),
"Got unexpected string %s.\n",
debugstr_w(ret_urlW));
955 WCHAR *urlW, *expected_urlW;
962 ok(!
lstrcmpW(ret_urlW, expected_urlW),
"Expected %s, but got %s for %s flags %08lx\n",
973 if ((
i == 6 ||
i == 7) && (_ntMajor < 6 || (_ntMajor == 6 && _ntMinor == 0)))
998 unsigned int f,
i,
j;
1023 {
"//a/", 0,
"//a/"},
1024 {
"//a/b", 0,
"//a/b"},
1025 {
"//a/b/", 0,
"//a/b/"},
1027 {
"//./", 0,
"//./"},
1028 {
"//./a", 0,
"//./a"},
1029 {
"//././a", 0,
"//./a"},
1030 {
"//a/.", 0,
"//a/"},
1031 {
"//a/./", 0,
"//a/"},
1032 {
"//a/./b", 0,
"//a/b"},
1033 {
"///./a", 0,
"///a"},
1034 {
"//a/.b/", 0,
"//a/.b/"},
1035 {
"//a/b./", 0,
"//a/b./"},
1037 {
"//..", 0,
"//../"},
1038 {
"//../", 0,
"//../"},
1039 {
"//../a", 0,
"//../a"},
1040 {
"//../a/..", 0,
"//../"},
1041 {
"//.././..", 0,
"//../../"},
1042 {
"//../a/../..", 0,
"//../../"},
1043 {
"//./a/../..", 0,
"//./../"},
1044 {
"//a/..", 0,
"//a/../"},
1045 {
"//a/../../b/./c/..", 0,
"//a/../../b/"},
1046 {
"//a/b/..", 0,
"//a/"},
1047 {
"//a/b/...", 0,
"//a/b/..."},
1048 {
"//a/b/../", 0,
"//a/"},
1049 {
"//a/b/../c", 0,
"//a/c"},
1050 {
"//a/b/../c/..", 0,
"//a/"},
1051 {
"//a/b/../c/../..", 0,
"//a/../"},
1052 {
"//a/b/../../../c", 0,
"//a/../../c"},
1053 {
"///..", 0,
"///../"},
1054 {
"////..", 0,
"///"},
1055 {
"//a/..b/", 0,
"//a/..b/"},
1056 {
"//a/b../", 0,
"//a/b../"},
1057 {
"//A/B", 0,
"//A/B"},
1084 {
"//a/b?c/./d", 0,
"//a/b?c/./d"},
1085 {
"//a/b#c/./d", 0,
"//a/b#c/./d"},
1086 {
"//a/b#c/.", 0,
"//a/b#c/."},
1088 {
"//a/b/.?", 0,
"//a/b/?"},
1089 {
"//a/b/..?", 0,
"//a/?"},
1091 {
"//a/b/.#", 0,
"//a/b/#"},
1092 {
"//a/b/..#", 0,
"//a/#"},
1094 {
"//a/..?", 0,
"//a/../?"},
1095 {
"//a/..#", 0,
"//a/../#"},
1096 {
"//..?", 0,
"//../?"},
1097 {
"//..#", 0,
"//../#"},
1098 {
"//?/a/./", 0,
"///?/a/./"},
1099 {
"//#/a/./", 0,
"///#/a/./"},
1101 {
"//a/b#c?d", 0,
"//a/b?d#c"},
1102 {
"//a/b?c#d?e", 0,
"//a/b?c#d?e"},
1103 {
"//a/b#c?d#e", 0,
"//a/b?d#e#c"},
1104 {
"//a/b#c#d?e", 0,
"//a/b?e#c#d"},
1105 {
"//a/b#c?d?e", 0,
"//a/b?d?e#c"},
1108 {
"//a/b\\c/../.\\", 0,
"//a/.\\"},
1109 {
"//a\\b/../", 0,
"//a\\b/../"},
1110 {
"//a/b\\../", 0,
"//a/b\\../"},
1111 {
"//a/b/..\\", 0,
"//a/b/..\\"},
1114 {
"//a/b &c", 0,
"//a/b &c"},
1124 {
"/././a", 0,
"/a"},
1126 {
"/a/./", 0,
"/a/"},
1127 {
"/a/./b", 0,
"/a/b"},
1130 {
"/../", 0,
"/../"},
1131 {
"/../a", 0,
"/../a"},
1132 {
"/../a/..", 0,
"/../"},
1134 {
"/a/../..", 0,
"/../"},
1135 {
"/a/b/..", 0,
"/a/"},
1136 {
"/a/b/../", 0,
"/a/"},
1137 {
"/a/b/../c", 0,
"/a/c"},
1138 {
"/a/b/../c/..", 0,
"/a/"},
1139 {
"/a/b/../c/../..", 0,
"/"},
1141 {
"/a/b?c/./d", 0,
"/a/b?c/./d"},
1142 {
"/a/b#c/./d", 0,
"/a/b#c/./d"},
1143 {
"/a/b#c?d", 0,
"/a/b?d#c"},
1146 {
"/a/b\\c/../.\\", 0,
"/a/.\\"},
1147 {
"/a/b\\/c", 0,
"/a/b\\/c"},
1148 {
"/a/b\\.c", 0,
"/a/b\\.c"},
1153 {
"/\\././a", 0,
"/a"},
1156 {
"/\\/././a", 0,
"//a"},
1157 {
"/\\/././a/", 0,
"//a/"},
1159 {
"//a/\\b", 0,
"//a/\\b"},
1161 {
"/a/b &c", 0,
"/a/b &c"},
1171 const char *expect_ftp;
1188 {
"//a/", 0,
"//a/"},
1189 {
"//a/b", 0,
"//a/b"},
1190 {
"//a/b/", 0,
"//a/b/"},
1192 {
"//./", 0,
"//./"},
1193 {
"//././a/.", 0,
"//././a/."},
1194 {
"//a/.", 0,
"//a/."},
1195 {
"//a/./b/./../", 0,
"//a/./b/./../"},
1196 {
"//a/b/.", 0,
"//a/b/"},
1198 {
"//a/b/./", 0,
"//a/b/"},
1199 {
"//a/b/./c", 0,
"//a/b/c"},
1200 {
"///./a", 0,
"///./a"},
1201 {
"////./a", 0,
"////a"},
1203 {
"//..", 0,
"//../"},
1204 {
"//../", 0,
"//../"},
1205 {
"//../a", 0,
"//../a"},
1206 {
"//../a/..", 0,
"//../"},
1207 {
"//../a/../..", 0,
"//../"},
1208 {
"//./a/../..", 0,
"//./"},
1209 {
"//a/../", 0,
"//a/../"},
1210 {
"//a/../../b/./../", 0,
"//a/../../b/./../"},
1211 {
"//a/.././", 0,
"//a/.././"},
1212 {
"//a/b/..", 0,
"//a/"},
1214 {
"//a/b/../", 0,
"//a/"},
1215 {
"//a/b/.././", 0,
"//a/"},
1216 {
"//a/b/../c", 0,
"//a/c"},
1217 {
"//a/b/../c/..", 0,
"//a/"},
1218 {
"//a/b/../c/../..", 0,
"//a/"},
1219 {
"//a/b/../../../c", 0,
"//a/c"},
1220 {
"///a/.", 0,
"///a/"},
1221 {
"///..", 0,
"///.."},
1222 {
"////..", 0,
"///"},
1223 {
"//a//../../..", 0,
"//a/"},
1225 {
"//a/b?c/./d", 0,
"//a/b?c/./d"},
1226 {
"//a/b#c/./d", 0,
"//a/b#c/./d"},
1227 {
"//a/b#c?d", 0,
"//a/b#c?d"},
1228 {
"//a/b?c#d", 0,
"//a/b?c#d"},
1230 {
"//localhost/b", 0,
"//localhost/b"},
1239 {
"//a/b\\", 0,
"//a/b/",
"//a/b\\"},
1240 {
"//a/b\\./c", 0,
"//a/b/c",
"//a/b\\c"},
1241 {
"//a/b/.\\c", 0,
"//a/b/c"},
1242 {
"//a/b\\c/../.\\", 0,
"//a/b/",
"//a/b\\"},
1243 {
"//a\\b", 0,
"//a/b",
"//a\\b/"},
1244 {
"//a\\b/..", 0,
"//a/",
"//a\\b/.."},
1245 {
"//a/b\\c", 0,
"//a/b/c",
"//a/b\\c"},
1246 {
"/\\a\\..", 0,
"//a/..",
"/\\a\\../"},
1247 {
"\\/a\\..", 0,
"//a/..",
"\\/a\\../"},
1249 {
"//a/b &c", 0,
"//a/b &c"},
1272 {
"a/b?c/.\\d", 0,
"a/b?c/.\\d"},
1273 {
"a/b#c/.\\d", 0,
"a/b#c/.\\d"},
1275 {
"a\\b\\", 0,
"a/b/",
"a\\b\\"},
1277 {
"a/b &c", 0,
"a/b &c"},
1285 {
"//www.winehq.org/tests/foo%20bar", 0,
"//www.winehq.org/tests/foo%20bar"},
1286 {
"//www.winehq.org/tests/foo%20bar",
URL_UNESCAPE,
"//www.winehq.org/tests/foo bar"},
1287 {
"//www.winehq.org/%E6%A1%9C.html", 0,
"//www.winehq.org/%E6%A1%9C.html"},
1294 {
"//a/b/./c/../d\\e", 0,
"//a/b/./c/../d\\e"},
1295 {
"/a/b/./c/../d\\e", 0,
"/a/b/./c/../d\\e"},
1296 {
"a/b/./c/../d\\e", 0,
"a/b/./c/../d\\e"},
1298 {
"//a/b &c", 0,
"//a/b &c"},
1313 {
"file://", 0,
"file:///"},
1314 {
"file://a", 0,
"file://a/"},
1315 {
"file://a/", 0,
"file://a/"},
1316 {
"file://a//", 0,
"file://a//"},
1317 {
"file://a/b", 0,
"file://a/b"},
1318 {
"file://a/b/", 0,
"file://a/b/"},
1319 {
"file://.", 0,
"file://./"},
1320 {
"file://./", 0,
"file://./"},
1321 {
"file://././a/.", 0,
"file://././a/."},
1322 {
"file://a/.", 0,
"file://a/."},
1323 {
"file://a/./b/./../", 0,
"file://a/./b/./../"},
1324 {
"file://a/b/.", 0,
"file://a/b/"},
1326 {
"file://a/b/./", 0,
"file://a/b/"},
1327 {
"file://a/b/./c", 0,
"file://a/b/c"},
1328 {
"file:///./a", 0,
"file:///./a"},
1329 {
"file:////./a", 0,
"file://./a"},
1331 {
"file://..", 0,
"file://../"},
1332 {
"file://../", 0,
"file://../"},
1333 {
"file://../a", 0,
"file://../a"},
1334 {
"file://../a/..", 0,
"file://../"},
1335 {
"file://../a/../..", 0,
"file://../"},
1336 {
"file://./a/../..", 0,
"file://./"},
1337 {
"file://a/../", 0,
"file://a/../"},
1338 {
"file://a/../../b/./../", 0,
"file://a/../../b/./../"},
1339 {
"file://a/.././", 0,
"file://a/.././"},
1340 {
"file://a/b/..", 0,
"file://a/"},
1341 {
"file://a/b/../", 0,
"file://a/"},
1342 {
"file://a/b/.././", 0,
"file://a/"},
1343 {
"file://a/b/../c", 0,
"file://a/c"},
1344 {
"file://a/b/../c/..", 0,
"file://a/"},
1345 {
"file://a/b/../c/../..", 0,
"file://a/"},
1346 {
"file://a/b/../../../c", 0,
"file://a/c"},
1347 {
"file:///.", 0,
"file:///."},
1348 {
"file:///..", 0,
"file:///.."},
1349 {
"file:///a/.", 0,
"file:///a/"},
1351 {
"file:////", 0,
"file:///"},
1352 {
"file:////a/./b/../c", 0,
"file://a/./b/../c"},
1353 {
"file://///a/./b/../c", 0,
"file://a/./b/../c"},
1354 {
"file://////a/./b/../c", 0,
"file://a/./b/../c"},
1355 {
"file:////a/b/./../c", 0,
"file://a/c"},
1356 {
"file:////a/b/./../..", 0,
"file://a/"},
1357 {
"file://///a/b/./../c", 0,
"file://a/c"},
1358 {
"file://////a/b/./../c", 0,
"file://a/c"},
1359 {
"file:////.", 0,
"file://./"},
1360 {
"file:////..", 0,
"file://../"},
1361 {
"file:////./b/./../c", 0,
"file://./c"},
1362 {
"file:////./b/./../..", 0,
"file://./"},
1363 {
"file://///./b/./../c", 0,
"file://./c"},
1364 {
"file://////./b/./../c", 0,
"file://./c"},
1369 {
"file://a:", 0,
"file:///a:"},
1370 {
"file://a:/b", 0,
"file:///a:/b"},
1371 {
"file://a:/b/../..", 0,
"file:///a:/"},
1372 {
"file://a:/./../..", 0,
"file:///a:/./../.."},
1373 {
"file://a|/b", 0,
"file:///a|/b"},
1374 {
"file://ab:/c", 0,
"file://ab:/c"},
1375 {
"file:///a:", 0,
"file:///a:"},
1376 {
"file:////a:", 0,
"file:///a:"},
1377 {
"file://///a:", 0,
"file:///a:"},
1378 {
"file://host/a:/b/../..", 0,
"file://host/a:/"},
1464 {
"file://localhost/a", 0,
"file://localhost/a"},
1465 {
"file://localhost//a", 0,
"file://localhost//a"},
1466 {
"file://localhost/a:", 0,
"file://localhost/a:"},
1467 {
"file://localhost/a:/b/../..", 0,
"file://localhost/a:/"},
1468 {
"file://localhost/a:/./../..", 0,
"file://localhost/a:/./../.."},
1519 {
"file://a/b#c/../d\\e", 0,
"file://a/d/e"},
1520 {
"file://a/b#c/./d\\e", 0,
"file://a/b#c/d/e"},
1521 {
"file://a/b.htm#c/../d\\e", 0,
"file://a/b.htm#c/../d\\e"},
1522 {
"file://a/b.html#c/../d\\e", 0,
"file://a/b.html#c/../d\\e"},
1523 {
"file://a/b.hTmL#c/../d\\e", 0,
"file://a/b.hTmL#c/../d\\e"},
1524 {
"file://a/b.xhtml#c/../d\\e", 0,
"file://a/d/e"},
1525 {
"file://a/b.php#c/../d\\e", 0,
"file://a/d/e"},
1526 {
"file://a/b.asp#c/../d\\e", 0,
"file://a/d/e"},
1527 {
"file://a/b.aspx#c/../d\\e", 0,
"file://a/d/e"},
1528 {
"file://a/b.ht#c/../d\\e", 0,
"file://a/d/e"},
1529 {
"file://a/b.txt#c/../d\\e", 0,
"file://a/d/e"},
1530 {
"file://a/b.htmlq#c/../d\\e", 0,
"file://a/d/e"},
1531 {
"file://a/b.html/q#c/../d\\e", 0,
"file://a/b.html/d/e"},
1532 {
"file://a/.html#c/../d\\e", 0,
"file://a/.html#c/../d\\e"},
1533 {
"file://a/html#c/../d\\e", 0,
"file://a/d/e"},
1534 {
"file://a/b#c/./d.html#e/../f", 0,
"file://a/b#c/d.html#e/../f"},
1535 {
"file://a.html#/b/../c", 0,
"file://a.html#/c"},
1543 {
"file://a/c#/../d", 0,
"file://a/d"},
1546 {
"file://a/#c/../d\\e", 0,
"file://a/#c/../d\\e"},
1549 {
"file://a//#c/../d", 0,
"file://a//#c/../d"},
1552 {
"file://a/\\#c/../d", 0,
"file://a//#c/../d"},
1553 {
"file://a///#c/../d", 0,
"file://a///d"},
1554 {
"file://a/b/#c/../d", 0,
"file://a/b/d"},
1555 {
"file://a/b/.#c", 0,
"file://a/b/#c"},
1556 {
"file://a/b/..#c", 0,
"file://a/#c"},
1561 {
"file://a/b#../c", 0,
"file://a/b#../c"},
1562 {
"file://a/b/#../c", 0,
"file://a/b/#../c"},
1565 {
"file://#/b\\./", 0,
"file://#/b/"},
1566 {
"file://#/./b\\./", 0,
"file://#/./b/./"},
1569 {
"file://a#/b\\./", 0,
"file://a#/b/"},
1570 {
"file://a#/./b\\./", 0,
"file://a#/./b/./"},
1575 {
"file://a#/b/../../", 0,
"file://a#/"},
1588 {
"file://a/b?c/../d\\e", 0,
"file://a/d/e"},
1589 {
"file://a/b.html?c/../d\\e", 0,
"file://a/d/e"},
1595 {
"file://a/?c/../d", 0,
"file://a/?c/../d"},
1598 {
"file://a//?c/../d", 0,
"file://a//?c/../d"},
1601 {
"file://a/\\?c/../d", 0,
"file://a//?c/../d"},
1602 {
"file://a///?c/../d", 0,
"file://a///d"},
1603 {
"file://a/b/?c/../d", 0,
"file://a/b/d"},
1604 {
"file://a/b/.?c", 0,
"file://a/b/?c"},
1605 {
"file://a/b/..?c", 0,
"file://a/?c"},
1610 {
"file://?/a\\./", 0,
"file://?/a/"},
1611 {
"file://?/./a\\./", 0,
"file://?/./a/./"},
1614 {
"file://a?/a\\./", 0,
"file://a?/a/"},
1615 {
"file://a?/./a\\./", 0,
"file://a?/./a/./"},
1619 {
"file://a/b.html?c#d/..", 0,
"file://a/"},
1620 {
"file://a/b.html?c.html#d/..", 0,
"file://a/b.html?c.html#d/.."},
1621 {
"file://a/b?\\#c\\d", 0,
"file://a/b?/#c/d"},
1624 {
"file://a/b#\\?c\\d", 0,
"file://a/b#/?c/d"},
1631 {
"file://a/b\\", 0,
"file://a/b/"},
1632 {
"file://a/b\\c/../.\\", 0,
"file://a/b/"},
1633 {
"file://a\\b", 0,
"file://a/b"},
1634 {
"file:/\\a\\..", 0,
"file://a/.."},
1635 {
"file:\\/a\\..", 0,
"file://a/.."},
1638 {
"file:\\///a/./b/../c", 0,
"file://a/./b/../c"},
1639 {
"file:/\\//a/./b/../c", 0,
"file://a/./b/../c"},
1640 {
"file://\\/a/./b/../c", 0,
"file://a/./b/../c"},
1641 {
"file:///\\a/./b/../c", 0,
"file://a/./b/../c"},
1643 {
"file://a/b &c", 0,
"file://a/b &c"},
1646 {
"file://a/b !\"$%&'()*+,-:;<=>@[]^_`{|}~c",
URL_ESCAPE_UNSAFE,
"file://a/b%20!%22$%%26'()*+,-:;%3C=%3E@%5B%5D%5E_%60%7B%7C%7D~c"},
1647 {
"file://a/b%20%26c", 0,
"file://a/b%20%26c"},
1654 {
"file:/", 0,
"file:///"},
1655 {
"file:/a", 0,
"file:///a"},
1656 {
"file:/./a", 0,
"file:///./a"},
1657 {
"file:/../a/..", 0,
"file:///../a/.."},
1658 {
"file:/./..", 0,
"file:///./.."},
1659 {
"file:/a/.", 0,
"file:///a/"},
1660 {
"file:/a/../..", 0,
"file:///"},
1661 {
"file:/a:", 0,
"file:///a:"},
1662 {
"file:/a:/b/../..", 0,
"file:///a:/"},
1681 {
"file:/a/b#c/../d", 0,
"file:///a/d"},
1682 {
"file:/a/b?c/../d", 0,
"file:///a/d"},
1684 {
"file:/a\\b\\", 0,
"file:///a/b/"},
1685 {
"file:\\a/b/", 0,
"file:///a/b/"},
1689 {
"file:/a/b &c", 0,
"file:///a/b &c"},
1694 {
"file:a", 0,
"file:a"},
1695 {
"file:a/", 0,
"file:a/"},
1696 {
"file:a/.", 0,
"file:a/"},
1697 {
"file:a/..", 0,
"file:"},
1698 {
"file:a/../..", 0,
"file:"},
1699 {
"file:", 0,
"file:"},
1700 {
"file:.", 0,
"file:"},
1701 {
"file:..", 0,
"file:"},
1702 {
"file:./", 0,
"file:"},
1703 {
"file:../", 0,
"file:"},
1705 {
"file:a:", 0,
"file:///a:"},
1727 {
"file:a/b?c/../d", 0,
"file:a/d"},
1728 {
"file:a/b#c/../d", 0,
"file:a/d"},
1730 {
"file:a\\b\\", 0,
"file:a/b/"},
1732 {
"file:a/b &c", 0,
"file:a/b &c"},
1734 {
"fIlE://A/B", 0,
"file://A/B"},
1737 {
"fIlE:A:/B", 0,
"file:///A:/B"},
1740 {
"fIlE://lOcAlHoSt/B", 0,
"file://lOcAlHoSt/B"},
1746 {
"q:a", 0,
"file:///q:a"},
1747 {
"q:a/.", 0,
"file:///q:a/"},
1748 {
"q:a/..", 0,
"file:///q:"},
1749 {
"q:a/../..", 0,
"file:///q:"},
1750 {
"q:./a/..", 0,
"file:///q:./a/.."},
1751 {
"q:../a/..", 0,
"file:///q:../a/.."},
1752 {
"q:/", 0,
"file:///q:/"},
1753 {
"q:/a", 0,
"file:///q:/a"},
1754 {
"q:/a/.", 0,
"file:///q:/a/"},
1755 {
"q:/a/..", 0,
"file:///q:/"},
1756 {
"q:/./a/..", 0,
"file:///q:/./a/.."},
1757 {
"q:/../a/..", 0,
"file:///q:/../a/.."},
1758 {
"q://./a", 0,
"file:///q://a"},
1759 {
"q://../a", 0,
"file:///q:/a"},
1773 {
"q:/a/b?c/../d", 0,
"file:///q:/a/d"},
1774 {
"q:/a/b#c/../d", 0,
"file:///q:/a/d"},
1777 {
"q:a\\b\\", 0,
"file:///q:a/b/"},
1778 {
"q:\\a/b", 0,
"file:///q:/a/b"},
1783 {
"q:/a/b !\"$%&'()*+,-:;<=>@[]^_`{|}~c", 0,
"file:///q:/a/b%20!%22$%25%26'()*+,-:;%3C=%3E@%5B%5D%5E_%60%7B%7C%7D~c"},
1787 {
"q:/a/b%20%26c", 0,
"file:///q:/a/b%2520%2526c"},
1795 {
"q|a", 0,
"file:///q%7Ca"},
1797 {
"Q:A", 0,
"file:///Q:A"},
1802 {
"\\\\", 0,
"file:///"},
1803 {
"\\\\a", 0,
"file://a/"},
1804 {
"\\\\../a\\b/..\\c/.\\", 0,
"file://../a/c/"},
1805 {
"\\\\a/./b/../c", 0,
"file://a/./b/../c"},
1807 {
"\\\\//./b/./../c", 0,
"file://./c"},
1808 {
"\\\\///./b/./../c", 0,
"file://./c"},
1810 {
"\\\\a/b?c/../d", 0,
"file://a/d"},
1811 {
"\\\\a/b#c/../d", 0,
"file://a/d"},
1816 {
"\\\\a:/b", 0,
"file:///a:/b"},
1828 {
"\\\\a/b !\"$%&'()*+,-:;<=>@[]^_`{|}~c", 0,
"file://a/b%20!%22$%25%26'()*+,-:;%3C=%3E@%5B%5D%5E_%60%7B%7C%7D~c"},
1832 {
"\\\\/b", 0,
"file:///b"},
1839 {
"\\\\A/B", 0,
"file://A/B"},
1841 {
"file:///c:/tests/foo%20bar",
URL_UNESCAPE,
"file:///c:/tests/foo bar"},
1842 {
"file:///c:/tests\\foo%20bar",
URL_UNESCAPE,
"file:///c:/tests/foo bar"},
1843 {
"file:///c:/tests/foo%20bar", 0,
"file:///c:/tests/foo%20bar"},
1845 {
"file://localhost/c:/tests/../tests/foo%20bar",
URL_FILE_USE_PATHURL,
"file://c:\\tests\\foo bar"},
1846 {
"file://localhost\\c:/tests/../tests/foo%20bar",
URL_FILE_USE_PATHURL,
"file://c:\\tests\\foo bar"},
1847 {
"file://localhost\\\\c:/tests/../tests/foo%20bar",
URL_FILE_USE_PATHURL,
"file://c:\\tests\\foo bar"},
1848 {
"file://localhost\\c:\\tests/../tests/foo%20bar",
URL_FILE_USE_PATHURL,
"file://c:\\tests\\foo bar"},
1853 {
"file:///c:\\tests\\foo bar", 0,
"file:///c:/tests/foo bar"},
1855 {
"file:///c:\\tests\\foobar", 0,
"file:///c:/tests/foobar"},
1857 {
"file://home/user/file", 0,
"file://home/user/file"},
1858 {
"file:///home/user/file", 0,
"file:///home/user/file"},
1859 {
"file:////home/user/file", 0,
"file://home/user/file"},
1864 {
"file://C:/user/file", 0,
"file:///C:/user/file"},
1865 {
"file://C:/user/file/../asdf", 0,
"file:///C:/user/asdf"},
1866 {
"file:///C:/user/file", 0,
"file:///C:/user/file"},
1867 {
"file:////C:/user/file", 0,
"file:///C:/user/file"},
1881 {
"wine:.", 0,
"wine:"},
1883 {
"wine:./", 0,
"wine:./"},
1884 {
"wine:..", 0,
"wine:.."},
1885 {
"wine:../", 0,
"wine:../"},
1886 {
"wine:a", 0,
"wine:a"},
1887 {
"wine:a/", 0,
"wine:a/"},
1888 {
"wine:a/b/./../c", 0,
"wine:a/b/./../c"},
1890 {
"wine:a/b?c/./d", 0,
"wine:a/b?c/./d"},
1891 {
"wine:a/b#c/./d", 0,
"wine:a/b#c/./d"},
1892 {
"wine:a/b#c?d", 0,
"wine:a/b?d#c"},
1893 {
"wine:.#c?d", 0,
"wine:?d#c"},
1896 {
"wine:\\././a", 0,
"wine:\\././a"},
1898 {
"wine:a/b &c", 0,
"wine:a/b &c"},
1913 {
"a/./b", 0,
"a/b"},
1917 {
"../a", 0,
"../a"},
1918 {
"../a/..", 0,
"../"},
1920 {
"a/../..", 0,
"../"},
1921 {
"a/b/..", 0,
"a/"},
1922 {
"a/b/../", 0,
"a/"},
1923 {
"a/b/../c", 0,
"a/c"},
1924 {
"a/b/../c/..", 0,
"a/"},
1925 {
"a/b/../c/../..", 0,
"/"},
1927 {
"a/b?c/./d", 0,
"a/b?c/./d"},
1928 {
"a/b#c/./d", 0,
"a/b#c/./d"},
1929 {
"a/b#c?d", 0,
"a/b?d#c"},
1933 {
"?c/./d", 0,
"?c/./d"},
1934 {
"#c/./d", 0,
"#c/./d"},
1936 {
"a\\b/..", 0,
"/"},
1938 {
"a/b &c", 0,
"a/b &c"},
1941 {
"://../../a", 0,
"a"},
1948 {
"mk:..", 0,
"mk:"},
1949 {
"mk:/", 0,
"mk:/"},
1950 {
"mk:/.", 0,
"mk:/"},
1951 {
"mk:/..", 0,
"mk:"},
1952 {
"mk:a", 0,
"mk:a"},
1953 {
"mk:a:", 0,
"mk:a:"},
1954 {
"mk://", 0,
"mk://"},
1955 {
"mk://.", 0,
"mk://"},
1956 {
"mk://..", 0,
"mk:/"},
1957 {
"mk://../..", 0,
"mk:"},
1959 {
"mk://../../..", 0,
"mk:"},
1965 {
"mk:a/.\\", 0,
"mk:a/.\\"},
1966 {
"mk:a/.\\b", 0,
"mk:a/.\\b"},
1967 {
"mk:a\\.\\b", 0,
"mk:a\\.\\b"},
1968 {
"mk:a\\./b", 0,
"mk:a\\b"},
1969 {
"mk:a./b", 0,
"mk:a./b"},
1970 {
"mk:a\\b/..\\c", 0,
"mk:a\\b/..\\c"},
1971 {
"mk:a\\b\\..\\c", 0,
"mk:a\\b\\..\\c"},
1972 {
"mk:a/b\\../c", 0,
"mk:a/c"},
1973 {
"mk:a\\b../c", 0,
"mk:a\\b../c"},
1983 {
"mk:@", 0,
"mk:@/"},
1984 {
"mk:@progid", 0,
"mk:@progid/"},
1985 {
"mk:@progid:a", 0,
"mk:@progid:a/"},
1986 {
"mk:@progid:a/b", 0,
"mk:@progid:a/b"},
1987 {
"mk:@Progid:a/b/../..", 0,
"mk:@Progid:a/"},
1988 {
"mk:@progid/a", 0,
"mk:@progid/a"},
1989 {
"mk:@progid\\a", 0,
"mk:@progid\\a/"},
1990 {
"mk:@progid/a/../..", 0,
"mk:@progid/"},
1991 {
"mk:@progid/.", 0,
"mk:@progid/."},
1992 {
"mk:@progid/.?", 0,
"mk:@progid/.?"},
1993 {
"mk:@progid/./..", 0,
"mk:@progid/./.."},
1994 {
"mk:@progid/../..", 0,
"mk:@progid/../.."},
1995 {
"mk:@progid/a\\.\\b", 0,
"mk:@progid/a\\.\\b"},
1996 {
"mk:@progid/a\\..\\b", 0,
"mk:@progid/a\\..\\b"},
1997 {
"mk:@progid/.\\..", 0,
"mk:@progid/"},
1999 {
"mk:a/b?c/../d", 0,
"mk:a/b?c/../d"},
2000 {
"mk:a/b#c/../d", 0,
"mk:a/b#c/../d"},
2001 {
"mk:a/b#c?d", 0,
"mk:a/b#c?d"},
2002 {
"mk:@progid/a/b?c/../d", 0,
"mk:@progid/a/b?c/../d"},
2003 {
"mk:@progid?c/d/..", 0,
"mk:@progid?c/"},
2005 {
"mk:a/b &c", 0,
"mk:a/b &c"},
2007 {
"mk:@MSITStore:dir/test.chm::/file.html/..", 0,
"mk:@MSITStore:dir/test.chm::/"},
2008 {
"mk:@MSITStore:dir/test.chm::/file.html/../..", 0,
"mk:@MSITStore:dir/"},
2011 {
" \t\n\rwi\t\n\rne\t\n\r:\t\n\r/\t\n\r/\t\n\r./../a/.\t\n\r./ \t\n\r", 0,
"wine://./../"},
2014 {
" \a\t\x01 wine://./.. \x1f\n\v ", 0,
"wine://./../"},
2015 {
" wine ://./..", 0,
"wine :/"},
2016 {
" wine: //a/../b", 0,
"wine: //a/../b"},
2017 {
" wine://a/b c/.. ", 0,
"wine://a/"},
2018 {
"\x7f/\a/\v/\x01/\x1f/\x80", 0,
"\x7f/\a/\v/\x01/\x1f/\x80"},
2023 {
"wInE://A/B", 0,
"wine://A/B"},
2024 {
"hTtP://A/b/../../C", 0,
"http://a/C"},
2025 {
"fTP://A/B\\./C", 0,
"ftp://a/B\\C"},
2026 {
"aBoUT://A/B/./", 0,
"about://A/B/./"},
2027 {
"mK://..", 0,
"mk:/"},
2030 {
"0Aa+-.://./..", 0,
"0aa+-.://./../"},
2031 {
"a_://./..", 0,
"a_:/"},
2032 {
"a,://./..", 0,
"a,:/"},
2035 {
"mk:@MSITStore:C:\\Program Files/AutoCAD 2008\\Help/acad_acg.chm::/WSfacf1429558a55de1a7524c1004e616f8b-322b.htm", 0,
2036 "mk:@MSITStore:C:\\Program Files/AutoCAD 2008\\Help/acad_acg.chm::/WSfacf1429558a55de1a7524c1004e616f8b-322b.htm"},
2064 memset(szReturnUrl,
'#', urllen+4);
2065 szReturnUrl[urllen+4] =
'\0';
2069 "got 0x%lx with %lu and size %lu for '%s' and %u (expected 'E_POINTER' and size %lu)\n",
2074 memset(szReturnUrl,
'#', urllen+4);
2075 szReturnUrl[urllen+4] =
'\0';
2079 "got 0x%lx with %lu and size %lu for '%s' and %u (expected 'E_POINTER' and size %lu)\n",
2084 memset(szReturnUrl,
'#', urllen+4);
2085 szReturnUrl[urllen+4] =
'\0';
2089 "got 0x%lx with %lu and size %lu for '%s' and %u (expected 'S_OK' and size %lu)\n",
2094 memset(szReturnUrl,
'#', urllen+4);
2095 szReturnUrl[urllen+4] =
'\0';
2099 "got 0x%lx with %lu and size %lu for '%s' and %u (expected 'S_OK' and size %lu)\n",
2104 memset(szReturnUrl,
'#', urllen+4);
2105 szReturnUrl[urllen+4] =
'\0';
2109 "got 0x%lx with %lu and size %lu for '%s' and %u (expected 'E_INVALIDARG' and size %u)\n",
2113 dwSize=
sizeof(szReturnUrl);
2114 memset(longurl,
'a',
sizeof(longurl));
2116 longurl[
sizeof(longurl)-1] =
'\0';
2126 unk_scheme_tests[
i].
flags | file_flags[
f], unk_scheme_tests[
i].
expect);
2157 if (
prefixes[
j].ftp_like && http_tests[
i].expect_ftp)
2168 static const char *
const prefixes[] = {
"about",
"javascript",
"mailto",
"shell",
"vbscript"};
2219 memset(szReturnUrl,
'#', (urllen+4) *
sizeof(
WCHAR));
2220 szReturnUrl[urllen+4] =
'\0';
2224 "got 0x%lx with %lu and size %lu for %u (expected 'E_POINTER' and size %lu)\n",
2230 memset(szReturnUrl,
'#', (urllen+4) *
sizeof(
WCHAR));
2231 szReturnUrl[urllen+4] =
'\0';
2235 "got 0x%lx with %lu and size %lu for %u (expected 'E_POINTER' and size %lu)\n",
2240 memset(szReturnUrl,
'#', (urllen+4) *
sizeof(
WCHAR));
2241 szReturnUrl[urllen+4] =
'\0';
2245 "got 0x%lx with %lu and size %lu for %u (expected 'S_OK' and size %lu)\n",
2250 memset(szReturnUrl,
'#', (urllen+4) *
sizeof(
WCHAR));
2251 szReturnUrl[urllen+4] =
'\0';
2255 "got 0x%lx with %lu and size %lu for %u (expected 'S_OK' and size %lu)\n",
2266 for (
i = 1;
i < 65536;
i++)
2272 wcscpy(szUrl,
L"http://www.winehq.org/X");
2278 ok(choped == (
i <= 32),
"Incorrect char chopping for char %d\n",
i);
2289 LPWSTR wszUrl1, wszUrl2, wszExpectUrl, wszConvertedUrl;
2300 ok(
hr ==
S_OK,
"Got unexpected hr %#lx.\n",
hr);
2301 ok(
dwSize == dwExpectLen,
"Got length %ld, expected %ld\n",
dwSize, dwExpectLen);
2302 ok(!
strcmp(szReturnUrl, szExpectUrl),
"Expected %s, got %s.\n", szExpectUrl, szReturnUrl);
2306 ok(
hr ==
S_OK,
"Got unexpected hr %#lx.\n",
hr);
2307 ok(
dwSize == dwExpectLen,
"Got length %ld, expected %ld\n",
dwSize, dwExpectLen);
2309 ok(!
wcscmp(wszReturnUrl, wszConvertedUrl),
"Expected %s, got %s.\n",
2368 ok(!
wcscmp(bufferW,
L"http://base/relative"),
"Got buffer contents %s.\n",
debugstr_w(bufferW));
2383 WCHAR *pathW, *urlW;
2399 ok(!
lstrcmpiW(ret_urlW, urlW),
"got %s expected %s from path L\"%s\"\n",
2442 "returned %d from path (UrlIsW) %s, expected %d\n",
ret,
2459 "returned %d for URLIS_OPAQUE (UrlIsW), url \"%s\", expected %d\n",
2463 "returned %d for URLIS_FILEURL (UrlIsW), url \"%s\", expected %d\n",
2474 DWORD dwEscaped, unescaped;
2476 static char inplace[] =
"file:///C:/Program%20Files";
2477 static char another_inplace[] =
"file:///C:/Program%20Files";
2478 static const char expected[] =
"file:///C:/Program Files";
2486 "UrlUnescapeA returned 0x%lx (expected S_OK) for \"%s\"\n",
2490 ZeroMemory(szReturnUrl,
sizeof(szReturnUrl));
2494 "UrlUnescapeA returned 0x%lx (expected E_INVALIDARG) for \"%s\"\n",
2496 ok(
strcmp(szReturnUrl,
"")==0,
"Expected empty string\n");
2503 if (!
wcscmp(urlW,
L"\xf0\x9f\x8d\xb7"))
2505 utf8_support =
FALSE;
2506 win_skip(
"Skip URL_UNESCAPE_AS_UTF8 tests for pre-win7 systems.\n");
2516 memset(bufferW, 0xff,
sizeof(bufferW));
2536 dwEscaped =
sizeof(inplace);
2538 ok(
res ==
S_OK,
"UrlUnescapeA returned 0x%lx (expected S_OK)\n",
res);
2540 ok(dwEscaped == 27,
"got %ld expected 27\n", dwEscaped);
2544 ok(
res ==
S_OK,
"UrlUnescapeA returned 0x%lx (expected S_OK)\n",
res);
2581 memset(&parseda, 0xd0,
sizeof(parseda));
2582 parseda.
cbSize =
sizeof(parseda);
2584 ok(
hres ==
test->hres,
"ParseURL failed: %08lx, expected %08lx\n",
hres,
test->hres);
2588 ok(parseda.
cchProtocol ==
test->protocol_len,
"parseda.cchProtocol = %d, expected %d\n",
2590 ok(parseda.
pszSuffix ==
test->url+
test->protocol_len+1,
"parseda.pszSuffix = %s, expected %s\n",
2593 "parseda.pszSuffix = %d, expected %d\n",
2595 ok(parseda.
nScheme ==
test->scheme,
"parseda.nScheme = %d, expected %d\n",
2604 memset(&parsedw, 0xd0,
sizeof(parsedw));
2605 parsedw.
cbSize =
sizeof(parsedw);
2607 ok(
hres ==
test->hres,
"ParseURL failed: %08lx, expected %08lx\n",
hres,
test->hres);
2611 ok(parsedw.
cchProtocol ==
test->protocol_len,
"parsedw.cchProtocol = %d, expected %d\n",
2613 ok(parsedw.
pszSuffix ==
url+
test->protocol_len+1,
"parsedw.pszSuffix = %s, expected %s\n",
2616 "parsedw.pszSuffix = %d, expected %d\n",
2618 ok(parsedw.
nScheme ==
test->scheme,
"parsedw.nScheme = %d, expected %d\n",
2630 BYTE input[16] = {0x51, 0x33, 0x4F, 0xA7, 0x45, 0x15, 0xF0, 0x52, 0x90,
2631 0x2B, 0xE7, 0xF5, 0xFD, 0xE1, 0xA6, 0xA7};
2633 static const BYTE expected[] = {0x54, 0x9C, 0x92, 0x55, 0xCD, 0x82, 0xFF,
2634 0xA1, 0x8E, 0x0F, 0xCF, 0x93, 0x14, 0xAA,
2636 static const BYTE expected2[] = {0x54, 0x9C, 0x92, 0x55, 0xCD, 0x82, 0xFF,
2637 0xA1, 0x8E, 0x0F, 0xCF, 0x93, 0x14, 0xAA,
2638 0xE3, 0x2D, 0x47, 0xFC, 0x80, 0xB8, 0xD0,
2639 0x49, 0xE6, 0x13, 0x2A, 0x30, 0x51, 0x8D,
2640 0xF9, 0x4B, 0x07, 0xA6};
2641 static const BYTE expected3[] = {0x2B, 0xDC, 0x9A, 0x1B, 0xF0, 0x5A, 0xF9,
2642 0xC6, 0xBE, 0x94, 0x6D, 0xF3, 0x33, 0xC1,
2648 ok(
res ==
S_OK,
"Expected HashData to return S_OK, got 0x%08lx\n",
res);
2653 ok(
res ==
S_OK,
"Expected HashData to return S_OK, got 0x%08lx\n",
res);
2654 ok(!
memcmp(output, expected2,
sizeof(expected2)),
"data didn't match\n");
2658 ok(
res ==
S_OK,
"Expected HashData to return S_OK, got 0x%08lx\n",
res);
2659 ok(!
memcmp(output, expected3,
sizeof(expected3)),
"data didn't match\n");
2679 ok(
res ==
S_OK,
"Expected HashData to return S_OK, got 0x%08lx\n",
res);
2683 ok(
input[
i] == 0x00,
"Expected the input buffer to be unchanged\n");
2686 ok(output[
i] == 0xFF,
"Expected the output buffer to be unchanged\n");
2690 ok(
res ==
S_OK,
"Expected HashData to return S_OK, got 0x%08lx\n",
res);
2695 trace(
"HashData returned 0x%08lx\n",
res);
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
#define HeapFree(x, y, z)
#define WideCharToMultiByte
#define MultiByteToWideChar
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
DWORD WINAPI GetVersion(void)
HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative, LPWSTR pszCombined, LPDWORD pcchCombined, DWORD dwFlags)
HRESULT WINAPI UrlGetPartW(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut, DWORD dwPart, DWORD dwFlags)
HRESULT WINAPI UrlHashA(LPCSTR pszUrl, unsigned char *lpDest, DWORD nDestLen)
BOOL WINAPI UrlIsA(LPCSTR pszUrl, URLIS Urlis)
HRESULT WINAPI UrlApplySchemeA(LPCSTR pszIn, LPSTR pszOut, LPDWORD pcchOut, DWORD dwFlags)
HRESULT WINAPI ParseURLW(LPCWSTR x, PARSEDURLW *y)
HRESULT WINAPI UrlUnescapeW(LPWSTR pszUrl, LPWSTR pszUnescaped, LPDWORD pcchUnescaped, DWORD dwFlags)
HRESULT WINAPI ParseURLA(LPCSTR x, PARSEDURLA *y)
BOOL WINAPI UrlIsW(LPCWSTR pszUrl, URLIS Urlis)
HRESULT WINAPI HashData(const unsigned char *lpSrc, DWORD nSrcLen, unsigned char *lpDest, DWORD nDestLen)
HRESULT WINAPI UrlCreateFromPathW(LPCWSTR pszPath, LPWSTR pszUrl, LPDWORD pcchUrl, DWORD dwReserved)
HRESULT WINAPI UrlHashW(LPCWSTR pszUrl, unsigned char *lpDest, DWORD nDestLen)
HRESULT WINAPI UrlCreateFromPathA(LPCSTR pszPath, LPSTR pszUrl, LPDWORD pcchUrl, DWORD dwReserved)
HRESULT WINAPI UrlGetPartA(LPCSTR pszIn, LPSTR pszOut, LPDWORD pcchOut, DWORD dwPart, DWORD dwFlags)
HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, LPDWORD pcchCanonicalized, DWORD dwFlags)
HRESULT WINAPI UrlApplySchemeW(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut, DWORD dwFlags)
HRESULT WINAPI UrlUnescapeA(LPSTR pszUrl, LPSTR pszUnescaped, LPDWORD pcchUnescaped, DWORD dwFlags)
HRESULT WINAPI UrlCombineA(LPCSTR pszBase, LPCSTR pszRelative, LPSTR pszCombined, LPDWORD pcchCombined, DWORD dwFlags)
HRESULT WINAPI UrlEscapeA(LPCSTR pszUrl, LPSTR pszEscaped, LPDWORD pcchEscaped, DWORD dwFlags)
HRESULT WINAPI UrlEscapeW(LPCWSTR pszUrl, LPWSTR pszEscaped, LPDWORD pcchEscaped, DWORD dwFlags)
HRESULT WINAPI UrlCanonicalizeA(LPCSTR pszUrl, LPSTR pszCanonicalized, LPDWORD pcchCanonicalized, DWORD dwFlags)
#define INTERNET_MAX_URL_LENGTH
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 flag
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define URL_E_INVALID_SYNTAX
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
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)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static struct test_info tests[]
static void test_UrlCombine(void)
static void test_UrlEscapeW(void)
static void test_HashData(void)
static const char * TEST_URL_3
static const TEST_URL_ESCAPEW TEST_ESCAPEW[]
static void test_ParseURL(void)
static void test_UrlHash(void)
struct _TEST_URL_COMBINE TEST_URL_COMBINE
static const CHAR untouchedA[]
static void test_UrlCanonicalizeA(void)
static void check_url_canonicalize(const char *url, DWORD flags, const char *expect)
static struct @1841 TEST_URL_UNESCAPE[]
static const WCHAR winehqW[]
static struct @1842 TEST_URL_UNESCAPEW[]
struct _TEST_URL_ESCAPE TEST_URL_ESCAPE
static const struct @1840 TEST_URLFROMPATH[]
static LPWSTR GetWideString(const char *szString)
static const TEST_URL_COMBINE TEST_COMBINE[]
static const TEST_URL_APPLY TEST_APPLY[]
static void hash_url(const char *szUrl)
static void test_UrlIs(void)
struct _TEST_URL_APPLY TEST_URL_APPLY
static const TEST_URL_ESCAPE TEST_ESCAPE[]
static const struct @1843 TEST_PATH_IS_URL[]
static void test_UrlEscapeA(void)
static const struct @1844 TEST_URLIS_ATTRIBS[]
static void test_UrlUnescape(void)
static const char winehqA[]
static const char * TEST_URL_2
static void FreeWideString(LPWSTR wszString)
struct _TEST_URL_ESCAPEW TEST_URL_ESCAPEW
static void test_UrlCanonicalizeW(void)
static void test_UrlApplyScheme(void)
static void test_UrlGetPart(void)
static const char * TEST_URL_1
static const struct parse_url_test_t parse_url_tests[]
static void test_UrlCreateFromPath(void)
static void test_UrlIs_null(DWORD flag)
static void check_url_combine(const char *szUrl1, const char *szUrl2, DWORD dwFlags, const char *szExpectUrl)
static const WCHAR url1[]
static const WCHAR url2[]
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define URL_ESCAPE_UNSAFE
#define URL_WININET_COMPATIBILITY
#define URL_DONT_ESCAPE_EXTRA_INFO
#define URL_UNESCAPE_AS_UTF8
#define URL_APPLY_FORCEAPPLY
#define URL_ESCAPE_AS_UTF8
#define URL_APPLY_GUESSSCHEME
#define URL_APPLY_DEFAULT
#define URL_PLUGGABLE_PROTOCOL
#define URL_ESCAPE_SPACES_ONLY
#define URL_ESCAPE_SEGMENT_ONLY
#define URL_DONT_SIMPLIFY
#define URL_UNESCAPE_INPLACE
#define URL_FILE_USE_PATHURL
#define URL_PARTFLAG_KEEPSCHEME
#define URL_APPLY_GUESSFILE
#define URL_ESCAPE_PERCENT
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
const WCHAR url[INTERNET_MAX_URL_LENGTH]
const WCHAR win7url[INTERNET_MAX_URL_LENGTH]
const WCHAR expecturl[INTERNET_MAX_URL_LENGTH]
Character const *const prefix
DWORD WINAPI GetLastError(void)