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