This file is indexed.

/usr/include/x86_64-linux-gnu/winpr/path.h is in libwinpr-dev 1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
/**
 * WinPR: Windows Portable Runtime
 * Path Functions
 *
 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef WINPR_PATH_H
#define WINPR_PATH_H

#include <winpr/winpr.h>
#include <winpr/tchar.h>
#include <winpr/error.h>
#include <winpr/wtypes.h>

//#define HAVE_PATHCCH_H	1

#ifdef HAVE_PATHCCH_H

#include <Pathcch.h>

#else

#ifdef __cplusplus
extern "C" {
#endif

#define PATHCCH_ALLOW_LONG_PATHS	0x00000001 /* Allow building of \\?\ paths if longer than MAX_PATH */

#define VOLUME_PREFIX			_T("\\\\?\\Volume")
#define VOLUME_PREFIX_LEN		((sizeof(VOLUME_PREFIX) / sizeof(TCHAR)) - 1)

/*
 * Maximum number of characters we support using the "\\?\" syntax
 * (0x7FFF + 1 for NULL terminator)
 */

#define PATHCCH_MAX_CCH			0x8000

WINPR_API HRESULT PathCchAddBackslashA(PSTR pszPath, size_t cchPath);
WINPR_API HRESULT PathCchAddBackslashW(PWSTR pszPath, size_t cchPath);

WINPR_API HRESULT PathCchRemoveBackslashA(PSTR pszPath, size_t cchPath);
WINPR_API HRESULT PathCchRemoveBackslashW(PWSTR pszPath, size_t cchPath);

WINPR_API HRESULT PathCchAddBackslashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd, size_t* pcchRemaining);
WINPR_API HRESULT PathCchAddBackslashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd, size_t* pcchRemaining);

WINPR_API HRESULT PathCchRemoveBackslashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd, size_t* pcchRemaining);
WINPR_API HRESULT PathCchRemoveBackslashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd, size_t* pcchRemaining);

WINPR_API HRESULT PathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
WINPR_API HRESULT PathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);

WINPR_API HRESULT PathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
WINPR_API HRESULT PathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);

WINPR_API HRESULT PathCchAppendExA(PSTR pszPath, size_t cchPath, PCSTR pszMore, unsigned long dwFlags);
WINPR_API HRESULT PathCchAppendExW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore, unsigned long dwFlags);

WINPR_API HRESULT PathCchCanonicalizeA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn);
WINPR_API HRESULT PathCchCanonicalizeW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn);

WINPR_API HRESULT PathCchCanonicalizeExA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn, unsigned long dwFlags);
WINPR_API HRESULT PathCchCanonicalizeExW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn, unsigned long dwFlags);

WINPR_API HRESULT PathAllocCanonicalizeA(PCSTR pszPathIn, unsigned long dwFlags, PSTR* ppszPathOut);
WINPR_API HRESULT PathAllocCanonicalizeW(PCWSTR pszPathIn, unsigned long dwFlags, PWSTR* ppszPathOut);

WINPR_API HRESULT PathCchCombineA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn, PCSTR pszMore);
WINPR_API HRESULT PathCchCombineW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn, PCWSTR pszMore);

WINPR_API HRESULT PathCchCombineExA(PSTR pszPathOut, size_t cchPathOut, PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags);
WINPR_API HRESULT PathCchCombineExW(PWSTR pszPathOut, size_t cchPathOut, PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags);

WINPR_API HRESULT PathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags, PSTR* ppszPathOut);
WINPR_API HRESULT PathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags, PWSTR* ppszPathOut);

WINPR_API HRESULT PathCchFindExtensionA(PCSTR pszPath, size_t cchPath, PCSTR* ppszExt);
WINPR_API HRESULT PathCchFindExtensionW(PCWSTR pszPath, size_t cchPath, PCWSTR* ppszExt);

WINPR_API HRESULT PathCchRenameExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
WINPR_API HRESULT PathCchRenameExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);

WINPR_API HRESULT PathCchRemoveExtensionA(PSTR pszPath, size_t cchPath);
WINPR_API HRESULT PathCchRemoveExtensionW(PWSTR pszPath, size_t cchPath);

WINPR_API BOOL PathCchIsRootA(PCSTR pszPath);
WINPR_API BOOL PathCchIsRootW(PCWSTR pszPath);

WINPR_API BOOL PathIsUNCExA(PCSTR pszPath, PCSTR* ppszServer);
WINPR_API BOOL PathIsUNCExW(PCWSTR pszPath, PCWSTR* ppszServer);

WINPR_API HRESULT PathCchSkipRootA(PCSTR pszPath, PCSTR* ppszRootEnd);
WINPR_API HRESULT PathCchSkipRootW(PCWSTR pszPath, PCWSTR* ppszRootEnd);

WINPR_API HRESULT PathCchStripToRootA(PSTR pszPath, size_t cchPath);
WINPR_API HRESULT PathCchStripToRootW(PWSTR pszPath, size_t cchPath);

WINPR_API HRESULT PathCchStripPrefixA(PSTR pszPath, size_t cchPath);
WINPR_API HRESULT PathCchStripPrefixW(PWSTR pszPath, size_t cchPath);

WINPR_API HRESULT PathCchRemoveFileSpecA(PSTR pszPath, size_t cchPath);
WINPR_API HRESULT PathCchRemoveFileSpecW(PWSTR pszPath, size_t cchPath);


#ifdef UNICODE
#define PathCchAddBackslash		PathCchAddBackslashW
#define PathCchRemoveBackslash		PathCchRemoveBackslashW
#define PathCchAddBackslashEx		PathCchAddBackslashExW
#define PathCchRemoveBackslashEx	PathCchRemoveBackslashExW
#define PathCchAddExtension		PathCchAddExtensionW
#define PathCchAppend			PathCchAppendW
#define PathCchAppendEx			PathCchAppendExW
#define PathCchCanonicalize		PathCchCanonicalizeW
#define PathCchCanonicalizeEx		PathCchCanonicalizeExW
#define PathAllocCanonicalize		PathAllocCanonicalizeW
#define PathCchCombine			PathCchCombineW
#define PathCchCombineEx		PathCchCombineExW
#define PathAllocCombine		PathAllocCombineW
#define PathCchFindExtension		PathCchFindExtensionW
#define PathCchRenameExtension		PathCchRenameExtensionW
#define PathCchRemoveExtension		PathCchRemoveExtensionW
#define PathCchIsRoot			PathCchIsRootW
#define PathIsUNCEx			PathIsUNCExW
#define PathCchSkipRoot			PathCchSkipRootW
#define PathCchStripToRoot		PathCchStripToRootW
#define PathCchStripPrefix		PathCchStripPrefixW
#define PathCchRemoveFileSpec		PathCchRemoveFileSpecW
#else
#define PathCchAddBackslash		PathCchAddBackslashA
#define PathCchRemoveBackslash		PathCchRemoveBackslashA
#define PathCchAddBackslashEx		PathCchAddBackslashExA
#define PathCchRemoveBackslashEx	PathCchRemoveBackslashExA
#define PathCchAddExtension		PathCchAddExtensionA
#define PathCchAppend			PathCchAppendA
#define PathCchAppendEx			PathCchAppendExA
#define PathCchCanonicalize		PathCchCanonicalizeA
#define PathCchCanonicalizeEx		PathCchCanonicalizeExA
#define PathAllocCanonicalize		PathAllocCanonicalizeA
#define PathCchCombine			PathCchCombineA
#define PathCchCombineEx		PathCchCombineExA
#define PathAllocCombine		PathAllocCombineA
#define PathCchFindExtension		PathCchFindExtensionA
#define PathCchRenameExtension		PathCchRenameExtensionA
#define PathCchRemoveExtension		PathCchRemoveExtensionA
#define PathCchIsRoot			PathCchIsRootA
#define PathIsUNCEx			PathIsUNCExA
#define PathCchSkipRoot			PathCchSkipRootA
#define PathCchStripToRoot		PathCchStripToRootA
#define PathCchStripPrefix		PathCchStripPrefixA
#define PathCchRemoveFileSpec		PathCchRemoveFileSpecA
#endif

/* Unix-style Paths */

WINPR_API HRESULT PathCchAddSlashA(PSTR pszPath, size_t cchPath);
WINPR_API HRESULT PathCchAddSlashW(PWSTR pszPath, size_t cchPath);

WINPR_API HRESULT PathCchAddSlashExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd, size_t* pcchRemaining);
WINPR_API HRESULT PathCchAddSlashExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd, size_t* pcchRemaining);

WINPR_API HRESULT UnixPathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
WINPR_API HRESULT UnixPathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);

WINPR_API HRESULT UnixPathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
WINPR_API HRESULT UnixPathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);

WINPR_API HRESULT UnixPathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags, PSTR* ppszPathOut);
WINPR_API HRESULT UnixPathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags, PWSTR* ppszPathOut);

#ifdef UNICODE
#define PathCchAddSlash			PathCchAddSlashW
#define PathCchAddSlashEx		PathCchAddSlashExW
#define UnixPathCchAddExtension		UnixPathCchAddExtensionW
#define UnixPathCchAppend		UnixPathCchAppendW
#define UnixPathAllocCombine		UnixPathAllocCombineW
#else
#define PathCchAddSlash			PathCchAddSlashA
#define PathCchAddSlashEx		PathCchAddSlashExA
#define UnixPathCchAddExtension		UnixPathCchAddExtensionA
#define UnixPathCchAppend		UnixPathCchAppendA
#define UnixPathAllocCombine		UnixPathAllocCombineA
#endif

/* Native-style Paths */

WINPR_API HRESULT PathCchAddSeparatorA(PSTR pszPath, size_t cchPath);
WINPR_API HRESULT PathCchAddSeparatorW(PWSTR pszPath, size_t cchPath);

WINPR_API HRESULT PathCchAddSeparatorExA(PSTR pszPath, size_t cchPath, PSTR* ppszEnd, size_t* pcchRemaining);
WINPR_API HRESULT PathCchAddSeparatorExW(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd, size_t* pcchRemaining);

WINPR_API HRESULT NativePathCchAddExtensionA(PSTR pszPath, size_t cchPath, PCSTR pszExt);
WINPR_API HRESULT NativePathCchAddExtensionW(PWSTR pszPath, size_t cchPath, PCWSTR pszExt);

WINPR_API HRESULT NativePathCchAppendA(PSTR pszPath, size_t cchPath, PCSTR pszMore);
WINPR_API HRESULT NativePathCchAppendW(PWSTR pszPath, size_t cchPath, PCWSTR pszMore);

WINPR_API HRESULT NativePathAllocCombineA(PCSTR pszPathIn, PCSTR pszMore, unsigned long dwFlags, PSTR* ppszPathOut);
WINPR_API HRESULT NativePathAllocCombineW(PCWSTR pszPathIn, PCWSTR pszMore, unsigned long dwFlags, PWSTR* ppszPathOut);

#ifdef UNICODE
#define PathCchAddSeparator		PathCchAddSeparatorW
#define PathCchAddSeparatorEx		PathCchAddSeparatorExW
#define NativePathCchAddExtension	NativePathCchAddExtensionW
#define NativePathCchAppend		NativePathCchAppendW
#define NativePathAllocCombine		NativePathAllocCombineW
#else
#define PathCchAddSeparator		PathCchAddSeparatorA
#define PathCchAddSeparatorEx		PathCchAddSeparatorExA
#define NativePathCchAddExtension	NativePathCchAddExtensionA
#define NativePathCchAppend		NativePathCchAppendA
#define NativePathAllocCombine		NativePathAllocCombineA
#endif

/* Path Portability Functions */

#define PATH_STYLE_WINDOWS			0x00000001
#define PATH_STYLE_UNIX				0x00000002
#define PATH_STYLE_NATIVE			0x00000003

#define PATH_SHARED_LIB_EXT_WITH_DOT		0x00000001
#define PATH_SHARED_LIB_EXT_APPLE_SO		0x00000002
#define PATH_SHARED_LIB_EXT_EXPLICIT		0x80000000
#define PATH_SHARED_LIB_EXT_EXPLICIT_DLL	0x80000001
#define PATH_SHARED_LIB_EXT_EXPLICIT_SO		0x80000002
#define PATH_SHARED_LIB_EXT_EXPLICIT_DYLIB	0x80000003

WINPR_API HRESULT PathCchConvertStyleA(PSTR pszPath, size_t cchPath, unsigned long dwFlags);
WINPR_API HRESULT PathCchConvertStyleW(PWSTR pszPath, size_t cchPath, unsigned long dwFlags);

WINPR_API PCSTR PathGetSharedLibraryExtensionA(unsigned long dwFlags);
WINPR_API PCWSTR PathGetSharedLibraryExtensionW(unsigned long dwFlags);

#ifdef UNICODE
#define PathCchConvertStyle		PathCchConvertStyleW
#define PathGetSharedLibraryExtension	PathGetSharedLibraryExtensionW
#else
#define PathCchConvertStyle		PathCchConvertStyleA
#define PathGetSharedLibraryExtension	PathGetSharedLibraryExtensionA
#endif

#ifdef __cplusplus
}
#endif

#endif

/**
 * Shell Path Functions
 */

#define KNOWN_PATH_HOME			1
#define KNOWN_PATH_TEMP			2
#define KNOWN_PATH_XDG_DATA_HOME	3
#define KNOWN_PATH_XDG_CONFIG_HOME	4
#define KNOWN_PATH_XDG_CACHE_HOME	5
#define KNOWN_PATH_XDG_RUNTIME_DIR	6

#ifdef __cplusplus
extern "C" {
#endif

WINPR_API char* GetKnownPath(int id);
WINPR_API char* GetKnownSubPath(int id, char* path);
WINPR_API char* GetCombinedPath(char* basePath, char* subPath);

//#ifndef _WIN32

WINPR_API BOOL PathFileExistsA(LPCSTR pszPath);
WINPR_API BOOL PathFileExistsW(LPCWSTR pszPath);

#ifdef __cplusplus
}
#endif

#ifdef UNICODE
#define PathFileExists	PathFileExistsW
#else
#define PathFileExists	PathFileExistsA
#endif

//#endif

#endif /* WINPR_PATH_H */