24#define WIN32_NO_STATUS
92 {
"\\\\.\\CONIN$", 6 },
93 {
"\\\\.\\CONOUT$", 6 },
101 if (!pRtlDetermineDosPathNameType_U)
103 win_skip(
"RtlDetermineDosPathNameType_U is not available\n");
110 ret = pRtlDetermineDosPathNameType_U(
buffer );
128 {
"\\\\.\\CON", 8, 6,
TRUE },
129 {
"\\\\.\\con", 8, 6,
TRUE },
130 {
"\\\\.\\CON2", 0, 0 },
131 {
"\\\\.\\CONIN$", 0, 0 },
132 {
"\\\\.\\CONOUT$",0, 0 },
134 {
"\\\\foo\\nul", 0, 0 },
135 {
"c:\\nul:", 6, 6 },
136 {
"c:\\nul\\", 0, 0 },
137 {
"c:\\nul\\foo", 0, 0 },
138 {
"c:\\nul::", 6, 6 },
139 {
"c:\\nul::::::", 6, 6,
TRUE },
140 {
"c:prn ", 4, 6,
TRUE },
141 {
"c:prn.......", 4, 6,
TRUE },
142 {
"c:prn... ...", 4, 6,
TRUE },
143 {
"c:NUL .... ", 4, 6 },
144 {
"c: . . .", 0, 0 },
146 {
" . . . :", 0, 0 },
148 {
"c:nul. . . :", 4, 6 },
149 {
"c:nul . . :", 4, 6 },
151 {
"c:prn:aaa", 4, 6,
TRUE },
152 {
"c:PRN:.txt", 4, 6,
TRUE },
153 {
"c:aux:.txt...", 4, 6,
TRUE },
154 {
"c:prn:.txt:", 4, 6,
TRUE },
155 {
"c:nul:aaa", 4, 6,
TRUE },
158 {
"c:com5:", 4, 8,
TRUE },
161 {
"c:\\lpt0.txt", 0, 0 },
162 {
"CONIN$", 0, 12,
TRUE },
163 {
"CONOUT$", 0, 14,
TRUE },
167 {
"\\??\\CONIN$", 8, 12,
TRUE },
168 {
"\\??\\CONOUT$", 8, 14,
TRUE },
169 {
"\\??\\CONERR$", 0, 0 },
170 {
"\\??\\CON", 8, 6,
TRUE },
171 {
"c:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
172 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
173 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
174 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
175 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
176 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
177 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\nul.txt", 1000, 6,
TRUE },
185 if (!pRtlIsDosDeviceName_U)
187 win_skip(
"RtlIsDosDeviceName_U is not available\n");
197 "Wrong result (%d,%d)/(%d,%d) for %s\n",
215 {
"12345678.",
FALSE, 2 },
216 {
"1234 678.",
FALSE, 2 },
218 {
"12345678.a ",
FALSE, 2 },
220 {
" 2345678.a ",
FALSE, 2 },
223 {
"1 3 5 7 .abc",
FALSE, 2 },
225 {
"123456789.a",
FALSE, 2 },
226 {
"12345.abcd",
FALSE, 2 },
227 {
"12345.ab d",
FALSE, 2 },
228 {
".abc",
FALSE, 2 },
229 {
"12.abc.d",
FALSE, 2 },
233 {
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
FALSE, 2 },
244 if (!pRtlIsNameLegalDOS8Dot3)
246 win_skip(
"RtlIsNameLegalDOS8Dot3 is not available\n");
258 oem.MaximumLength = oem.Length + 1;
259 pRtlOemStringToUnicodeString( &ustr, &oem,
FALSE );
261 oem_ret.Length = oem_ret.MaximumLength =
sizeof(buff2);
262 oem_ret.Buffer = buff2;
263 ret = pRtlIsNameLegalDOS8Dot3( &ustr, &oem_ret, &spaces );
265 ok( spaces ==
test->spaces,
"Wrong spaces value %d/%d for '%s'\n", spaces,
test->spaces,
test->path );
274 "Wrong string '%.*s'/'%s'\n", oem_ret.Length, oem_ret.Buffer,
test->path );
281 static const WCHAR deadbeefW[] = {
'd',
'e',
'a',
'd',
'b',
'e',
'e',
'f',0};
288 const char *alt_rname;
289 const char *alt_rfile;
294 {
"c:/test",
"c:\\test",
"test"},
295 {
"c:/test/",
"c:\\test\\",
NULL},
296 {
"c:/test ",
"c:\\test",
"test"},
297 {
"c:/test.",
"c:\\test",
"test"},
298 {
"c:/test .... .. ",
"c:\\test",
"test"},
299 {
"c:/test/ .... .. ",
"c:\\test\\",
NULL},
300 {
"c:/test/..",
"c:\\",
NULL},
301 {
"c:/test/.. ",
"c:\\test\\",
NULL},
302 {
"c:/TEST",
"c:\\TEST",
"TEST"},
303 {
"c:/test/file",
"c:\\test\\file",
"file"},
304 {
"c:/test./file",
"c:\\test\\file",
"file"},
305 {
"c:/test.. /file",
"c:\\test.. \\file",
"file"},
306 {
"c:/test/././file",
"c:\\test\\file",
"file"},
307 {
"c:/test\\.\\.\\file",
"c:\\test\\file",
"file"},
308 {
"c:/test/\\.\\.\\file",
"c:\\test\\file",
"file"},
309 {
"c:/test\\\\.\\.\\file",
"c:\\test\\file",
"file"},
310 {
"c:/test\\test1\\..\\.\\file",
"c:\\test\\file",
"file"},
311 {
"c:///test\\.\\.\\file//",
"c:\\test\\file\\",
NULL,
312 "c:\\test\\file",
"file"},
313 {
"c:///test\\..\\file\\..\\//",
"c:\\",
NULL},
314 {
"c:/test../file",
"c:\\test.\\file",
"file",
315 "c:\\test..\\file",
"file"},
316 {
"c:\\test",
"c:\\test",
"test"},
317 {
"c:\\test\\*.",
"c:\\test\\*",
"*"},
318 {
"c:\\test\\a*b.*",
"c:\\test\\a*b.*",
"a*b.*"},
319 {
"c:\\test\\a*b*.",
"c:\\test\\a*b*",
"a*b*"},
320 {
"C:\\test",
"C:\\test",
"test"},
321 {
"c:/",
"c:\\",
NULL},
322 {
"c:.",
"C:\\windows",
"windows"},
323 {
"c:foo",
"C:\\windows\\foo",
"foo"},
324 {
"c:foo/bar",
"C:\\windows\\foo\\bar",
"bar"},
325 {
"c:./foo",
"C:\\windows\\foo",
"foo"},
326 {
"\\foo",
"C:\\foo",
"foo"},
327 {
"foo",
"C:\\windows\\foo",
"foo"},
328 {
".",
"C:\\windows",
"windows"},
329 {
"..",
"C:\\",
NULL},
330 {
"...",
"C:\\windows\\",
NULL},
331 {
"./foo",
"C:\\windows\\foo",
"foo"},
332 {
"foo/..",
"C:\\windows",
"windows"},
333 {
"\\windows\\nul",
"\\\\.\\nul",
NULL},
334 {
"C:\\nonexistent\\nul",
"\\\\.\\nul",
NULL},
335 {
"C:\\con\\con",
"\\\\.\\con",
NULL,
336 "C:\\con\\con",
"con"},
337 {
"C:NUL.",
"\\\\.\\NUL",
NULL},
338 {
"C:NUL",
"\\\\.\\NUL",
NULL},
339 {
"AUX",
"\\\\.\\AUX",
NULL},
340 {
"COM1",
"\\\\.\\COM1",
NULL},
341 {
"?<>*\"|:",
"C:\\windows\\?<>*\"|:",
"?<>*\"|:"},
343 {
"\\\\foo",
"\\\\foo",
NULL},
344 {
"//foo",
"\\\\foo",
NULL},
345 {
"\\/foo",
"\\\\foo",
NULL},
346 {
"//",
"\\\\",
NULL},
347 {
"//foo/",
"\\\\foo\\",
NULL},
349 {
"//.",
"\\\\.\\",
NULL},
350 {
"//./",
"\\\\.\\",
NULL},
351 {
"//.//",
"\\\\.\\",
NULL},
352 {
"//./foo",
"\\\\.\\foo",
"foo"},
353 {
"//./foo/",
"\\\\.\\foo\\",
NULL},
354 {
"//./foo/bar",
"\\\\.\\foo\\bar",
"bar"},
355 {
"//./foo/.",
"\\\\.\\foo",
"foo"},
356 {
"//./foo/..",
"\\\\.\\",
NULL},
358 {
"//?/",
"\\\\?\\",
NULL},
359 {
"//?//",
"\\\\?\\",
NULL},
360 {
"//?/foo",
"\\\\?\\foo",
"foo"},
361 {
"//?/foo/",
"\\\\?\\foo\\",
NULL},
362 {
"//?/foo/bar",
"\\\\?\\foo\\bar",
"bar"},
363 {
"//?/foo/.",
"\\\\?\\foo",
"foo"},
364 {
"//?/foo/..",
"\\\\?\\",
NULL},
366 {
"CONIN$",
"\\\\.\\CONIN$",
NULL,
367 "C:\\windows\\CONIN$",
"CONIN$"},
368 {
"CONOUT$",
"\\\\.\\CONOUT$",
NULL,
369 "C:\\windows\\CONOUT$",
"CONOUT$"},
372 {
"\\??\\foo",
"C:\\??\\foo",
"foo"},
387 file_part = (
WCHAR *)0xdeadbeef;
390 ok(!
ret,
"Expected RtlGetFullPathName_U to return 0, got %lu\n",
ret);
392 "Expected the output buffer to be untouched, got %s\n",
wine_dbgstr_w(rbufferW));
393 ok(file_part == (
WCHAR *)0xdeadbeef ||
395 "Expected file part pointer to be untouched, got %p\n", file_part);
397 file_part = (
WCHAR *)0xdeadbeef;
400 ok(!
ret,
"Expected RtlGetFullPathName_U to return 0, got %lu\n",
ret);
402 "Expected the output buffer to be untouched, got %s\n",
wine_dbgstr_w(rbufferW));
403 ok(file_part == (
WCHAR *)0xdeadbeef ||
405 "Expected file part pointer to be untouched, got %p\n", file_part);
410 pRtlMultiByteToUnicodeN(pathbufW ,
sizeof(pathbufW),
NULL,
test->path,
strlen(
test->path)+1 );
411 ret = pRtlGetFullPathName_U( pathbufW,
MAX_PATH, rbufferW, &file_part);
413 "Wrong result %ld/%d for \"%s\"\n",
ret,
len,
test->path );
415 "RtlUnicodeToMultiByteN failed\n");
417 "Got \"%s\" expected \"%s\"\n",rbufferA,
test->rname);
421 "RtlUnicodeToMultiByteN failed\n");
424 "Got \"%s\" expected \"%s\"\n",rfileA,
test->rfile);
428 ok( !
test->rfile,
"Got NULL expected \"%s\"\n",
test->rfile );
454 {
L"c:\\",
L"\\??\\c:\\", -1},
455 {
L"c:\\test\\*.",
L"\\??\\c:\\test\\*", 12},
456 {
L"c:/",
L"\\??\\c:\\", -1},
457 {
L"c:/foo",
L"\\??\\c:\\foo", 7},
458 {
L"c:/foo.",
L"\\??\\c:\\foo", 7},
459 {
L"c:/foo ",
L"\\??\\c:\\foo", 7},
460 {
L"c:/foo . .",
L"\\??\\c:\\foo", 7},
461 {
L"c:/foo.a",
L"\\??\\c:\\foo.a", 7},
462 {
L"c:/foo a",
L"\\??\\c:\\foo a", 7},
463 {
L"c:/foo*",
L"\\??\\c:\\foo*", 7},
464 {
L"c:/foo*a",
L"\\??\\c:\\foo*a", 7},
465 {
L"c:/foo?",
L"\\??\\c:\\foo?", 7},
466 {
L"c:/foo?a",
L"\\??\\c:\\foo?a", 7},
467 {
L"c:/foo<",
L"\\??\\c:\\foo<", 7},
468 {
L"c:/foo<a",
L"\\??\\c:\\foo<a", 7},
469 {
L"c:/foo>",
L"\\??\\c:\\foo>", 7},
470 {
L"c:/foo>a",
L"\\??\\c:\\foo>a", 7},
471 {
L"c:/foo/",
L"\\??\\c:\\foo\\", -1},
472 {
L"c:/foo//",
L"\\??\\c:\\foo\\", -1},
473 {
L"C:/foo",
L"\\??\\C:\\foo", 7},
474 {
L"C:/foo/bar",
L"\\??\\C:\\foo\\bar", 11},
475 {
L"C:/foo/bar",
L"\\??\\C:\\foo\\bar", 11},
476 {
L"c:.",
L"\\??\\C:\\windows", 7},
477 {
L"c:foo",
L"\\??\\C:\\windows\\foo", 15},
478 {
L"c:foo/bar",
L"\\??\\C:\\windows\\foo\\bar", 19},
479 {
L"c:./foo",
L"\\??\\C:\\windows\\foo", 15},
480 {
L"c:/./foo",
L"\\??\\c:\\foo", 7},
481 {
L"c:/..",
L"\\??\\c:\\", -1},
482 {
L"c:/foo/.",
L"\\??\\c:\\foo", 7},
483 {
L"c:/foo/./bar",
L"\\??\\c:\\foo\\bar", 11},
484 {
L"c:/foo/../bar",
L"\\??\\c:\\bar", 7},
485 {
L"\\foo",
L"\\??\\C:\\foo", 7},
486 {
L"foo",
L"\\??\\C:\\windows\\foo", 15},
487 {
L".",
L"\\??\\C:\\windows", 7},
488 {
L"./",
L"\\??\\C:\\windows\\", -1},
489 {
L"..",
L"\\??\\C:\\", -1},
490 {
L"...",
L"\\??\\C:\\windows\\", -1},
491 {
L"./foo",
L"\\??\\C:\\windows\\foo", 15},
492 {
L"foo/..",
L"\\??\\C:\\windows", 7},
493 {
L"\\windows\\nul",
L"\\??\\nul", -1},
494 {
L"C:NUL.",
L"\\??\\NUL", -1},
495 {
L"C:NUL",
L"\\??\\NUL", -1},
496 {
L"AUX" ,
L"\\??\\AUX", -1},
497 {
L"COM1" ,
L"\\??\\COM1", -1},
498 {
L"?<>*\"|:",
L"\\??\\C:\\windows\\?<>*\"|:", 15},
499 {
L"?:",
L"\\??\\?:\\", -1},
501 {
L"\\\\foo",
L"\\??\\UNC\\foo", -1},
502 {
L"//foo",
L"\\??\\UNC\\foo", -1},
503 {
L"\\/foo",
L"\\??\\UNC\\foo", -1},
504 {
L"//",
L"\\??\\UNC\\", -1},
505 {
L"//foo/",
L"\\??\\UNC\\foo\\", -1},
507 {
L"//.",
L"\\??\\", -1},
508 {
L"//./",
L"\\??\\", -1},
509 {
L"//.//",
L"\\??\\", -1},
510 {
L"//./foo",
L"\\??\\foo", 4},
511 {
L"//./foo/",
L"\\??\\foo\\", -1},
512 {
L"//./foo/bar",
L"\\??\\foo\\bar", 8},
513 {
L"//./foo/.",
L"\\??\\foo", 4},
514 {
L"//./foo/..",
L"\\??\\", -1},
515 {
L"//./foo. . ",
L"\\??\\foo", 4},
517 {
L"//?",
L"\\??\\", -1},
518 {
L"//?/",
L"\\??\\", -1},
519 {
L"//?//",
L"\\??\\", -1},
520 {
L"//?/foo",
L"\\??\\foo", 4},
521 {
L"//?/foo/",
L"\\??\\foo\\", -1},
522 {
L"//?/foo/bar",
L"\\??\\foo\\bar", 8},
523 {
L"//?/foo/.",
L"\\??\\foo", 4},
524 {
L"//?/foo/..",
L"\\??\\", -1},
525 {
L"//?/foo. . ",
L"\\??\\foo", 4},
527 {
L"\\\\.",
L"\\??\\", -1},
528 {
L"\\\\.\\",
L"\\??\\", -1},
529 {
L"\\\\.\\/",
L"\\??\\", -1},
530 {
L"\\\\.\\foo",
L"\\??\\foo", 4},
531 {
L"\\\\.\\foo/",
L"\\??\\foo\\", -1},
532 {
L"\\\\.\\foo/bar",
L"\\??\\foo\\bar", 8},
533 {
L"\\\\.\\foo/.",
L"\\??\\foo", 4},
534 {
L"\\\\.\\foo/..",
L"\\??\\", -1},
535 {
L"\\\\.\\foo. . ",
L"\\??\\foo", 4},
537 {
L"\\\\.\\CONIN$",
L"\\??\\CONIN$", 4},
538 {
L"\\\\.\\CONOUT$",
L"\\??\\CONOUT$", 4},
540 {
L"\\\\?",
L"\\??\\", -1},
541 {
L"\\\\?\\",
L"\\??\\", -1},
543 {
L"\\\\?\\/",
L"\\??\\/", 4},
544 {
L"\\\\?\\foo",
L"\\??\\foo", 4},
545 {
L"\\\\?\\foo/",
L"\\??\\foo/", 4},
546 {
L"\\\\?\\foo/bar",
L"\\??\\foo/bar", 4},
547 {
L"\\\\?\\foo/.",
L"\\??\\foo/.", 4},
548 {
L"\\\\?\\foo/..",
L"\\??\\foo/..", 4},
549 {
L"\\\\?\\\\",
L"\\??\\\\", -1},
550 {
L"\\\\?\\\\\\",
L"\\??\\\\\\", -1},
551 {
L"\\\\?\\foo\\",
L"\\??\\foo\\", -1},
552 {
L"\\\\?\\foo\\bar",
L"\\??\\foo\\bar", 8},
553 {
L"\\\\?\\foo\\.",
L"\\??\\foo\\.", 8},
554 {
L"\\\\?\\foo\\..",
L"\\??\\foo\\..", 8},
555 {
L"\\\\?\\foo. . ",
L"\\??\\foo. . ", 4},
557 {
L"\\??",
L"\\??\\C:\\??", 7},
558 {
L"\\??\\",
L"\\??\\C:\\??\\", -1},
561 {
L"\\??\\/",
L"\\??\\/", 4,
L"\\??\\C:\\??\\" },
562 {
L"\\??\\foo",
L"\\??\\foo", 4,
L"\\??\\C:\\??\\foo" },
563 {
L"\\??\\foo/",
L"\\??\\foo/", 4,
L"\\??\\C:\\??\\foo\\" },
564 {
L"\\??\\foo/bar",
L"\\??\\foo/bar", 4,
L"\\??\\C:\\??\\foo\\bar" },
565 {
L"\\??\\foo/.",
L"\\??\\foo/.", 4,
L"\\??\\C:\\??\\foo" },
566 {
L"\\??\\foo/..",
L"\\??\\foo/..", 4,
L"\\??\\C:\\??" },
567 {
L"\\??\\\\",
L"\\??\\\\", -1,
L"\\??\\C:\\??\\" },
568 {
L"\\??\\\\\\",
L"\\??\\\\\\", -1,
L"\\??\\C:\\??\\" },
569 {
L"\\??\\foo\\",
L"\\??\\foo\\", -1,
L"\\??\\C:\\??\\foo\\" },
570 {
L"\\??\\foo\\bar",
L"\\??\\foo\\bar", 8,
L"\\??\\C:\\??\\foo\\bar" },
571 {
L"\\??\\foo\\.",
L"\\??\\foo\\.", 8,
L"\\??\\C:\\??\\foo" },
572 {
L"\\??\\foo\\..",
L"\\??\\foo\\..", 8,
L"\\??\\C:\\??" },
573 {
L"\\??\\foo. . ",
L"\\??\\foo. . ", 4,
L"\\??\\C:\\??\\foo" },
575 {
L"\\??\\/",
L"\\??\\/", 4},
576 {
L"\\??\\foo",
L"\\??\\foo", 4},
577 {
L"\\??\\foo/",
L"\\??\\foo/", 4},
578 {
L"\\??\\foo/bar",
L"\\??\\foo/bar", 4},
579 {
L"\\??\\foo/.",
L"\\??\\foo/.", 4},
580 {
L"\\??\\foo/..",
L"\\??\\foo/..", 4},
581 {
L"\\??\\\\",
L"\\??\\\\", -1},
582 {
L"\\??\\\\\\",
L"\\??\\\\\\", -1},
583 {
L"\\??\\foo\\",
L"\\??\\foo\\", -1},
584 {
L"\\??\\foo\\bar",
L"\\??\\foo\\bar", 8},
585 {
L"\\??\\foo\\.",
L"\\??\\foo\\.", 8},
586 {
L"\\??\\foo\\..",
L"\\??\\foo\\..", 8},
587 {
L"\\??\\foo. . ",
L"\\??\\foo. . ", 4},
590 {
L"CONIN$",
L"\\??\\CONIN$", -1,
L"\\??\\C:\\windows\\CONIN$" },
591 {
L"CONOUT$",
L"\\??\\CONOUT$", -1,
L"\\??\\C:\\windows\\CONOUT$" },
592 {
L"cOnOuT$",
L"\\??\\cOnOuT$", -1,
L"\\??\\C:\\windows\\cOnOuT$" },
593 {
L"CONERR$",
L"\\??\\C:\\windows\\CONERR$", 15},
595 static const WCHAR *error_paths[] = {
596 NULL,
L"",
L" ",
L"C:\\nonexistent\\nul"
606 ret = pRtlDosPathNameToNtPathName_U(error_paths[
i], &
nameW, &file_part,
NULL);
609 if (pRtlDosPathNameToNtPathName_U_WithStatus)
611 status = pRtlDosPathNameToNtPathName_U_WithStatus(error_paths[
i], &
nameW, &file_part,
NULL);
633 if (pRtlDosPathNameToNtPathName_U_WithStatus)
641 if (!
nameW.Buffer)
continue;
651 if (
tests[
i].file_offset > 0)
656 ok(file_part ==
NULL,
"%s: Expected NULL file part, got %s.\n",
743 attr.RootDirectory = 0;
774 pRtlDetermineDosPathNameType_U = (
void *)
GetProcAddress(
mod,
"RtlDetermineDosPathNameType_U");
776 pRtlOemStringToUnicodeString = (
void *)
GetProcAddress(
mod,
"RtlOemStringToUnicodeString");
779 pRtlDosPathNameToNtPathName_U = (
void *)
GetProcAddress(
mod,
"RtlDosPathNameToNtPathName_U");
780 pRtlDosPathNameToNtPathName_U_WithStatus = (
void *)
GetProcAddress(
mod,
"RtlDosPathNameToNtPathName_U_WithStatus");
std::map< E_MODULE, HMODULE > mod
static const WCHAR nameW[]
#define FILE_DIRECTORY_FILE
#define FILE_NON_DIRECTORY_FILE
#define GetProcAddress(x, y)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
DWORD WINAPI GetCurrentDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl strlen(const char *)
#define FILE_SYNCHRONOUS_IO_NONALERT
#define FILE_OPEN_FOR_BACKUP_INTENT
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
static const WCHAR emptyW[]
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl void winetest_pop_context(void)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl winetest_push_context(const char *fmt,...) __WINE_PRINTF_ATTR(1
static struct test_info tests[]
#define expect(expected, got)
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
static void test_RtlGetFullPathName_U(void)
static DWORD LPDWORD LPCSTR DWORD srclen
static void test_RtlIsNameLegalDOS8Dot3(void)
static DWORD LPDWORD reslen
static const STRING BOOLEAN
static void test_RtlDosPathNameToNtPathName_U(void)
static WCHAR WCHAR **static UNICODE_STRING WCHAR CURDIR *static UNICODE_STRING WCHAR CURDIR *static ACCESS_MASK
static void test_RtlIsDosDeviceName_U(void)
static void test_nt_names(void)
static void test_RtlDetermineDosPathNameType_U(void)
#define InitializeObjectAttributes(p, n, a, r, s)
NTSYSAPI VOID NTAPI RtlInitString(PSTRING DestinationString, PCSZ SourceString)
#define FILE_LIST_DIRECTORY
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSYSAPI LONG NTAPI RtlCompareString(PSTRING String1, PSTRING String2, BOOLEAN CaseInSensitive)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSYSAPI VOID NTAPI RtlUpperString(PSTRING DestinationString, PSTRING SourceString)
#define FILE_GENERIC_READ
#define STATUS_OBJECT_PATH_SYNTAX_BAD
#define OBJ_CASE_INSENSITIVE
#define _WIN32_WINNT_VISTA
#define STATUS_FILE_IS_A_DIRECTORY
#define STATUS_OBJECT_PATH_NOT_FOUND
#define STATUS_INVALID_PARAMETER
#define STATUS_OBJECT_NAME_INVALID
#define STATUS_OBJECT_NAME_NOT_FOUND