FreeRDP
Loading...
Searching...
No Matches
include/winpr/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#if defined(_WIN32)
31#include <shlwapi.h>
32#endif
33
34#ifdef __cplusplus
35extern "C"
36{
37#endif
38
39 /* Unix-style Paths */
40
41 WINPR_ATTR_NODISCARD
42 WINPR_API HRESULT PathCchAddSlashA(PSTR pszPath, size_t cchPath);
43
44 WINPR_ATTR_NODISCARD
45 WINPR_API HRESULT PathCchAddSlashW(PWSTR pszPath, size_t cchPath);
46
47 WINPR_ATTR_NODISCARD
48 WINPR_API HRESULT PathCchAddSlashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
49 size_t* pcchRemaining);
50
51 WINPR_ATTR_NODISCARD
52 WINPR_API HRESULT PathCchAddSlashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
53 size_t* pcchRemaining);
54
55 WINPR_ATTR_NODISCARD
56 WINPR_API HRESULT UnixPathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
57
58 WINPR_ATTR_NODISCARD
59 WINPR_API HRESULT UnixPathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
60
61 WINPR_ATTR_NODISCARD
62 WINPR_API HRESULT UnixPathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
63
64 WINPR_ATTR_NODISCARD
65 WINPR_API HRESULT UnixPathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);
66
67 WINPR_ATTR_NODISCARD
68 WINPR_API HRESULT UnixPathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags,
69 PSTR* ppszPathOut);
70
71 WINPR_ATTR_NODISCARD
72 WINPR_API HRESULT UnixPathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags,
73 PWSTR* ppszPathOut);
74
75#ifdef UNICODE
76#define PathCchAddSlash PathCchAddSlashW
77#define PathCchAddSlashEx PathCchAddSlashExW
78#define UnixPathCchAddExtension UnixPathCchAddExtensionW
79#define UnixPathCchAppend UnixPathCchAppendW
80#define UnixPathAllocCombine UnixPathAllocCombineW
81#else
82#define PathCchAddSlash PathCchAddSlashA
83#define PathCchAddSlashEx PathCchAddSlashExA
84#define UnixPathCchAddExtension UnixPathCchAddExtensionA
85#define UnixPathCchAppend UnixPathCchAppendA
86#define UnixPathAllocCombine UnixPathAllocCombineA
87#endif
88
89 /* Native-style Paths */
90
91 WINPR_ATTR_NODISCARD
92 WINPR_API HRESULT PathCchAddSeparatorA(PSTR pszPath, size_t cchPath);
93
94 WINPR_ATTR_NODISCARD
95 WINPR_API HRESULT PathCchAddSeparatorW(PWSTR pszPath, size_t cchPath);
96
97 WINPR_ATTR_NODISCARD
98 WINPR_API HRESULT PathCchAddSeparatorExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
99 size_t* pcchRemaining);
100
101 WINPR_ATTR_NODISCARD
102 WINPR_API HRESULT PathCchAddSeparatorExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
103 size_t* pcchRemaining);
104
105 WINPR_ATTR_NODISCARD
106 WINPR_API HRESULT NativePathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
107
108 WINPR_ATTR_NODISCARD
109 WINPR_API HRESULT NativePathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);
110
111 WINPR_ATTR_NODISCARD
112 WINPR_API HRESULT NativePathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
113
114 WINPR_ATTR_NODISCARD
115 WINPR_API HRESULT NativePathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);
116
117 WINPR_ATTR_NODISCARD
118 WINPR_API HRESULT NativePathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags,
119 PSTR* ppszPathOut);
120
121 WINPR_ATTR_NODISCARD
122 WINPR_API HRESULT NativePathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore,
123 unsigned long dwFlags, PWSTR* ppszPathOut);
124
125#ifdef UNICODE
126#define PathCchAddSeparator PathCchAddSeparatorW
127#define PathCchAddSeparatorEx PathCchAddSeparatorExW
128#define NativePathCchAddExtension NativePathCchAddExtensionW
129#define NativePathCchAppend NativePathCchAppendW
130#define NativePathAllocCombine NativePathAllocCombineW
131#else
132#define PathCchAddSeparator PathCchAddSeparatorA
133#define PathCchAddSeparatorEx PathCchAddSeparatorExA
134#define NativePathCchAddExtension NativePathCchAddExtensionA
135#define NativePathCchAppend NativePathCchAppendA
136#define NativePathAllocCombine NativePathAllocCombineA
137#endif
138
139 /* Path Portability Functions */
140
141#define PATH_STYLE_WINDOWS 0x00000001
142#define PATH_STYLE_UNIX 0x00000002
143#define PATH_STYLE_NATIVE 0x00000003
144
145#define PATH_SHARED_LIB_EXT_WITH_DOT 0x00000001
146#define PATH_SHARED_LIB_EXT_APPLE_SO 0x00000002
147#define PATH_SHARED_LIB_EXT_EXPLICIT 0x80000000
148#define PATH_SHARED_LIB_EXT_EXPLICIT_DLL 0x80000001
149#define PATH_SHARED_LIB_EXT_EXPLICIT_SO 0x80000002
150#define PATH_SHARED_LIB_EXT_EXPLICIT_DYLIB 0x80000003
151
152 WINPR_ATTR_NODISCARD
153 WINPR_API HRESULT PathCchConvertStyleA(PSTR pszPath, size_t cchPath, unsigned long dwFlags);
154 WINPR_ATTR_NODISCARD
155 WINPR_API HRESULT PathCchConvertStyleW(PWSTR pszPath, size_t cchPath, unsigned long dwFlags);
156
157 WINPR_ATTR_NODISCARD
158 WINPR_API char PathGetSeparatorA(unsigned long dwFlags);
159
160 WINPR_ATTR_NODISCARD
161 WINPR_API WCHAR PathGetSeparatorW(unsigned long dwFlags);
162
163 WINPR_ATTR_NODISCARD
164 WINPR_API PCSTR PathGetSharedLibraryExtensionA(unsigned long dwFlags);
165
166 WINPR_ATTR_NODISCARD
167 WINPR_API PCWSTR PathGetSharedLibraryExtensionW(unsigned long dwFlags);
168
169#ifdef UNICODE
170#define PathCchConvertStyle PathCchConvertStyleW
171#define PathGetSeparator PathGetSeparatorW
172#define PathGetSharedLibraryExtension PathGetSharedLibraryExtensionW
173#else
174#define PathCchConvertStyle PathCchConvertStyleA
175#define PathGetSeparator PathGetSeparatorW
176#define PathGetSharedLibraryExtension PathGetSharedLibraryExtensionA
177#endif
178
179#ifdef __cplusplus
180}
181#endif
182
187typedef enum
188{
189 KNOWN_PATH_HOME = 1,
190 KNOWN_PATH_TEMP = 2,
191 KNOWN_PATH_XDG_DATA_HOME = 3,
192 KNOWN_PATH_XDG_CONFIG_HOME = 4,
193 KNOWN_PATH_XDG_CACHE_HOME = 5,
194 KNOWN_PATH_XDG_RUNTIME_DIR = 6,
195 KNOWN_PATH_SYSTEM_CONFIG_HOME = 7
196} eKnownPathTypes;
197
198#ifdef __cplusplus
199extern "C"
200{
201#endif
202
216 WINPR_ATTR_MALLOC(free, 1)
217 WINPR_API char* winpr_GetConfigFilePath(BOOL system, const char* filename);
218
228 WINPR_ATTR_MALLOC(free, 1)
229 WINPR_ATTR_FORMAT_ARG(2, 3)
230 WINPR_API char* winpr_GetConfigFilePathV(BOOL system, WINPR_FORMAT_ARG const char* filename,
231 ...);
232
243 WINPR_ATTR_MALLOC(free, 1)
244 WINPR_ATTR_FORMAT_ARG(2, 0)
245 WINPR_API char* winpr_GetConfigFilePathVA(BOOL system, WINPR_FORMAT_ARG const char* filename,
246 va_list ap);
247
248 WINPR_ATTR_NODISCARD
249 WINPR_API const char* GetKnownPathIdString(int id);
250
258 WINPR_ATTR_MALLOC(free, 1)
259 WINPR_API char* GetKnownPath(eKnownPathTypes id);
260
261 WINPR_ATTR_MALLOC(free, 1)
262 WINPR_API char* GetKnownSubPath(eKnownPathTypes id, const char* path);
263
272 WINPR_ATTR_MALLOC(free, 1)
273 WINPR_ATTR_FORMAT_ARG(2, 3)
274 WINPR_API char* GetKnownSubPathV(eKnownPathTypes id, const char* path, ...);
275
285 WINPR_ATTR_MALLOC(free, 1)
286 WINPR_ATTR_FORMAT_ARG(2, 0)
287 WINPR_API char* GetKnownSubPathVA(eKnownPathTypes id, const char* path, va_list ap);
288
289 WINPR_ATTR_MALLOC(free, 1)
290 WINPR_API char* GetEnvironmentPath(char* name);
291
292 WINPR_ATTR_MALLOC(free, 1)
293 WINPR_API char* GetEnvironmentSubPath(char* name, const char* path);
294
303 WINPR_ATTR_MALLOC(free, 1)
304 WINPR_ATTR_FORMAT_ARG(2, 3)
305 WINPR_API char* GetEnvironmentSubPathV(char* name, WINPR_FORMAT_ARG const char* path, ...);
306
317 WINPR_ATTR_MALLOC(free, 1)
318 WINPR_ATTR_FORMAT_ARG(2, 0)
319 WINPR_API char* GetEnvironmentSubPathVA(char* name, WINPR_FORMAT_ARG const char* path,
320 va_list ap);
321
322 WINPR_ATTR_MALLOC(free, 1)
323 WINPR_API char* GetCombinedPath(const char* basePath, const char* subPath);
324
337 WINPR_ATTR_MALLOC(free, 1)
338 WINPR_ATTR_FORMAT_ARG(2, 3)
339 WINPR_API char* GetCombinedPathV(const char* basePath, WINPR_FORMAT_ARG const char* subPathFmt,
340 ...);
341
354 WINPR_ATTR_MALLOC(free, 1)
355 WINPR_ATTR_FORMAT_ARG(2, 0)
356 WINPR_API char* GetCombinedPathVA(const char* basePath, WINPR_FORMAT_ARG const char* subPathFmt,
357 va_list ap);
358
359 WINPR_ATTR_NODISCARD
360 WINPR_API BOOL PathMakePathA(LPCSTR path, LPSECURITY_ATTRIBUTES lpAttributes);
361
362 WINPR_ATTR_NODISCARD
363 WINPR_API BOOL PathMakePathW(LPCWSTR path, LPSECURITY_ATTRIBUTES lpAttributes);
364
365#if !defined(_WIN32) || defined(_UWP)
366
367 WINPR_ATTR_NODISCARD
368 WINPR_API BOOL PathIsRelativeA(LPCSTR pszPath);
369
370 WINPR_ATTR_NODISCARD
371 WINPR_API BOOL PathIsRelativeW(LPCWSTR pszPath);
372
373 WINPR_ATTR_NODISCARD
374 WINPR_API BOOL PathFileExistsA(LPCSTR pszPath);
375
376 WINPR_ATTR_NODISCARD
377 WINPR_API BOOL PathFileExistsW(LPCWSTR pszPath);
378
379 WINPR_ATTR_NODISCARD
380 WINPR_API BOOL PathIsDirectoryEmptyA(LPCSTR pszPath);
381
382 WINPR_ATTR_NODISCARD
383 WINPR_API BOOL PathIsDirectoryEmptyW(LPCWSTR pszPath);
384
385#ifdef UNICODE
386#define PathFileExists PathFileExistsW
387#define PathIsDirectoryEmpty PathIsDirectoryEmptyW
388#else
389#define PathFileExists PathFileExistsA
390#define PathIsDirectoryEmpty PathIsDirectoryEmptyA
391#endif
392
393#endif
394
395 WINPR_ATTR_NODISCARD
396 WINPR_API BOOL winpr_MoveFile(LPCSTR lpExistingFileName, LPCSTR lpNewFileName);
397
398 WINPR_ATTR_NODISCARD
399 WINPR_API BOOL winpr_MoveFileEx(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, DWORD dwFlags);
400
401 WINPR_API BOOL winpr_DeleteFile(const char* lpFileName);
402
403 WINPR_API BOOL winpr_RemoveDirectory(LPCSTR lpPathName);
404
405 WINPR_API BOOL winpr_RemoveDirectory_RecursiveA(LPCSTR lpPathName);
406
407 WINPR_API BOOL winpr_RemoveDirectory_RecursiveW(LPCWSTR lpPathName);
408
409 WINPR_ATTR_NODISCARD
410 WINPR_API BOOL winpr_PathFileExists(const char* pszPath);
411
412 WINPR_ATTR_NODISCARD
413 WINPR_API BOOL winpr_PathMakePath(const char* path, LPSECURITY_ATTRIBUTES lpAttributes);
414
415#ifdef __cplusplus
416}
417#endif
418
419#endif /* WINPR_PATH_H */