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#include <winpr/Pathcch.h>
29
30#ifdef __cplusplus
31extern "C"
32{
33#endif
34
35 /* Unix-style Paths */
36
37 WINPR_ATTR_NODISCARD
38 WINPR_API HRESULT PathCchAddSlashA(PSTR pszPath, size_t cchPath);
39
40 WINPR_ATTR_NODISCARD
41 WINPR_API HRESULT PathCchAddSlashW(PWSTR pszPath, size_t cchPath);
42
43 WINPR_ATTR_NODISCARD
44 WINPR_API HRESULT PathCchAddSlashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
45 size_t* pcchRemaining);
46
47 WINPR_ATTR_NODISCARD
48 WINPR_API HRESULT PathCchAddSlashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
49 size_t* pcchRemaining);
50
51 WINPR_ATTR_NODISCARD
52 WINPR_API HRESULT UnixPathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
53
54 WINPR_ATTR_NODISCARD
55 WINPR_API HRESULT UnixPathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
56
57 WINPR_ATTR_NODISCARD
58 WINPR_API HRESULT UnixPathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
59
60 WINPR_ATTR_NODISCARD
61 WINPR_API HRESULT UnixPathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);
62
63 WINPR_ATTR_NODISCARD
64 WINPR_API HRESULT UnixPathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags,
65 PSTR* ppszPathOut);
66
67 WINPR_ATTR_NODISCARD
68 WINPR_API HRESULT UnixPathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags,
69 PWSTR* ppszPathOut);
70
71#ifdef UNICODE
72#define PathCchAddSlash PathCchAddSlashW
73#define PathCchAddSlashEx PathCchAddSlashExW
74#define UnixPathCchAddExtension UnixPathCchAddExtensionW
75#define UnixPathCchAppend UnixPathCchAppendW
76#define UnixPathAllocCombine UnixPathAllocCombineW
77#else
78#define PathCchAddSlash PathCchAddSlashA
79#define PathCchAddSlashEx PathCchAddSlashExA
80#define UnixPathCchAddExtension UnixPathCchAddExtensionA
81#define UnixPathCchAppend UnixPathCchAppendA
82#define UnixPathAllocCombine UnixPathAllocCombineA
83#endif
84
85 /* Native-style Paths */
86
87 WINPR_ATTR_NODISCARD
88 WINPR_API HRESULT PathCchAddSeparatorA(PSTR pszPath, size_t cchPath);
89
90 WINPR_ATTR_NODISCARD
91 WINPR_API HRESULT PathCchAddSeparatorW(PWSTR pszPath, size_t cchPath);
92
93 WINPR_ATTR_NODISCARD
94 WINPR_API HRESULT PathCchAddSeparatorExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
95 size_t* pcchRemaining);
96
97 WINPR_ATTR_NODISCARD
98 WINPR_API HRESULT PathCchAddSeparatorExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
99 size_t* pcchRemaining);
100
101 WINPR_ATTR_NODISCARD
102 WINPR_API HRESULT NativePathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
103
104 WINPR_ATTR_NODISCARD
105 WINPR_API HRESULT NativePathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
106
107 WINPR_ATTR_NODISCARD
108 WINPR_API HRESULT NativePathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
109
110 WINPR_ATTR_NODISCARD
111 WINPR_API HRESULT NativePathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);
112
113 WINPR_ATTR_NODISCARD
114 WINPR_API HRESULT NativePathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags,
115 PSTR* ppszPathOut);
116
117 WINPR_ATTR_NODISCARD
118 WINPR_API HRESULT NativePathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore,
119 unsigned long dwFlags, PWSTR* ppszPathOut);
120
121#ifdef UNICODE
122#define PathCchAddSeparator PathCchAddSeparatorW
123#define PathCchAddSeparatorEx PathCchAddSeparatorExW
124#define NativePathCchAddExtension NativePathCchAddExtensionW
125#define NativePathCchAppend NativePathCchAppendW
126#define NativePathAllocCombine NativePathAllocCombineW
127#else
128#define PathCchAddSeparator PathCchAddSeparatorA
129#define PathCchAddSeparatorEx PathCchAddSeparatorExA
130#define NativePathCchAddExtension NativePathCchAddExtensionA
131#define NativePathCchAppend NativePathCchAppendA
132#define NativePathAllocCombine NativePathAllocCombineA
133#endif
134
135 /* Path Portability Functions */
136
137#define PATH_STYLE_WINDOWS 0x00000001
138#define PATH_STYLE_UNIX 0x00000002
139#define PATH_STYLE_NATIVE 0x00000003
140
141#define PATH_SHARED_LIB_EXT_WITH_DOT 0x00000001
142#define PATH_SHARED_LIB_EXT_APPLE_SO 0x00000002
143#define PATH_SHARED_LIB_EXT_EXPLICIT 0x80000000
144#define PATH_SHARED_LIB_EXT_EXPLICIT_DLL 0x80000001
145#define PATH_SHARED_LIB_EXT_EXPLICIT_SO 0x80000002
146#define PATH_SHARED_LIB_EXT_EXPLICIT_DYLIB 0x80000003
147
148 WINPR_ATTR_NODISCARD
149 WINPR_API HRESULT PathCchConvertStyleA(PSTR pszPath, size_t cchPath, unsigned long dwFlags);
150 WINPR_ATTR_NODISCARD
151 WINPR_API HRESULT PathCchConvertStyleW(PWSTR pszPath, size_t cchPath, unsigned long dwFlags);
152
153 WINPR_ATTR_NODISCARD
154 WINPR_API char PathGetSeparatorA(unsigned long dwFlags);
155
156 WINPR_ATTR_NODISCARD
157 WINPR_API WCHAR PathGetSeparatorW(unsigned long dwFlags);
158
159 WINPR_ATTR_NODISCARD
160 WINPR_API PCSTR PathGetSharedLibraryExtensionA(unsigned long dwFlags);
161
162 WINPR_ATTR_NODISCARD
163 WINPR_API PCWSTR PathGetSharedLibraryExtensionW(unsigned long dwFlags);
164
165#ifdef UNICODE
166#define PathCchConvertStyle PathCchConvertStyleW
167#define PathGetSeparator PathGetSeparatorW
168#define PathGetSharedLibraryExtension PathGetSharedLibraryExtensionW
169#else
170#define PathCchConvertStyle PathCchConvertStyleA
171#define PathGetSeparator PathGetSeparatorW
172#define PathGetSharedLibraryExtension PathGetSharedLibraryExtensionA
173#endif
174
175#ifdef __cplusplus
176}
177#endif
178
183typedef enum
184{
185 KNOWN_PATH_HOME = 1,
186 KNOWN_PATH_TEMP = 2,
187 KNOWN_PATH_XDG_DATA_HOME = 3,
188 KNOWN_PATH_XDG_CONFIG_HOME = 4,
189 KNOWN_PATH_XDG_CACHE_HOME = 5,
190 KNOWN_PATH_XDG_RUNTIME_DIR = 6,
191 KNOWN_PATH_SYSTEM_CONFIG_HOME = 7
192} eKnownPathTypes;
193
194#ifdef __cplusplus
195extern "C"
196{
197#endif
198
212 WINPR_ATTR_MALLOC(free, 1)
213 WINPR_API char* winpr_GetConfigFilePath(BOOL system, const char* filename);
214
224 WINPR_ATTR_MALLOC(free, 1)
225 WINPR_ATTR_FORMAT_ARG(2, 3)
226 WINPR_API char* winpr_GetConfigFilePathV(BOOL system, WINPR_FORMAT_ARG const char* filename,
227 ...);
228
239 WINPR_ATTR_MALLOC(free, 1)
240 WINPR_ATTR_FORMAT_ARG(2, 0)
241 WINPR_API char* winpr_GetConfigFilePathVA(BOOL system, WINPR_FORMAT_ARG const char* filename,
242 va_list ap);
243
244 WINPR_ATTR_NODISCARD
245 WINPR_API const char* GetKnownPathIdString(int id);
246
247 WINPR_ATTR_MALLOC(free, 1)
248 WINPR_API char* GetKnownPath(eKnownPathTypes id);
249
250 WINPR_ATTR_MALLOC(free, 1)
251 WINPR_API char* GetKnownSubPath(eKnownPathTypes id, const char* path);
252
261 WINPR_ATTR_MALLOC(free, 1)
262 WINPR_ATTR_FORMAT_ARG(2, 3)
263 WINPR_API char* GetKnownSubPathV(eKnownPathTypes id, const char* path, ...);
264
274 WINPR_ATTR_MALLOC(free, 1)
275 WINPR_ATTR_FORMAT_ARG(2, 0)
276 WINPR_API char* GetKnownSubPathVA(eKnownPathTypes id, const char* path, va_list ap);
277
278 WINPR_ATTR_MALLOC(free, 1)
279 WINPR_API char* GetEnvironmentPath(char* name);
280
281 WINPR_ATTR_MALLOC(free, 1)
282 WINPR_API char* GetEnvironmentSubPath(char* name, const char* path);
283
292 WINPR_ATTR_MALLOC(free, 1)
293 WINPR_ATTR_FORMAT_ARG(2, 3)
294 WINPR_API char* GetEnvironmentSubPathV(char* name, WINPR_FORMAT_ARG const char* path, ...);
295
306 WINPR_ATTR_MALLOC(free, 1)
307 WINPR_ATTR_FORMAT_ARG(2, 0)
308 WINPR_API char* GetEnvironmentSubPathVA(char* name, WINPR_FORMAT_ARG const char* path,
309 va_list ap);
310
311 WINPR_ATTR_MALLOC(free, 1)
312 WINPR_API char* GetCombinedPath(const char* basePath, const char* subPath);
313
326 WINPR_ATTR_MALLOC(free, 1)
327 WINPR_ATTR_FORMAT_ARG(2, 3)
328 WINPR_API char* GetCombinedPathV(const char* basePath, WINPR_FORMAT_ARG const char* subPathFmt,
329 ...);
330
343 WINPR_ATTR_MALLOC(free, 1)
344 WINPR_ATTR_FORMAT_ARG(2, 0)
345 WINPR_API char* GetCombinedPathVA(const char* basePath, WINPR_FORMAT_ARG const char* subPathFmt,
346 va_list ap);
347
348 WINPR_ATTR_NODISCARD
349 WINPR_API BOOL PathMakePathA(LPCSTR path, LPSECURITY_ATTRIBUTES lpAttributes);
350
351 WINPR_ATTR_NODISCARD
352 WINPR_API BOOL PathMakePathW(LPCWSTR path, LPSECURITY_ATTRIBUTES lpAttributes);
353
354#if !defined(_WIN32) || defined(_UWP)
355
356 WINPR_ATTR_NODISCARD
357 WINPR_API BOOL PathIsRelativeA(LPCSTR pszPath);
358
359 WINPR_ATTR_NODISCARD
360 WINPR_API BOOL PathIsRelativeW(LPCWSTR pszPath);
361
362 WINPR_ATTR_NODISCARD
363 WINPR_API BOOL PathFileExistsA(LPCSTR pszPath);
364
365 WINPR_ATTR_NODISCARD
366 WINPR_API BOOL PathFileExistsW(LPCWSTR pszPath);
367
368 WINPR_ATTR_NODISCARD
369 WINPR_API BOOL PathIsDirectoryEmptyA(LPCSTR pszPath);
370
371 WINPR_ATTR_NODISCARD
372 WINPR_API BOOL PathIsDirectoryEmptyW(LPCWSTR pszPath);
373
374#ifdef UNICODE
375#define PathFileExists PathFileExistsW
376#define PathIsDirectoryEmpty PathIsDirectoryEmptyW
377#else
378#define PathFileExists PathFileExistsA
379#define PathIsDirectoryEmpty PathIsDirectoryEmptyA
380#endif
381
382#endif
383
384 WINPR_ATTR_NODISCARD
385 WINPR_API BOOL winpr_MoveFile(LPCSTR lpExistingFileName, LPCSTR lpNewFileName);
386
387 WINPR_ATTR_NODISCARD
388 WINPR_API BOOL winpr_MoveFileEx(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, DWORD dwFlags);
389
390 WINPR_API BOOL winpr_DeleteFile(const char* lpFileName);
391
392 WINPR_API BOOL winpr_RemoveDirectory(LPCSTR lpPathName);
393
394 WINPR_API BOOL winpr_RemoveDirectory_RecursiveA(LPCSTR lpPathName);
395
396 WINPR_API BOOL winpr_RemoveDirectory_RecursiveW(LPCWSTR lpPathName);
397
398 WINPR_ATTR_NODISCARD
399 WINPR_API BOOL winpr_PathFileExists(const char* pszPath);
400
401 WINPR_ATTR_NODISCARD
402 WINPR_API BOOL winpr_PathMakePath(const char* path, LPSECURITY_ATTRIBUTES lpAttributes);
403
404#ifdef __cplusplus
405}
406#endif
407
408#endif /* WINPR_PATH_H */