FreeRDP
Loading...
Searching...
No Matches
path.h
1
20#ifndef WINPR_PATH_H
21#define WINPR_PATH_H
22
23#include <winpr/winpr.h>
24#include <winpr/tchar.h>
25#include <winpr/error.h>
26#include <winpr/wtypes.h>
27
28//#define WINPR_HAVE_PATHCCH_H 1
29
30#ifdef WINPR_HAVE_PATHCCH_H
31
32#include <Pathcch.h>
33
34#else
35
36#ifdef __cplusplus
37extern "C"
38{
39#endif
40
41#define PATHCCH_ALLOW_LONG_PATHS \
42 0x00000001 /* Allow building of \\?\ paths if longer than MAX_PATH */
43
44#define VOLUME_PREFIX _T("\\\\?\\Volume")
45#define VOLUME_PREFIX_LEN ((sizeof(VOLUME_PREFIX) / sizeof(TCHAR)) - 1)
46
47 /*
48 * Maximum number of characters we support using the "\\?\" syntax
49 * (0x7FFF + 1 for nullptr terminator)
50 */
51
52#define PATHCCH_MAX_CCH 0x8000
53
54 WINPR_ATTR_NODISCARD
55 WINPR_API HRESULT PathCchAddBackslashA(PSTR pszPath, size_t cchPath);
56
57 WINPR_ATTR_NODISCARD
58 WINPR_API HRESULT PathCchAddBackslashW(PWSTR pszPath, size_t cchPath);
59
60 WINPR_ATTR_NODISCARD
61 WINPR_API HRESULT PathCchRemoveBackslashA(PSTR pszPath, size_t cchPath);
62
63 WINPR_ATTR_NODISCARD
64 WINPR_API HRESULT PathCchRemoveBackslashW(PWSTR pszPath, size_t cchPath);
65
66 WINPR_ATTR_NODISCARD
67 WINPR_API HRESULT PathCchAddBackslashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
68 size_t* pcchRemaining);
69
70 WINPR_ATTR_NODISCARD
71 WINPR_API HRESULT PathCchAddBackslashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
72 size_t* pcchRemaining);
73
74 WINPR_ATTR_NODISCARD
75 WINPR_API HRESULT PathCchRemoveBackslashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
76 size_t* pcchRemaining);
77
78 WINPR_ATTR_NODISCARD
79 WINPR_API HRESULT PathCchRemoveBackslashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
80 size_t* pcchRemaining);
81
82 WINPR_ATTR_NODISCARD
83 WINPR_API HRESULT PathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
84
85 WINPR_ATTR_NODISCARD
86 WINPR_API HRESULT PathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
87
88 WINPR_ATTR_NODISCARD
89 WINPR_API HRESULT PathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
90
91 WINPR_ATTR_NODISCARD
92 WINPR_API HRESULT PathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);
93
94 WINPR_ATTR_NODISCARD
95 WINPR_API HRESULT PathCchAppendExA(PSTR pszPath, size_t cchPath, PCSTR pszMore,
96 unsigned long dwFlags);
97
98 WINPR_ATTR_NODISCARD
99 WINPR_API HRESULT PathCchAppendExW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore,
100 unsigned long dwFlags);
101
102 WINPR_ATTR_NODISCARD
103 WINPR_API HRESULT PathCchCanonicalizeA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn);
104
105 WINPR_ATTR_NODISCARD
106 WINPR_API HRESULT PathCchCanonicalizeW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn);
107
108 WINPR_ATTR_NODISCARD
109 WINPR_API HRESULT PathCchCanonicalizeExA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn,
110 unsigned long dwFlags);
111
112 WINPR_ATTR_NODISCARD
113 WINPR_API HRESULT PathCchCanonicalizeExW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn,
114 unsigned long dwFlags);
115
116 WINPR_ATTR_NODISCARD
117 WINPR_API HRESULT PathAllocCanonicalizeA(PCSTR pszPathIn, unsigned long dwFlags,
118 PSTR* ppszPathOut);
119
120 WINPR_ATTR_NODISCARD
121 WINPR_API HRESULT PathAllocCanonicalizeW(PCWSTR pszPathIn, unsigned long dwFlags,
122 PWSTR* ppszPathOut);
123
124 WINPR_ATTR_NODISCARD
125 WINPR_API HRESULT PathCchCombineA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn,
126 PCSTR pszMore);
127
128 WINPR_ATTR_NODISCARD
129 WINPR_API HRESULT PathCchCombineW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn,
130 PCWSTR pszMore);
131
132 WINPR_ATTR_NODISCARD
133 WINPR_API HRESULT PathCchCombineExA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn,
134 PCSTR pszMore, unsigned long dwFlags);
135
136 WINPR_ATTR_NODISCARD
137 WINPR_API HRESULT PathCchCombineExW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn,
138 PCWSTR pszMore, unsigned long dwFlags);
139
140 WINPR_ATTR_NODISCARD
141 WINPR_API HRESULT PathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags,
142 PSTR* ppszPathOut);
143
144 WINPR_ATTR_NODISCARD
145 WINPR_API HRESULT PathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags,
146 PWSTR* ppszPathOut);
147
148 WINPR_ATTR_NODISCARD
149 WINPR_API HRESULT PathCchFindExtensionA(PCSTR pszPath, size_t cchPath, PCSTR* ppszExt);
150
151 WINPR_ATTR_NODISCARD
152 WINPR_API HRESULT PathCchFindExtensionW(PCWSTR pszPath, size_t cchPath, PCWSTR* ppszExt);
153
154 WINPR_ATTR_NODISCARD
155 WINPR_API HRESULT PathCchRenameExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
156
157 WINPR_ATTR_NODISCARD
158 WINPR_API HRESULT PathCchRenameExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
159
160 WINPR_ATTR_NODISCARD
161 WINPR_API HRESULT PathCchRemoveExtensionA(PSTR pszPath, size_t cchPath);
162
163 WINPR_ATTR_NODISCARD
164 WINPR_API HRESULT PathCchRemoveExtensionW(PWSTR pszPath, size_t cchPath);
165
166 WINPR_ATTR_NODISCARD
167 WINPR_API BOOL PathCchIsRootA(PCSTR pszPath);
168
169 WINPR_ATTR_NODISCARD
170 WINPR_API BOOL PathCchIsRootW(PCWSTR pszPath);
171
172 WINPR_ATTR_NODISCARD
173 WINPR_API BOOL PathIsUNCExA(PCSTR pszPath, PCSTR* ppszServer);
174
175 WINPR_ATTR_NODISCARD
176 WINPR_API BOOL PathIsUNCExW(PCWSTR pszPath, PCWSTR* ppszServer);
177
178 WINPR_ATTR_NODISCARD
179 WINPR_API HRESULT PathCchSkipRootA(PCSTR pszPath, PCSTR* ppszRootEnd);
180
181 WINPR_ATTR_NODISCARD
182 WINPR_API HRESULT PathCchSkipRootW(PCWSTR pszPath, PCWSTR* ppszRootEnd);
183
184 WINPR_ATTR_NODISCARD
185 WINPR_API HRESULT PathCchStripToRootA(PSTR pszPath, size_t cchPath);
186
187 WINPR_ATTR_NODISCARD
188 WINPR_API HRESULT PathCchStripToRootW(PWSTR pszPath, size_t cchPath);
189
190 WINPR_ATTR_NODISCARD
191 WINPR_API HRESULT PathCchStripPrefixA(PSTR pszPath, size_t cchPath);
192
193 WINPR_ATTR_NODISCARD
194 WINPR_API HRESULT PathCchStripPrefixW(PWSTR pszPath, size_t cchPath);
195
196 WINPR_ATTR_NODISCARD
197 WINPR_API HRESULT PathCchRemoveFileSpecA(PSTR pszPath, size_t cchPath);
198
199 WINPR_ATTR_NODISCARD
200 WINPR_API HRESULT PathCchRemoveFileSpecW(PWSTR pszPath, size_t cchPath);
201
202#ifdef UNICODE
203#define PathCchAddBackslash PathCchAddBackslashW
204#define PathCchRemoveBackslash PathCchRemoveBackslashW
205#define PathCchAddBackslashEx PathCchAddBackslashExW
206#define PathCchRemoveBackslashEx PathCchRemoveBackslashExW
207#define PathCchAddExtension PathCchAddExtensionW
208#define PathCchAppend PathCchAppendW
209#define PathCchAppendEx PathCchAppendExW
210#define PathCchCanonicalize PathCchCanonicalizeW
211#define PathCchCanonicalizeEx PathCchCanonicalizeExW
212#define PathAllocCanonicalize PathAllocCanonicalizeW
213#define PathCchCombine PathCchCombineW
214#define PathCchCombineEx PathCchCombineExW
215#define PathAllocCombine PathAllocCombineW
216#define PathCchFindExtension PathCchFindExtensionW
217#define PathCchRenameExtension PathCchRenameExtensionW
218#define PathCchRemoveExtension PathCchRemoveExtensionW
219#define PathCchIsRoot PathCchIsRootW
220#define PathIsUNCEx PathIsUNCExW
221#define PathCchSkipRoot PathCchSkipRootW
222#define PathCchStripToRoot PathCchStripToRootW
223#define PathCchStripPrefix PathCchStripPrefixW
224#define PathCchRemoveFileSpec PathCchRemoveFileSpecW
225#else
226#define PathCchAddBackslash PathCchAddBackslashA
227#define PathCchRemoveBackslash PathCchRemoveBackslashA
228#define PathCchAddBackslashEx PathCchAddBackslashExA
229#define PathCchRemoveBackslashEx PathCchRemoveBackslashExA
230#define PathCchAddExtension PathCchAddExtensionA
231#define PathCchAppend PathCchAppendA
232#define PathCchAppendEx PathCchAppendExA
233#define PathCchCanonicalize PathCchCanonicalizeA
234#define PathCchCanonicalizeEx PathCchCanonicalizeExA
235#define PathAllocCanonicalize PathAllocCanonicalizeA
236#define PathCchCombine PathCchCombineA
237#define PathCchCombineEx PathCchCombineExA
238#define PathAllocCombine PathAllocCombineA
239#define PathCchFindExtension PathCchFindExtensionA
240#define PathCchRenameExtension PathCchRenameExtensionA
241#define PathCchRemoveExtension PathCchRemoveExtensionA
242#define PathCchIsRoot PathCchIsRootA
243#define PathIsUNCEx PathIsUNCExA
244#define PathCchSkipRoot PathCchSkipRootA
245#define PathCchStripToRoot PathCchStripToRootA
246#define PathCchStripPrefix PathCchStripPrefixA
247#define PathCchRemoveFileSpec PathCchRemoveFileSpecA
248#endif
249
250 /* Unix-style Paths */
251
252 WINPR_ATTR_NODISCARD
253 WINPR_API HRESULT PathCchAddSlashA(PSTR pszPath, size_t cchPath);
254
255 WINPR_ATTR_NODISCARD
256 WINPR_API HRESULT PathCchAddSlashW(PWSTR pszPath, size_t cchPath);
257
258 WINPR_ATTR_NODISCARD
259 WINPR_API HRESULT PathCchAddSlashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
260 size_t* pcchRemaining);
261
262 WINPR_ATTR_NODISCARD
263 WINPR_API HRESULT PathCchAddSlashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
264 size_t* pcchRemaining);
265
266 WINPR_ATTR_NODISCARD
267 WINPR_API HRESULT UnixPathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
268
269 WINPR_ATTR_NODISCARD
270 WINPR_API HRESULT UnixPathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
271
272 WINPR_ATTR_NODISCARD
273 WINPR_API HRESULT UnixPathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
274
275 WINPR_ATTR_NODISCARD
276 WINPR_API HRESULT UnixPathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);
277
278 WINPR_ATTR_NODISCARD
279 WINPR_API HRESULT UnixPathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags,
280 PSTR* ppszPathOut);
281
282 WINPR_ATTR_NODISCARD
283 WINPR_API HRESULT UnixPathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags,
284 PWSTR* ppszPathOut);
285
286#ifdef UNICODE
287#define PathCchAddSlash PathCchAddSlashW
288#define PathCchAddSlashEx PathCchAddSlashExW
289#define UnixPathCchAddExtension UnixPathCchAddExtensionW
290#define UnixPathCchAppend UnixPathCchAppendW
291#define UnixPathAllocCombine UnixPathAllocCombineW
292#else
293#define PathCchAddSlash PathCchAddSlashA
294#define PathCchAddSlashEx PathCchAddSlashExA
295#define UnixPathCchAddExtension UnixPathCchAddExtensionA
296#define UnixPathCchAppend UnixPathCchAppendA
297#define UnixPathAllocCombine UnixPathAllocCombineA
298#endif
299
300 /* Native-style Paths */
301
302 WINPR_ATTR_NODISCARD
303 WINPR_API HRESULT PathCchAddSeparatorA(PSTR pszPath, size_t cchPath);
304
305 WINPR_ATTR_NODISCARD
306 WINPR_API HRESULT PathCchAddSeparatorW(PWSTR pszPath, size_t cchPath);
307
308 WINPR_ATTR_NODISCARD
309 WINPR_API HRESULT PathCchAddSeparatorExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
310 size_t* pcchRemaining);
311
312 WINPR_ATTR_NODISCARD
313 WINPR_API HRESULT PathCchAddSeparatorExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
314 size_t* pcchRemaining);
315
316 WINPR_ATTR_NODISCARD
317 WINPR_API HRESULT NativePathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
318
319 WINPR_ATTR_NODISCARD
320 WINPR_API HRESULT NativePathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
321
322 WINPR_ATTR_NODISCARD
323 WINPR_API HRESULT NativePathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
324
325 WINPR_ATTR_NODISCARD
326 WINPR_API HRESULT NativePathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);
327
328 WINPR_ATTR_NODISCARD
329 WINPR_API HRESULT NativePathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags,
330 PSTR* ppszPathOut);
331
332 WINPR_ATTR_NODISCARD
333 WINPR_API HRESULT NativePathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore,
334 unsigned long dwFlags, PWSTR* ppszPathOut);
335
336#ifdef UNICODE
337#define PathCchAddSeparator PathCchAddSeparatorW
338#define PathCchAddSeparatorEx PathCchAddSeparatorExW
339#define NativePathCchAddExtension NativePathCchAddExtensionW
340#define NativePathCchAppend NativePathCchAppendW
341#define NativePathAllocCombine NativePathAllocCombineW
342#else
343#define PathCchAddSeparator PathCchAddSeparatorA
344#define PathCchAddSeparatorEx PathCchAddSeparatorExA
345#define NativePathCchAddExtension NativePathCchAddExtensionA
346#define NativePathCchAppend NativePathCchAppendA
347#define NativePathAllocCombine NativePathAllocCombineA
348#endif
349
350 /* Path Portability Functions */
351
352#define PATH_STYLE_WINDOWS 0x00000001
353#define PATH_STYLE_UNIX 0x00000002
354#define PATH_STYLE_NATIVE 0x00000003
355
356#define PATH_SHARED_LIB_EXT_WITH_DOT 0x00000001
357#define PATH_SHARED_LIB_EXT_APPLE_SO 0x00000002
358#define PATH_SHARED_LIB_EXT_EXPLICIT 0x80000000
359#define PATH_SHARED_LIB_EXT_EXPLICIT_DLL 0x80000001
360#define PATH_SHARED_LIB_EXT_EXPLICIT_SO 0x80000002
361#define PATH_SHARED_LIB_EXT_EXPLICIT_DYLIB 0x80000003
362
363 WINPR_ATTR_NODISCARD
364 WINPR_API HRESULT PathCchConvertStyleA(PSTR pszPath, size_t cchPath, unsigned long dwFlags);
365 WINPR_ATTR_NODISCARD
366 WINPR_API HRESULT PathCchConvertStyleW(PWSTR pszPath, size_t cchPath, unsigned long dwFlags);
367
368 WINPR_ATTR_NODISCARD
369 WINPR_API char PathGetSeparatorA(unsigned long dwFlags);
370
371 WINPR_ATTR_NODISCARD
372 WINPR_API WCHAR PathGetSeparatorW(unsigned long dwFlags);
373
374 WINPR_ATTR_NODISCARD
375 WINPR_API PCSTR PathGetSharedLibraryExtensionA(unsigned long dwFlags);
376
377 WINPR_ATTR_NODISCARD
378 WINPR_API PCWSTR PathGetSharedLibraryExtensionW(unsigned long dwFlags);
379
380#ifdef UNICODE
381#define PathCchConvertStyle PathCchConvertStyleW
382#define PathGetSeparator PathGetSeparatorW
383#define PathGetSharedLibraryExtension PathGetSharedLibraryExtensionW
384#else
385#define PathCchConvertStyle PathCchConvertStyleA
386#define PathGetSeparator PathGetSeparatorW
387#define PathGetSharedLibraryExtension PathGetSharedLibraryExtensionA
388#endif
389
390#ifdef __cplusplus
391}
392#endif
393
394#endif
395
400typedef enum
401{
402 KNOWN_PATH_HOME = 1,
403 KNOWN_PATH_TEMP = 2,
404 KNOWN_PATH_XDG_DATA_HOME = 3,
405 KNOWN_PATH_XDG_CONFIG_HOME = 4,
406 KNOWN_PATH_XDG_CACHE_HOME = 5,
407 KNOWN_PATH_XDG_RUNTIME_DIR = 6,
408 KNOWN_PATH_SYSTEM_CONFIG_HOME = 7
409} eKnownPathTypes;
410
411#ifdef __cplusplus
412extern "C"
413{
414#endif
415
429 WINPR_ATTR_MALLOC(free, 1)
430 WINPR_API char* winpr_GetConfigFilePath(BOOL system, const char* filename);
431
441 WINPR_ATTR_MALLOC(free, 1)
442 WINPR_ATTR_FORMAT_ARG(2, 3)
443 WINPR_API char* winpr_GetConfigFilePathV(BOOL system, WINPR_FORMAT_ARG const char* filename,
444 ...);
445
456 WINPR_ATTR_MALLOC(free, 1)
457 WINPR_ATTR_FORMAT_ARG(2, 0)
458 WINPR_API char* winpr_GetConfigFilePathVA(BOOL system, WINPR_FORMAT_ARG const char* filename,
459 va_list ap);
460
461 WINPR_ATTR_NODISCARD
462 WINPR_API const char* GetKnownPathIdString(int id);
463
464 WINPR_ATTR_MALLOC(free, 1)
465 WINPR_API char* GetKnownPath(eKnownPathTypes id);
466
467 WINPR_ATTR_MALLOC(free, 1)
468 WINPR_API char* GetKnownSubPath(eKnownPathTypes id, const char* path);
469
478 WINPR_ATTR_MALLOC(free, 1)
479 WINPR_ATTR_FORMAT_ARG(2, 3)
480 WINPR_API char* GetKnownSubPathV(eKnownPathTypes id, const char* path, ...);
481
491 WINPR_ATTR_MALLOC(free, 1)
492 WINPR_ATTR_FORMAT_ARG(2, 0)
493 WINPR_API char* GetKnownSubPathVA(eKnownPathTypes id, const char* path, va_list ap);
494
495 WINPR_ATTR_MALLOC(free, 1)
496 WINPR_API char* GetEnvironmentPath(char* name);
497
498 WINPR_ATTR_MALLOC(free, 1)
499 WINPR_API char* GetEnvironmentSubPath(char* name, const char* path);
500
509 WINPR_ATTR_MALLOC(free, 1)
510 WINPR_ATTR_FORMAT_ARG(2, 3)
511 WINPR_API char* GetEnvironmentSubPathV(char* name, WINPR_FORMAT_ARG const char* path, ...);
512
523 WINPR_ATTR_MALLOC(free, 1)
524 WINPR_ATTR_FORMAT_ARG(2, 0)
525 WINPR_API char* GetEnvironmentSubPathVA(char* name, WINPR_FORMAT_ARG const char* path,
526 va_list ap);
527
528 WINPR_ATTR_MALLOC(free, 1)
529 WINPR_API char* GetCombinedPath(const char* basePath, const char* subPath);
530
543 WINPR_ATTR_MALLOC(free, 1)
544 WINPR_ATTR_FORMAT_ARG(2, 3)
545 WINPR_API char* GetCombinedPathV(const char* basePath, WINPR_FORMAT_ARG const char* subPathFmt,
546 ...);
547
560 WINPR_ATTR_MALLOC(free, 1)
561 WINPR_ATTR_FORMAT_ARG(2, 0)
562 WINPR_API char* GetCombinedPathVA(const char* basePath, WINPR_FORMAT_ARG const char* subPathFmt,
563 va_list ap);
564
565 WINPR_ATTR_NODISCARD
566 WINPR_API BOOL PathMakePathA(LPCSTR path, LPSECURITY_ATTRIBUTES lpAttributes);
567
568 WINPR_ATTR_NODISCARD
569 WINPR_API BOOL PathMakePathW(LPCWSTR path, LPSECURITY_ATTRIBUTES lpAttributes);
570
571#if !defined(_WIN32) || defined(_UWP)
572
573 WINPR_ATTR_NODISCARD
574 WINPR_API BOOL PathIsRelativeA(LPCSTR pszPath);
575
576 WINPR_ATTR_NODISCARD
577 WINPR_API BOOL PathIsRelativeW(LPCWSTR pszPath);
578
579 WINPR_ATTR_NODISCARD
580 WINPR_API BOOL PathFileExistsA(LPCSTR pszPath);
581
582 WINPR_ATTR_NODISCARD
583 WINPR_API BOOL PathFileExistsW(LPCWSTR pszPath);
584
585 WINPR_ATTR_NODISCARD
586 WINPR_API BOOL PathIsDirectoryEmptyA(LPCSTR pszPath);
587
588 WINPR_ATTR_NODISCARD
589 WINPR_API BOOL PathIsDirectoryEmptyW(LPCWSTR pszPath);
590
591#ifdef UNICODE
592#define PathFileExists PathFileExistsW
593#define PathIsDirectoryEmpty PathIsDirectoryEmptyW
594#else
595#define PathFileExists PathFileExistsA
596#define PathIsDirectoryEmpty PathIsDirectoryEmptyA
597#endif
598
599#endif
600
601 WINPR_ATTR_NODISCARD
602 WINPR_API BOOL winpr_MoveFile(LPCSTR lpExistingFileName, LPCSTR lpNewFileName);
603
604 WINPR_ATTR_NODISCARD
605 WINPR_API BOOL winpr_MoveFileEx(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, DWORD dwFlags);
606
607 WINPR_API BOOL winpr_DeleteFile(const char* lpFileName);
608
609 WINPR_API BOOL winpr_RemoveDirectory(LPCSTR lpPathName);
610
611 WINPR_API BOOL winpr_RemoveDirectory_RecursiveA(LPCSTR lpPathName);
612
613 WINPR_API BOOL winpr_RemoveDirectory_RecursiveW(LPCWSTR lpPathName);
614
615 WINPR_ATTR_NODISCARD
616 WINPR_API BOOL winpr_PathFileExists(const char* pszPath);
617
618 WINPR_ATTR_NODISCARD
619 WINPR_API BOOL winpr_PathMakePath(const char* path, LPSECURITY_ATTRIBUTES lpAttributes);
620
621#ifdef __cplusplus
622}
623#endif
624
625#ifdef _WIN32
626#include <shlwapi.h>
627#endif
628
629#endif /* WINPR_PATH_H */