27#include <winpr/wtypes.h>
34#define PATHCCH_ALLOW_LONG_PATHS \
37#define VOLUME_PREFIX _T("\\\\?\\Volume")
38#define VOLUME_PREFIX_LEN ((sizeof(VOLUME_PREFIX) / sizeof(TCHAR)) - 1)
45#define PATHCCH_MAX_CCH 0x8000
48 WINPR_API HRESULT PathCchAddBackslashA(PSTR pszPath,
size_t cchPath);
51 WINPR_API HRESULT PathCchAddBackslashW(PWSTR pszPath,
size_t cchPath);
54 WINPR_API HRESULT PathCchRemoveBackslashA(PSTR pszPath,
size_t cchPath);
57 WINPR_API HRESULT PathCchRemoveBackslashW(PWSTR pszPath,
size_t cchPath);
60 WINPR_API HRESULT PathCchAddBackslashExA(PSTR pszPath,
size_t cchPath, PSTR* ppszEnd,
61 size_t* pcchRemaining);
64 WINPR_API HRESULT PathCchAddBackslashExW(PWSTR pszPath,
size_t cchPath, PWSTR* ppszEnd,
65 size_t* pcchRemaining);
68 WINPR_API HRESULT PathCchRemoveBackslashExA(PSTR pszPath,
size_t cchPath, PSTR* ppszEnd,
69 size_t* pcchRemaining);
72 WINPR_API HRESULT PathCchRemoveBackslashExW(PWSTR pszPath,
size_t cchPath, PWSTR* ppszEnd,
73 size_t* pcchRemaining);
76 WINPR_API HRESULT PathCchAddExtensionA(PSTR pszPath,
size_t cchPath, PCSTR pszExt);
79 WINPR_API HRESULT PathCchAddExtensionW(PWSTR pszPath,
size_t cchPath, PCWSTR pszExt);
82 WINPR_API HRESULT PathCchAppendA(PSTR pszPath,
size_t cchPath, PCSTR pszMore);
85 WINPR_API HRESULT PathCchAppendW(PWSTR pszPath,
size_t cchPath, PCWSTR pszMore);
88 WINPR_API HRESULT PathCchAppendExA(PSTR pszPath,
size_t cchPath, PCSTR pszMore,
89 unsigned long dwFlags);
92 WINPR_API HRESULT PathCchAppendExW(PWSTR pszPath,
size_t cchPath, PCWSTR pszMore,
93 unsigned long dwFlags);
96 WINPR_API HRESULT PathCchCanonicalizeA(PSTR pszPathOut,
size_t cchPathOut, PCSTR pszPathIn);
99 WINPR_API HRESULT PathCchCanonicalizeW(PWSTR pszPathOut,
size_t cchPathOut, PCWSTR pszPathIn);
102 WINPR_API HRESULT PathCchCanonicalizeExA(PSTR pszPathOut,
size_t cchPathOut, PCSTR pszPathIn,
103 unsigned long dwFlags);
106 WINPR_API HRESULT PathCchCanonicalizeExW(PWSTR pszPathOut,
size_t cchPathOut, PCWSTR pszPathIn,
107 unsigned long dwFlags);
110 WINPR_API HRESULT PathAllocCanonicalizeA(PCSTR pszPathIn,
unsigned long dwFlags,
114 WINPR_API HRESULT PathAllocCanonicalizeW(PCWSTR pszPathIn,
unsigned long dwFlags,
118 WINPR_API HRESULT PathCchCombineA(PSTR pszPathOut,
size_t cchPathOut, PCSTR pszPathIn,
122 WINPR_API HRESULT PathCchCombineW(PWSTR pszPathOut,
size_t cchPathOut, PCWSTR pszPathIn,
126 WINPR_API HRESULT PathCchCombineExA(PSTR pszPathOut,
size_t cchPathOut, PCSTR pszPathIn,
127 PCSTR pszMore,
unsigned long dwFlags);
130 WINPR_API HRESULT PathCchCombineExW(PWSTR pszPathOut,
size_t cchPathOut, PCWSTR pszPathIn,
131 PCWSTR pszMore,
unsigned long dwFlags);
134 WINPR_API HRESULT PathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore,
unsigned long dwFlags,
138 WINPR_API HRESULT PathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore,
unsigned long dwFlags,
142 WINPR_API HRESULT PathCchFindExtensionA(PCSTR pszPath,
size_t cchPath, PCSTR* ppszExt);
145 WINPR_API HRESULT PathCchFindExtensionW(PCWSTR pszPath,
size_t cchPath, PCWSTR* ppszExt);
148 WINPR_API HRESULT PathCchRenameExtensionA(PSTR pszPath,
size_t cchPath, PCSTR pszExt);
151 WINPR_API HRESULT PathCchRenameExtensionW(PWSTR pszPath,
size_t cchPath, PCWSTR pszExt);
154 WINPR_API HRESULT PathCchRemoveExtensionA(PSTR pszPath,
size_t cchPath);
157 WINPR_API HRESULT PathCchRemoveExtensionW(PWSTR pszPath,
size_t cchPath);
160 WINPR_API BOOL PathCchIsRootA(PCSTR pszPath);
163 WINPR_API BOOL PathCchIsRootW(PCWSTR pszPath);
166 WINPR_API BOOL PathIsUNCExA(PCSTR pszPath, PCSTR* ppszServer);
169 WINPR_API BOOL PathIsUNCExW(PCWSTR pszPath, PCWSTR* ppszServer);
172 WINPR_API HRESULT PathCchSkipRootA(PCSTR pszPath, PCSTR* ppszRootEnd);
175 WINPR_API HRESULT PathCchSkipRootW(PCWSTR pszPath, PCWSTR* ppszRootEnd);
178 WINPR_API HRESULT PathCchStripToRootA(PSTR pszPath,
size_t cchPath);
181 WINPR_API HRESULT PathCchStripToRootW(PWSTR pszPath,
size_t cchPath);
184 WINPR_API HRESULT PathCchStripPrefixA(PSTR pszPath,
size_t cchPath);
187 WINPR_API HRESULT PathCchStripPrefixW(PWSTR pszPath,
size_t cchPath);
190 WINPR_API HRESULT PathCchRemoveFileSpecA(PSTR pszPath,
size_t cchPath);
193 WINPR_API HRESULT PathCchRemoveFileSpecW(PWSTR pszPath,
size_t cchPath);
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
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