ReactOS 0.4.16-dev-106-g10b08aa
splitpath.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for _splitpath
5 * PROGRAMMER: Timo Kreuzer
6 */
7
8#include <apitest.h>
9
10#include <stdio.h>
11#include <stdlib.h>
12#include <strings.h>
13#include <stdarg.h>
14
15START_TEST(splitpath)
16{
17 char drive[5];
18 char dir[64];
19 char fname[32];
20 char ext[10];
21 DWORD Major;
22
23 Major = (DWORD)(LOBYTE(LOWORD(GetVersion())));
24
25 drive[2] = 0xFF;
26 _splitpath("c:\\dir1\\dir2\\file.ext", drive, dir, fname, ext);
27 ok_str(drive, "c:");
28 ok_str(dir, "\\dir1\\dir2\\");
29 ok_str(fname, "file");
30 ok_str(ext, ".ext");
31 ok_int(drive[2], 0);
32
33 *_errno() = 0;
34 _splitpath("c:\\dir1\\dir2\\file.ext", 0, 0, 0, 0);
35 ok_int(*_errno(), 0);
36
37 if (Major >= 6)
38 {
39 *_errno() = 0;
40 _splitpath(0, drive, dir, fname, ext);
41 ok_int(*_errno(), EINVAL);
42 ok_str(drive, "");
43 ok_str(dir, "");
44 ok_str(fname, "");
45 ok_str(ext, "");
46 }
47 else
48 {
49 win_skip("This test only succeed on NT6+\n");
50 }
51
52 _splitpath("\\\\?\\c:\\dir1\\dir2\\file.ext", drive, dir, fname, ext);
53 if (Major >= 6)
54 {
55 ok_str(drive, "c:");
56 ok_str(dir, "\\dir1\\dir2\\");
57 }
58 else
59 {
60 ok_str(drive, "");
61 ok_str(dir, "\\\\?\\c:\\dir1\\dir2\\");
62 }
63 ok_str(fname, "file");
64 ok_str(ext, ".ext");
65
66 _splitpath("ab:\\dir1\\..\\file", drive, dir, fname, ext);
67 ok_str(drive, "");
68 ok_str(dir, "ab:\\dir1\\..\\");
69 ok_str(fname, "file");
70 ok_str(ext, "");
71
72 _splitpath("//?/c:/dir1/dir2/file.ext", drive, dir, fname, ext);
73 ok_str(drive, "");
74 ok_str(dir, "//?/c:/dir1/dir2/");
75 ok_str(fname, "file");
76 ok_str(ext, ".ext");
77
78 _splitpath("\\\\?\\0:/dir1\\dir2/file.", drive, dir, fname, ext);
79 if (Major >= 6)
80 {
81 ok_str(drive, "0:");
82 ok_str(dir, "/dir1\\dir2/");
83 }
84 else
85 {
86 ok_str(drive, "");
87 ok_str(dir, "\\\\?\\0:/dir1\\dir2/");
88 }
89 ok_str(fname, "file");
90 ok_str(ext, ".");
91
92 _splitpath("\\\\.\\c:\\dir1\\dir2\\.ext.ext2", drive, dir, fname, ext);
93 ok_str(drive, "");
94 ok_str(dir, "\\\\.\\c:\\dir1\\dir2\\");
95 ok_str(fname, ".ext");
96 ok_str(ext, ".ext2");
97
98 _splitpath("\\??\\c:\\dir1\\dir2\\file. ~ ", drive, dir, fname, ext);
99 ok_str(drive, "");
100 ok_str(dir, "\\??\\c:\\dir1\\dir2\\");
101 ok_str(fname, "file");
102 ok_str(ext, ". ~ ");
103
104 _splitpath("x: dir1\\/dir2 \\.blub", drive, dir, fname, ext);
105 ok_str(drive, "x:");
106 ok_str(dir, " dir1\\/dir2 \\");
107 ok_str(fname, "");
108 ok_str(ext, ".blub");
109
110 _splitpath("/:\\dir1\\dir2\\file.ext", drive, dir, fname, ext);
111 ok_str(drive, "/:");
112 ok_str(dir, "\\dir1\\dir2\\");
113 ok_str(fname, "file");
114 ok_str(ext, ".ext");
115
116}
117
#define EINVAL
Definition: acclib.h:90
unsigned int dir
Definition: maze.c:112
#define ok_str(x, y)
Definition: atltest.h:127
#define START_TEST(x)
Definition: atltest.h:75
#define ok_int(expression, result)
Definition: atltest.h:134
static const WCHAR *const ext[]
Definition: module.c:53
unsigned long DWORD
Definition: ntddk_ex.h:95
_CRTIMP void __cdecl _splitpath(_In_z_ const char *_FullPath, _Pre_maybenull_ _Post_z_ char *_Drive, _Pre_maybenull_ _Post_z_ char *_Dir, _Pre_maybenull_ _Post_z_ char *_Filename, _Pre_maybenull_ _Post_z_ char *_Ext)
#define LOBYTE(W)
Definition: jmemdos.c:487
#define DWORD
Definition: nt_native.h:44
#define LOWORD(l)
Definition: pedump.c:82
DWORD WINAPI GetVersion()
Definition: redirtest.c:5
_CRTIMP int *__cdecl _errno(void)
Definition: errno.c:17
#define win_skip
Definition: test.h:163