[KMTESTS]
[reactos.git] / rostests / kmtests / novp_fsrtl / FsRtlRemoveDotsFromPath.c
1 /*
2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Tests for FsRtlRemoveDotsFromPath
5 * PROGRAMMER: Pierre Schweitzer <pierre@reactos.org>
6 */
7
8 #include <kmt_test.h>
9
10 #define NDEBUG
11 #include <debug.h>
12
13 #define InitConstString(s, c) \
14 wcscpy(s.Buffer, c); \
15 s.Buffer[sizeof(c) / sizeof(WCHAR) - 1] = 0; \
16 s.Length = sizeof(c) - sizeof(UNICODE_NULL)
17
18 NTSTATUS NTAPI FsRtlRemoveDotsFromPath(PWSTR OriginalString,
19 USHORT PathLength, USHORT *NewLength);
20
21 static
22 NTSTATUS
23 (NTAPI *pFsRtlRemoveDotsFromPath)(PWSTR OriginalString,
24 USHORT PathLength, USHORT *NewLength);
25
26 START_TEST(FsRtlRemoveDotsFromPath)
27 {
28 WCHAR Buf[255];
29 UNICODE_STRING TestString;
30 NTSTATUS Status;
31
32 TestString.Buffer = Buf;
33 TestString.MaximumLength = sizeof(Buf);
34 KmtGetSystemOrEmbeddedRoutineAddress(FsRtlRemoveDotsFromPath);
35 ASSERT(pFsRtlRemoveDotsFromPath);
36
37 InitConstString(TestString, L"\\..");
38 Status = pFsRtlRemoveDotsFromPath(TestString.Buffer, TestString.Length, &TestString.Length);
39 ok_eq_hex(Status, STATUS_IO_REPARSE_DATA_INVALID);
40
41 InitConstString(TestString, L"..");
42 Status = pFsRtlRemoveDotsFromPath(TestString.Buffer, TestString.Length, &TestString.Length);
43 ok_eq_hex(Status, STATUS_IO_REPARSE_DATA_INVALID);
44
45 InitConstString(TestString, L"..\\anyOtherContent");
46 Status = pFsRtlRemoveDotsFromPath(TestString.Buffer, TestString.Length, &TestString.Length);
47 ok_eq_hex(Status, STATUS_IO_REPARSE_DATA_INVALID);
48
49 InitConstString(TestString, L"\\\\..");
50 Status = pFsRtlRemoveDotsFromPath(TestString.Buffer, TestString.Length, &TestString.Length);
51 ok_eq_hex(Status, STATUS_SUCCESS);
52 ok_eq_wstr(TestString.Buffer, L"\\");
53
54 InitConstString(TestString, L"\\dir1\\dir2\\..\\dir3\\.\\file.txt");
55 Status = pFsRtlRemoveDotsFromPath(TestString.Buffer, TestString.Length, &TestString.Length);
56 ok_eq_hex(Status, STATUS_SUCCESS);
57 ok_eq_wstr(TestString.Buffer, L"\\dir1\\dir3\\file.txt");
58 }
59