FreeRDP
Loading...
Searching...
No Matches
Pathcch.h
1
20#pragma once
21
22#if defined(_WIN32)
23#include <Pathcch.h>
24#include <Shlwapi.h>
25#else
26
27#include <winpr/wtypes.h>
28
29#ifdef __cplusplus
30extern "C"
31{
32#endif
33
34#define PATHCCH_ALLOW_LONG_PATHS \
35 0x00000001 /* Allow building of \\?\ paths if longer than MAX_PATH */
36
37#define VOLUME_PREFIX _T("\\\\?\\Volume")
38#define VOLUME_PREFIX_LEN ((sizeof(VOLUME_PREFIX) / sizeof(TCHAR)) - 1)
39
40 /*
41 * Maximum number of characters we support using the "\\?\" syntax
42 * (0x7FFF + 1 for nullptr terminator)
43 */
44
45#define PATHCCH_MAX_CCH 0x8000
46
47 WINPR_ATTR_NODISCARD
48 WINPR_API HRESULT PathCchAddBackslashA(PSTR pszPath, size_t cchPath);
49
50 WINPR_ATTR_NODISCARD
51 WINPR_API HRESULT PathCchAddBackslashW(PWSTR pszPath, size_t cchPath);
52
53 WINPR_ATTR_NODISCARD
54 WINPR_API HRESULT PathCchRemoveBackslashA(PSTR pszPath, size_t cchPath);
55
56 WINPR_ATTR_NODISCARD
57 WINPR_API HRESULT PathCchRemoveBackslashW(PWSTR pszPath, size_t cchPath);
58
59 WINPR_ATTR_NODISCARD
60 WINPR_API HRESULT PathCchAddBackslashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
61 size_t* pcchRemaining);
62
63 WINPR_ATTR_NODISCARD
64 WINPR_API HRESULT PathCchAddBackslashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
65 size_t* pcchRemaining);
66
67 WINPR_ATTR_NODISCARD
68 WINPR_API HRESULT PathCchRemoveBackslashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
69 size_t* pcchRemaining);
70
71 WINPR_ATTR_NODISCARD
72 WINPR_API HRESULT PathCchRemoveBackslashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
73 size_t* pcchRemaining);
74
75 WINPR_ATTR_NODISCARD
76 WINPR_API HRESULT PathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
77
78 WINPR_ATTR_NODISCARD
79 WINPR_API HRESULT PathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
80
81 WINPR_ATTR_NODISCARD
82 WINPR_API HRESULT PathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
83
84 WINPR_ATTR_NODISCARD
85 WINPR_API HRESULT PathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);
86
87 WINPR_ATTR_NODISCARD
88 WINPR_API HRESULT PathCchAppendExA(PSTR pszPath, size_t cchPath, PCSTR pszMore,
89 unsigned long dwFlags);
90
91 WINPR_ATTR_NODISCARD
92 WINPR_API HRESULT PathCchAppendExW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore,
93 unsigned long dwFlags);
94
95 WINPR_ATTR_NODISCARD
96 WINPR_API HRESULT PathCchCanonicalizeA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn);
97
98 WINPR_ATTR_NODISCARD
99 WINPR_API HRESULT PathCchCanonicalizeW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn);
100
101 WINPR_ATTR_NODISCARD
102 WINPR_API HRESULT PathCchCanonicalizeExA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn,
103 unsigned long dwFlags);
104
105 WINPR_ATTR_NODISCARD
106 WINPR_API HRESULT PathCchCanonicalizeExW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn,
107 unsigned long dwFlags);
108
109 WINPR_ATTR_NODISCARD
110 WINPR_API HRESULT PathAllocCanonicalizeA(PCSTR pszPathIn, unsigned long dwFlags,
111 PSTR* ppszPathOut);
112
113 WINPR_ATTR_NODISCARD
114 WINPR_API HRESULT PathAllocCanonicalizeW(PCWSTR pszPathIn, unsigned long dwFlags,
115 PWSTR* ppszPathOut);
116
117 WINPR_ATTR_NODISCARD
118 WINPR_API HRESULT PathCchCombineA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn,
119 PCSTR pszMore);
120
121 WINPR_ATTR_NODISCARD
122 WINPR_API HRESULT PathCchCombineW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn,
123 PCWSTR pszMore);
124
125 WINPR_ATTR_NODISCARD
126 WINPR_API HRESULT PathCchCombineExA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn,
127 PCSTR pszMore, unsigned long dwFlags);
128
129 WINPR_ATTR_NODISCARD
130 WINPR_API HRESULT PathCchCombineExW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn,
131 PCWSTR pszMore, unsigned long dwFlags);
132
133 WINPR_ATTR_NODISCARD
134 WINPR_API HRESULT PathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags,
135 PSTR* ppszPathOut);
136
137 WINPR_ATTR_NODISCARD
138 WINPR_API HRESULT PathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags,
139 PWSTR* ppszPathOut);
140
141 WINPR_ATTR_NODISCARD
142 WINPR_API HRESULT PathCchFindExtensionA(PCSTR pszPath, size_t cchPath, PCSTR* ppszExt);
143
144 WINPR_ATTR_NODISCARD
145 WINPR_API HRESULT PathCchFindExtensionW(PCWSTR pszPath, size_t cchPath, PCWSTR* ppszExt);
146
147 WINPR_ATTR_NODISCARD
148 WINPR_API HRESULT PathCchRenameExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
149
150 WINPR_ATTR_NODISCARD
151 WINPR_API HRESULT PathCchRenameExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
152
153 WINPR_ATTR_NODISCARD
154 WINPR_API HRESULT PathCchRemoveExtensionA(PSTR pszPath, size_t cchPath);
155
156 WINPR_ATTR_NODISCARD
157 WINPR_API HRESULT PathCchRemoveExtensionW(PWSTR pszPath, size_t cchPath);
158
159 WINPR_ATTR_NODISCARD
160 WINPR_API BOOL PathCchIsRootA(PCSTR pszPath);
161
162 WINPR_ATTR_NODISCARD
163 WINPR_API BOOL PathCchIsRootW(PCWSTR pszPath);
164
165 WINPR_ATTR_NODISCARD
166 WINPR_API BOOL PathIsUNCExA(PCSTR pszPath, PCSTR* ppszServer);
167
168 WINPR_ATTR_NODISCARD
169 WINPR_API BOOL PathIsUNCExW(PCWSTR pszPath, PCWSTR* ppszServer);
170
171 WINPR_ATTR_NODISCARD
172 WINPR_API HRESULT PathCchSkipRootA(PCSTR pszPath, PCSTR* ppszRootEnd);
173
174 WINPR_ATTR_NODISCARD
175 WINPR_API HRESULT PathCchSkipRootW(PCWSTR pszPath, PCWSTR* ppszRootEnd);
176
177 WINPR_ATTR_NODISCARD
178 WINPR_API HRESULT PathCchStripToRootA(PSTR pszPath, size_t cchPath);
179
180 WINPR_ATTR_NODISCARD
181 WINPR_API HRESULT PathCchStripToRootW(PWSTR pszPath, size_t cchPath);
182
183 WINPR_ATTR_NODISCARD
184 WINPR_API HRESULT PathCchStripPrefixA(PSTR pszPath, size_t cchPath);
185
186 WINPR_ATTR_NODISCARD
187 WINPR_API HRESULT PathCchStripPrefixW(PWSTR pszPath, size_t cchPath);
188
189 WINPR_ATTR_NODISCARD
190 WINPR_API HRESULT PathCchRemoveFileSpecA(PSTR pszPath, size_t cchPath);
191
192 WINPR_ATTR_NODISCARD
193 WINPR_API HRESULT PathCchRemoveFileSpecW(PWSTR pszPath, size_t cchPath);
194
195#ifdef UNICODE
196#define PathCchAddBackslash PathCchAddBackslashW
197#define PathCchRemoveBackslash PathCchRemoveBackslashW
198#define PathCchAddBackslashEx PathCchAddBackslashExW
199#define PathCchRemoveBackslashEx PathCchRemoveBackslashExW
200#define PathCchAddExtension PathCchAddExtensionW
201#define PathCchAppend PathCchAppendW
202#define PathCchAppendEx PathCchAppendExW
203#define PathCchCanonicalize PathCchCanonicalizeW
204#define PathCchCanonicalizeEx PathCchCanonicalizeExW
205#define PathAllocCanonicalize PathAllocCanonicalizeW
206#define PathCchCombine PathCchCombineW
207#define PathCchCombineEx PathCchCombineExW
208#define PathAllocCombine PathAllocCombineW
209#define PathCchFindExtension PathCchFindExtensionW
210#define PathCchRenameExtension PathCchRenameExtensionW
211#define PathCchRemoveExtension PathCchRemoveExtensionW
212#define PathCchIsRoot PathCchIsRootW
213#define PathIsUNCEx PathIsUNCExW
214#define PathCchSkipRoot PathCchSkipRootW
215#define PathCchStripToRoot PathCchStripToRootW
216#define PathCchStripPrefix PathCchStripPrefixW
217#define PathCchRemoveFileSpec PathCchRemoveFileSpecW
218#else
219#define PathCchAddBackslash PathCchAddBackslashA
220#define PathCchRemoveBackslash PathCchRemoveBackslashA
221#define PathCchAddBackslashEx PathCchAddBackslashExA
222#define PathCchRemoveBackslashEx PathCchRemoveBackslashExA
223#define PathCchAddExtension PathCchAddExtensionA
224#define PathCchAppend PathCchAppendA
225#define PathCchAppendEx PathCchAppendExA
226#define PathCchCanonicalize PathCchCanonicalizeA
227#define PathCchCanonicalizeEx PathCchCanonicalizeExA
228#define PathAllocCanonicalize PathAllocCanonicalizeA
229#define PathCchCombine PathCchCombineA
230#define PathCchCombineEx PathCchCombineExA
231#define PathAllocCombine PathAllocCombineA
232#define PathCchFindExtension PathCchFindExtensionA
233#define PathCchRenameExtension PathCchRenameExtensionA
234#define PathCchRemoveExtension PathCchRemoveExtensionA
235#define PathCchIsRoot PathCchIsRootA
236#define PathIsUNCEx PathIsUNCExA
237#define PathCchSkipRoot PathCchSkipRootA
238#define PathCchStripToRoot PathCchStripToRootA
239#define PathCchStripPrefix PathCchStripPrefixA
240#define PathCchRemoveFileSpec PathCchRemoveFileSpecA
241#endif
242
243#ifdef __cplusplus
244}
245#endif
246
247#endif