xref: /aoo41x/main/sal/inc/osl/file.h (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 /** @HTML */
29 
30 #ifndef _OSL_FILE_H_
31 #define _OSL_FILE_H_
32 
33 #include <osl/time.h>
34 #	include <rtl/ustring.h>
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 /** @file
41 
42 Main goals and usage hints
43 
44 The main intentention of this interface is to provide an universal portable and
45 high performance access to file system issues on any operating system.<p>
46 
47 There are a few main goals:<p>
48 
49 1.The path specifications always has to be absolut. Any usage of relative path
50 specifications is forbidden. Exceptions are <code>osl_getSystemPathFromFileURL</code>,
51 <code>osl_getFileURLFromSystemPath</code> and <code>osl_getAbsoluteFileURL</code>. Most operating systems
52 provide a "Current Directory" per process. This is the reason why relative path
53 specifications can cause problems in multithreading environments.<p>
54 
55 2.Proprietary notations of file paths are not supported. Every path notation
56 must the file URL specification. File URLs must be encoded in UTF8 and
57 after that escaped. Although the URL parameter is a unicode string, the must
58 contain only ASCII characters<p>
59 
60 3.The caller cannot get any information whether a file system is case sensitive,
61 case preserving or not. The operating system implementation itself should
62 determine if it can map case-insensitive paths. The case correct notation of
63 a filename or file path is part of the "File Info". This case correct name
64 can be used as a unique key if neccessary.<p>
65 
66 4. Obtaining information about files or volumes is controlled by a
67 bitmask which specifies which fields are of interest. Due to performance
68 issues it is not recommended to obtain information which is not needed.
69 But if the operating system provides more information anyway the
70 implementation can set more fields on output as were requested. It is in the
71 responsibility of the caller to decide if he uses this additional information
72 or not. But he should do so to prevent further unnecessary calls if the information
73 is already there.<br>
74 
75 The input bitmask supports a flag <code>osl_FileStatus_Mask_Validate</code> which
76 can be used to force retrieving uncached validated information. Setting this flag
77 when calling <code>osl_getFileStatus</code> in combination with no other flag is
78 a synonym for a "FileExists". This should only be done when processing a single file
79 (f.e. before opening) and NEVER during enumeration of directory contents on any step
80 of information processing. This would change the runtime behaviour from O(n) to
81 O(n*n/2) on nearly every file system.<br>
82 On Windows NT reading the contents of an directory with 7000 entries and
83 getting full information about every file only takes 0.6 seconds. Specifying the
84 flag <code>osl_FileStatus_Mask_Validate</code> for each entry will increase the
85 time to 180 seconds (!!!).
86 
87 */
88 
89 
90 
91 /* Error codes according to errno */
92 
93 typedef enum {
94 	osl_File_E_None,
95 	osl_File_E_PERM,
96 	osl_File_E_NOENT,
97 	osl_File_E_SRCH,
98 	osl_File_E_INTR,
99 	osl_File_E_IO,
100 	osl_File_E_NXIO,
101 	osl_File_E_2BIG,
102 	osl_File_E_NOEXEC,
103 	osl_File_E_BADF,
104 	osl_File_E_CHILD,
105 	osl_File_E_AGAIN,
106 	osl_File_E_NOMEM,
107 	osl_File_E_ACCES,
108 	osl_File_E_FAULT,
109 	osl_File_E_BUSY,
110 	osl_File_E_EXIST,
111 	osl_File_E_XDEV,
112 	osl_File_E_NODEV,
113 	osl_File_E_NOTDIR,
114 	osl_File_E_ISDIR,
115 	osl_File_E_INVAL,
116 	osl_File_E_NFILE,
117 	osl_File_E_MFILE,
118 	osl_File_E_NOTTY,
119 	osl_File_E_FBIG,
120 	osl_File_E_NOSPC,
121 	osl_File_E_SPIPE,
122 	osl_File_E_ROFS,
123 	osl_File_E_MLINK,
124 	osl_File_E_PIPE,
125 	osl_File_E_DOM,
126 	osl_File_E_RANGE,
127 	osl_File_E_DEADLK,
128 	osl_File_E_NAMETOOLONG,
129 	osl_File_E_NOLCK,
130 	osl_File_E_NOSYS,
131 	osl_File_E_NOTEMPTY,
132 	osl_File_E_LOOP,
133 	osl_File_E_ILSEQ,
134 	osl_File_E_NOLINK,
135 	osl_File_E_MULTIHOP,
136 	osl_File_E_USERS,
137 	osl_File_E_OVERFLOW,
138 	osl_File_E_NOTREADY,
139 	osl_File_E_invalidError,		/* unmapped error: always last entry in enum! */
140     osl_File_E_TIMEDOUT,
141 	osl_File_E_NETWORK,
142 	osl_File_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
143 } oslFileError;
144 
145 typedef	void *oslDirectory;
146 typedef void *oslDirectoryItem;
147 
148 
149 /** Open a directory for enumerating its contents.
150 
151 	@param	pustrDirectoryURL [in]
152 	The full qualified URL of the directory.
153 
154 	@param	pDirectory [out]
155 	On success it receives a handle used for subsequent calls by osl_getNextDirectoryItem().
156 	The handle has to be released by a call to osl_closeDirectory().
157 
158 	@return
159 	osl_File_E_None on success<br>
160 	osl_File_E_INVAL the format of the parameters was not valid<br>
161 	osl_File_E_NOENT the specified path doesn't exist<br>
162 	osl_File_E_NOTDIR the specified path is not an directory <br>
163 	osl_File_E_NOMEM not enough memory for allocating structures <br>
164 	osl_File_E_ACCES permission denied<br>
165 	osl_File_E_MFILE too many open files used by the process<br>
166 	osl_File_E_NFILE too many open files in the system<br>
167 	osl_File_E_NAMETOOLONG File name too long<br>
168 	osl_File_E_LOOP Too many symbolic links encountered<p>
169 
170 	@see osl_getNextDirectoryItem()
171 	@see osl_closeDirectory()
172 */
173 
174 oslFileError SAL_CALL osl_openDirectory( rtl_uString *pustrDirectoryURL, oslDirectory *pDirectory);
175 
176 
177 /**	Retrieve the next item of a previously opened directory.
178 
179     Retrieves the next item of a previously opened directory.
180     All handles have an initial refcount of 1.
181 
182 	@param	Directory [in]
183 	A directory handle received from a previous call to osl_openDirectory().
184 
185 	@param	pItem [out]
186 	On success it receives a handle that can be used for subsequent calls to osl_getFileStatus().
187 	The handle has to be released by a call to osl_releaseDirectoryItem().
188 
189 	@param	uHint [in]
190 	With this parameter the caller can tell the implementation that (s)he
191     is going to call this function uHint times afterwards. This enables the implementation to
192     get the information for more than one file and cache it until the next calls.
193 
194 	@return
195 	osl_File_E_None on success<br>
196 	osl_File_E_INVAL the format of the parameters was not valid<br>
197 	osl_File_E_NOMEM not enough memory for allocating structures <br>
198 	osl_File_E_NOENT no more entries in this directory<br>
199 	osl_File_E_BADF invalid oslDirectory parameter<br>
200 	osl_File_E_OVERFLOW the value too large for defined data type
201 
202 	@see osl_releaseDirectoryItem()
203 	@see osl_acquireDirectoryItem()
204 	@see osl_getDirectoryItem()
205 	@see osl_getFileStatus()
206 */
207 
208 oslFileError SAL_CALL osl_getNextDirectoryItem(
209 	oslDirectory Directory,
210 	oslDirectoryItem *pItem,
211 	sal_uInt32	 uHint
212 	);
213 
214 
215 /**	Release a directory handle.
216 
217 	@param Directory [in]
218 	A handle received by a call to osl_openDirectory().
219 
220 	@return
221 	osl_File_E_None on success<br>
222 	osl_File_E_INVAL the format of the parameters was not valid<br>
223 	osl_File_E_NOMEM not enough memory for allocating structures<br>
224 	osl_File_E_BADF invalid oslDirectory parameter<br>
225 	osl_File_E_INTR the function call was interrupted<p>
226 
227 	@see osl_openDirectory()
228 */
229 
230 oslFileError SAL_CALL osl_closeDirectory(oslDirectory Directory);
231 
232 
233 /**	Retrieve a single directory item.
234 
235     Retrieves a single directory item. The returned handle has an initial refcount of 1.
236     Due to performance issues it is not recommended to use this function while
237     enumerating the contents of a directory. In this case use osl_getNextDirectoryItem() instead.
238 
239 	@param pustrFileURL [in]
240 	An absolute file URL.
241 
242 	@param pItem [out]
243 	On success it receives a handle which can be used for subsequent calls to osl_getFileStatus().
244 	The handle has to be released by a call to osl_releaseDirectoryItem().
245 
246 	@return
247 	osl_File_E_None on success<br>
248 	osl_File_E_INVAL the format of the parameters was not valid<br>
249 	osl_File_E_NOMEM not enough memory for allocating structures <br>
250 	osl_File_E_ACCES permission denied<br>
251 	osl_File_E_MFILE too many open files used by the process<br>
252 	osl_File_E_NFILE too many open files in the system<br>
253 	osl_File_E_NOENT no such file or directory<br>
254 	osl_File_E_LOOP	too many symbolic links encountered<br>
255 	osl_File_E_NAMETOOLONG the file name is too long<br>
256 	osl_File_E_NOTDIR a component of the path prefix of path is not a directory<br>
257 	osl_File_E_IO on I/O errors<br>
258 	osl_File_E_MULTIHOP multihop attempted<br>
259 	osl_File_E_NOLINK link has been severed<br>
260 	osl_File_E_FAULT bad address<br>
261 	osl_File_E_INTR the function call was interrupted<p>
262 
263 	@see osl_releaseDirectoryItem()
264 	@see osl_acquireDirectoryItem()
265 	@see osl_getFileStatus()
266 	@see osl_getNextDirectoryItem()
267 */
268 
269 oslFileError SAL_CALL osl_getDirectoryItem(
270 	rtl_uString *pustrFileURL,
271 	oslDirectoryItem *pItem
272 	);
273 
274 
275 /**	Increase the refcount of a directory item handle.
276 
277 	The caller responsible for releasing the directory item handle using osl_releaseDirectoryItem().
278 
279 	@param	Item [in]
280 	A handle received by a call to osl_getDirectoryItem() or osl_getNextDirectoryItem().
281 
282 	@return
283 	osl_File_E_None on success<br>
284 	osl_File_E_NOMEM not enough memory for allocating structures<br>
285 	osl_File_E_INVAL the format of the parameters was not valid<br>
286 
287 	@see osl_getDirectoryItem()
288 	@see osl_getNextDirectoryItem()
289     @see osl_releaseDirectoryItem()
290 */
291 
292 oslFileError SAL_CALL osl_acquireDirectoryItem( oslDirectoryItem Item );
293 
294 
295 /**	Decrease the refcount of a directory item handle.
296 
297     Decreases the refcount of a directory item handle.
298     If the refcount reaches 0 the data associated with
299     this directory item handle will be released.
300 
301 	@param	Item [in]
302 	A handle received by a call to osl_getDirectoryItem() or osl_getNextDirectoryItem().
303 
304 	@return
305 	osl_File_E_None on success<br>
306 	osl_File_E_NOMEM not enough memory for allocating structures<br>
307 	osl_File_E_INVAL the format of the parameters was not valid<br>
308 
309 	@see osl_getDirectoryItem()
310 	@see osl_getNextDirectoryItem()
311 	@see osl_acquireDirectoryItem()
312 */
313 
314 oslFileError SAL_CALL osl_releaseDirectoryItem( oslDirectoryItem Item );
315 
316 /* File types */
317 
318 typedef enum {
319 	osl_File_Type_Directory,
320 	osl_File_Type_Volume,
321 	osl_File_Type_Regular,
322     osl_File_Type_Fifo,
323     osl_File_Type_Socket,
324     osl_File_Type_Link,
325     osl_File_Type_Special,
326     osl_File_Type_Unknown
327 } oslFileType;
328 
329 /* File attributes */
330 #define osl_File_Attribute_ReadOnly				0x00000001
331 #define osl_File_Attribute_Hidden				0x00000002
332 #define osl_File_Attribute_Executable           0x00000010
333 #define osl_File_Attribute_GrpWrite             0x00000020
334 #define osl_File_Attribute_GrpRead              0x00000040
335 #define osl_File_Attribute_GrpExe               0x00000080
336 #define osl_File_Attribute_OwnWrite             0x00000100
337 #define osl_File_Attribute_OwnRead              0x00000200
338 #define osl_File_Attribute_OwnExe               0x00000400
339 #define osl_File_Attribute_OthWrite             0x00000800
340 #define osl_File_Attribute_OthRead              0x00001000
341 #define osl_File_Attribute_OthExe               0x00002000
342 
343 /* Flags specifying which fields to retreive by osl_getFileStatus */
344 
345 #define	osl_FileStatus_Mask_Type				0x00000001
346 #define osl_FileStatus_Mask_Attributes			0x00000002
347 #define osl_FileStatus_Mask_CreationTime		0x00000010
348 #define osl_FileStatus_Mask_AccessTime			0x00000020
349 #define osl_FileStatus_Mask_ModifyTime			0x00000040
350 #define osl_FileStatus_Mask_FileSize			0x00000080
351 #define osl_FileStatus_Mask_FileName			0x00000100
352 #define osl_FileStatus_Mask_FileURL				0x00000200
353 #define osl_FileStatus_Mask_LinkTargetURL		0x00000400
354 #define osl_FileStatus_Mask_All					0x7FFFFFFF
355 #define osl_FileStatus_Mask_Validate			0x80000000
356 
357 
358 typedef
359 
360 /** Structure containing information about files and directories
361 
362 	@see	osl_getFileStatus()
363 	@see	oslFileType
364 */
365 
366 struct _oslFileStatus {
367 /** Must be initialized with the size in bytes of the structure before passing it to any function */
368 	sal_uInt32		uStructSize;
369 /** Determines which members of the structure contain valid data */
370 	sal_uInt32		uValidFields;
371 /** The type of the file (file, directory, volume). */
372 	oslFileType	eType;
373 /** File attributes */
374 	sal_uInt64	uAttributes;
375 /** First creation time in nanoseconds since 1/1/1970. Can be the last modify time depending on
376 	platform or file system. */
377 	TimeValue	aCreationTime;
378 /** Last access time in nanoseconds since 1/1/1970. Can be the last modify time depending on
379 	platform or file system. */
380 	TimeValue	aAccessTime;
381 /** Last modify time in nanoseconds since 1/1/1970. */
382 	TimeValue	aModifyTime;
383 /** Size in bytes of the file. Zero for directories and volumes. */
384 	sal_uInt64	uFileSize;
385 /** Case correct name of the file. Should be set to zero before calling <code>osl_getFileStatus</code>
386 	and released after usage. */
387 	rtl_uString	*ustrFileName;
388 /** Full URL of the file. Should be set to zero before calling <code>osl_getFileStatus</code>
389 	and released after usage. */
390 	rtl_uString	*ustrFileURL;
391 /** Full URL of the target file if the file itself is a link.
392 	Should be set to zero before calling <code>osl_getFileStatus</code>
393 	and released after usage. */
394 	rtl_uString	*ustrLinkTargetURL;
395 } oslFileStatus;
396 
397 
398 /**	Retrieve information about a single file or directory.
399 
400 	@param	Item [in]
401 	A handle received by a previous call to osl_getDirectoryItem() or osl_getNextDirectoryItem().
402 
403 	@param	pStatus [in|out]
404 	Points to a structure which receives the information of the file or directory
405 	represented by the handle Item. The member uStructSize has to be initialized to
406 	sizeof(oslFileStatus) before calling this function.
407 
408 	@param	uFieldMask [in]
409 	Specifies which fields of the structure pointed to by pStatus are of interest to the caller.
410 
411 	@return
412 	osl_File_E_None on success<br>
413 	osl_File_E_NOMEM not enough memory for allocating structures <br>
414 	osl_File_E_INVAL the format of the parameters was not valid<br>
415 	osl_File_E_LOOP too many symbolic links encountered<br>
416 	osl_File_E_ACCES permission denied<br>
417 	osl_File_E_NOENT no such file or directory<br>
418 	osl_File_E_NAMETOOLONG file name too long<br>
419 	osl_File_E_BADF invalid oslDirectoryItem parameter<br>
420 	osl_File_E_FAULT bad address<br>
421 	osl_File_E_OVERFLOW value too large for defined data type<br>
422 	osl_File_E_INTR function call was interrupted<br>
423 	osl_File_E_NOLINK link has been severed<br>
424 	osl_File_E_MULTIHOP components of path require hopping to multiple remote machines and the file system does not allow it<br>
425 	osl_File_E_MFILE too many open files used by the process<br>
426 	osl_File_E_NFILE too many open files in the system<br>
427 	osl_File_E_NOSPC no space left on device<br>
428 	osl_File_E_NXIO no such device or address<br>
429 	osl_File_E_IO on I/O errors<br>
430 	osl_File_E_NOSYS function not implemented<p>
431 
432 	@see osl_getDirectoryItem()
433 	@see osl_getNextDirectoryItem()
434 	@see oslFileStatus
435 */
436 
437 oslFileError SAL_CALL osl_getFileStatus( oslDirectoryItem Item, oslFileStatus *pStatus, sal_uInt32 uFieldMask );
438 
439 
440 typedef void *oslVolumeDeviceHandle;
441 
442 
443 /** Unmount a volume device.
444 
445     Unmount the volume specified by the given oslVolumeDeviceHandle.
446 
447     @param Handle [in]
448     An oslVolumeDeviceHandle received by a call to osl_getVolumeInformation().
449 
450     @return
451     osl_File_E_None on success<br>
452 
453     @todo
454     specify all error codes that may be returned
455 
456     @see osl_getVolumeInformation()
457 */
458 
459 oslFileError SAL_CALL osl_unmountVolumeDevice( oslVolumeDeviceHandle Handle );
460 
461 
462 /** Automount a volume device.
463 
464     Automount the volume device specified by the given oslVolumeDeviceHandle.
465 
466     @param Handle [in]
467     An oslVolumeDeviceHandle received by a call to osl_getVolumeInformation().
468 
469     @return
470     osl_File_E_None on success<br>
471 
472     @todo
473     specify all error codes that may be returned
474 
475     @see osl_getVolumeInformation()
476 */
477 
478 oslFileError SAL_CALL osl_automountVolumeDevice( oslVolumeDeviceHandle Handle );
479 
480 
481 /** Release a volume device handle.
482 
483     Releases the given oslVolumeDeviceHandle which was acquired by a call to
484     osl_getVolumeInformation() or osl_acquireVolumeDeviceHandle().
485 
486     @param Handle [in]
487     An oslVolumeDeviceHandle received by a call to osl_getVolumeInformation().
488 
489     @return
490     osl_File_E_None on success<br>
491 
492     @todo
493     specify all error codes that may be returned
494 
495     @see osl_acquireVolumeDeviceHandle()
496     @see osl_getVolumeInformation()
497 */
498 
499 oslFileError SAL_CALL osl_releaseVolumeDeviceHandle( oslVolumeDeviceHandle Handle );
500 
501 /** Acquire a volume device handle.
502 
503     Acquires the given oslVolumeDeviceHandle which was acquired by a call to
504     osl_getVolumeInformation(). The caller is responsible for releasing the
505     acquired handle by calling osl_releaseVolumeDeviceHandle().
506 
507     @param Handle [in]
508     An oslVolumeDeviceHandle received by a call to osl_getVolumeInformation().
509 
510     @return
511     osl_File_E_None on success<br>
512 
513     @todo
514     specify all error codes that may be returned
515 
516     @see osl_getVolumeInformation()
517 */
518 
519 oslFileError SAL_CALL osl_acquireVolumeDeviceHandle( oslVolumeDeviceHandle Handle );
520 
521 
522 /** Get the full qualified URL where a device is mounted to.
523 
524 	@param Handle [in]
525 	An oslVolumeDeviceHandle received by a call to osl_getVolumeInformation().
526 
527 	@param ppustrDirectoryURL [out]
528 	Receives the full qualified URL where the device is mounted to.
529 
530 	@return
531 	osl_File_E_None on success<br>
532 	osl_File_E_NOMEM not enough memory for allocating structures <br>
533 	osl_File_E_INVAL the format of the parameters was not valid<br>
534 	osl_File_E_ACCES permission denied<br>
535 	osl_File_E_NXIO  no such device or address<br>
536 	osl_File_E_NODEV no such device<br>
537 	osl_File_E_NOENT no such file or directory<br>
538 	osl_File_E_FAULT bad address<br>
539 	osl_FilE_E_INTR function call was interrupted<br>
540 	osl_File_E_IO on I/O errors<br>
541 	osl_File_E_MULTIHOP multihop attempted<br>
542 	osl_File_E_NOLINK link has been severed<br>
543 	osl_File_E_EOVERFLOW value too large for defined data type<br>
544 
545 	@see	osl_getVolumeInformation()
546 	@see	osl_automountVolumeDevice()
547 	@see	osl_unmountVolumeDevice()
548 */
549 
550 oslFileError SAL_CALL osl_getVolumeDeviceMountPath( oslVolumeDeviceHandle Handle, rtl_uString **ppustrDirectoryURL);
551 
552 /* Volume attributes */
553 
554 #define osl_Volume_Attribute_Removeable		       0x00000001L
555 #define osl_Volume_Attribute_Remote			       0x00000002L
556 #define osl_Volume_Attribute_CompactDisc	       0x00000004L
557 #define osl_Volume_Attribute_FixedDisk		       0x00000008L
558 #define osl_Volume_Attribute_RAMDisk		       0x00000010L
559 #define osl_Volume_Attribute_FloppyDisk		       0x00000020L
560 
561 #define osl_Volume_Attribute_Case_Is_Preserved     0x00000040L
562 #define osl_Volume_Attribute_Case_Sensitive        0x00000080L
563 
564 /* Flags specifying which fields to retreive by osl_getVolumeInfo */
565 
566 #define osl_VolumeInfo_Mask_Attributes		       0x00000001L
567 #define osl_VolumeInfo_Mask_TotalSpace		       0x00000002L
568 #define osl_VolumeInfo_Mask_UsedSpace		       0x00000004L
569 #define osl_VolumeInfo_Mask_FreeSpace		       0x00000008L
570 #define osl_VolumeInfo_Mask_MaxNameLength	       0x00000010L
571 #define osl_VolumeInfo_Mask_MaxPathLength	       0x00000020L
572 #define osl_VolumeInfo_Mask_FileSystemName	       0x00000040L
573 #define osl_VolumeInfo_Mask_DeviceHandle	       0x00000080L
574 #define osl_VolumeInfo_Mask_FileSystemCaseHandling 0x00000100L
575 
576 typedef
577 
578 /** Structure containing information about volumes
579 
580 	@see	osl_getVolumeInformation()
581 	@see	oslFileType
582 */
583 
584 struct _oslVolumeInfo {
585 /** Must be initialized with the size in bytes of the structure before passing it to any function */
586 	sal_uInt32		uStructSize;
587 /** Determines which members of the structure contain valid data */
588 	sal_uInt32		uValidFields;
589 /** Attributes of the volume (remote and/or removable) */
590 	sal_uInt32		uAttributes;
591 /** Total availiable space on the volume for the current process/user */
592 	sal_uInt64		uTotalSpace;
593 /** Used space on the volume for the current process/user */
594 	sal_uInt64		uUsedSpace;
595 /** Free space on the volume for the current process/user */
596 	sal_uInt64		uFreeSpace;
597 /** Maximum length of file name of a single item */
598 	sal_uInt32		uMaxNameLength;
599 /** Maximum length of a full quallified path in system notation */
600 	sal_uInt32		uMaxPathLength;
601 /** Points to a string that receives the name of the file system type. String should be set to zero before calling <code>osl_getVolumeInformation</code>
602 	and released after usage. */
603 	rtl_uString		*ustrFileSystemName;
604 /** Pointer to handle the receives underlying device. Handle should be set to zero before calling <code>osl_getVolumeInformation</code>*/
605 	oslVolumeDeviceHandle	*pDeviceHandle;
606 } oslVolumeInfo;
607 
608 
609 /** Retrieve information about a volume.
610 
611     Retrieves information about a volume. A volume can either be a mount point, a network
612 	resource or a drive depending on Operating System and File System. Before calling this
613 	function osl_getFileStatus() should be called to determine if the type is
614 	osl_file_Type_Volume.
615 
616 	@param pustrDirectoryURL [in]
617 	Full qualified URL of the volume
618 
619 	@param pInfo [out]
620 	On success it receives information about the volume.
621 
622 	@param uFieldMask [in]
623 	Specifies which members of the structure should be filled
624 
625 	@return
626 	osl_File_E_None on success<br>
627 	osl_File_E_NOMEM not enough memory for allocating structures <br>
628 	osl_File_E_INVAL the format of the parameters was not valid<br>
629 	osl_File_E_NOTDIR not a directory<br>
630 	osl_File_E_NAMETOOLONG file name too long<br>
631 	osl_File_E_NOENT no such file or directory<br>
632 	osl_File_E_ACCES permission denied<br>
633 	osl_File_E_LOOP too many symbolic links encountered<br>
634 	ols_File_E_FAULT Bad address<br>
635 	osl_File_E_IO on I/O errors<br>
636 	osl_File_E_NOSYS function not implemented<br>
637 	osl_File_E_MULTIHOP multihop attempted<br>
638 	osl_File_E_NOLINK link has been severed<br>
639 	osl_File_E_INTR function call was interrupted<br>
640 
641 	@see	osl_getFileStatus()
642 	@see	oslVolumeInfo
643 */
644 
645 oslFileError SAL_CALL osl_getVolumeInformation(
646     rtl_uString *pustrDirectoryURL,
647     oslVolumeInfo *pInfo,
648     sal_uInt32 uFieldMask );
649 
650 typedef	void *oslFileHandle;
651 
652 /* Open flags */
653 
654 #define osl_File_OpenFlag_Read		0x00000001L
655 #define osl_File_OpenFlag_Write		0x00000002L
656 #define osl_File_OpenFlag_Create	0x00000004L
657 #define osl_File_OpenFlag_NoLock	0x00000008L
658 
659 /** Open a regular file.
660 
661     Open a file. Only regular files	can be openend.
662 
663 	@param pustrFileURL [in]
664 	The full qualified URL of the file to open.
665 
666 	@param pHandle [out]
667 	On success it receives a handle to the open file.
668 
669 	@param uFlags [in]
670 	Specifies the open mode.
671 
672 	@return
673 	osl_File_E_None on success<br>
674 	osl_File_E_NOMEM not enough memory for allocating structures <br>
675 	osl_File_E_INVAL the format of the parameters was not valid<br>
676 	osl_File_E_NAMETOOLONG pathname was too long<br>
677 	osl_File_E_NOENT no such file or directory<br>
678 	osl_File_E_ACCES permission denied<br>
679 	osl_File_E_AGAIN a write lock could not be established<br>
680 	osl_File_E_NOTDIR not a directory<br>
681 	osl_File_E_NXIO no such device or address<br>
682 	osl_File_E_NODEV no such device<br>
683 	osl_File_E_ROFS read-only file system<br>
684 	osl_File_E_TXTBSY text file busy<br>
685 	osl_File_E_FAULT bad address<br>
686 	osl_File_E_LOOP too many symbolic links encountered<br>
687 	osl_File_E_NOSPC no space left on device<br>
688 	osl_File_E_ISDIR is a directory<br>
689 	osl_File_E_MFILE too many open files used by the process<br>
690 	osl_File_E_NFILE too many open files in the system<br>
691 	osl_File_E_DQUOT quota exceeded<br>
692 	osl_File_E_EXIST file exists<br>
693 	osl_FilE_E_INTR function call was interrupted<br>
694 	osl_File_E_IO on I/O errors<br>
695 	osl_File_E_MULTIHOP multihop attempted<br>
696 	osl_File_E_NOLINK link has been severed<br>
697 	osl_File_E_EOVERFLOW value too large for defined data type<br>
698 
699 	@see osl_closeFile()
700 	@see osl_setFilePos()
701 	@see osl_getFilePos()
702 	@see osl_readFile()
703 	@see osl_writeFile()
704 	@see osl_setFileSize()
705 	@see osl_getFileSize()
706 */
707 
708 oslFileError SAL_CALL osl_openFile( rtl_uString *pustrFileURL, oslFileHandle *pHandle, sal_uInt32 uFlags );
709 
710 #define osl_Pos_Absolut 1
711 #define osl_Pos_Current 2
712 #define osl_Pos_End     3
713 
714 /** Set the internal position pointer of an open file.
715 
716 	@param Handle [in]
717 	Handle to a file received by a previous call to osl_openFile().
718 
719 	@param uHow [in]
720 	Distance to move the internal position pointer (from uPos).
721 
722 	@param uPos [in]
723 	Absolute position from the beginning of the file.
724 
725 	@return
726 	osl_File_E_None on success<br>
727 	osl_File_E_INVAL the format of the parameters was not valid<br>
728 	osl_File_E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files<br>
729 
730 	@see	osl_openFile()
731 	@see	osl_getFilePos()
732 */
733 
734 oslFileError SAL_CALL osl_setFilePos( oslFileHandle Handle, sal_uInt32 uHow, sal_Int64 uPos );
735 
736 
737 /**	Retrieve the current position of the internal pointer of an open file.
738 
739 	@param Handle [in]
740 	Handle to a file received by a previous call to osl_openFile().
741 
742 	@param pPos [out]
743 	On success receives the current position of the file pointer.
744 
745 	@return
746 	osl_File_E_None on success<br>
747 	osl_File_E_INVAL the format of the parameters was not valid<br>
748 	osl_File_E_OVERFLOW the resulting file offset would be a value which cannot be represented correctly for regular files<br>
749 
750 	@see osl_openFile()
751 	@see osl_setFilePos()
752 	@see osl_readFile()
753 	@see osl_writeFile()
754 */
755 
756 oslFileError SAL_CALL osl_getFilePos( oslFileHandle Handle, sal_uInt64 *pPos );
757 
758 
759 /**	Set the file size of an open file.
760 
761     Sets the file size of an open file. The file can be truncated or enlarged by the function.
762 	The position of the file pointer is not affeced by this function.
763 
764 	@param Handle [in]
765 	Handle to a file received by a previous call to osl_openFile().
766 
767 	@param uSize [in]
768 	New size in bytes.
769 
770 	@return
771 	osl_File_E_None on success<br>
772 	osl_File_E_INVAL the format of the parameters was not valid<br>
773 	osl_File_E_OVERFLOW the resulting file offset would be a value which cannot	be represented correctly for regular files<br>
774 
775 	@see osl_openFile()
776 	@see osl_setFilePos()
777 	@see osl_getFileStatus()
778 	@see osl_getFileSize()
779 */
780 
781 oslFileError SAL_CALL osl_setFileSize( oslFileHandle Handle, sal_uInt64 uSize );
782 
783 
784 /**	Get the file size of an open file.
785 
786     Gets the file size of an open file.
787 	The position of the file pointer is not affeced by this function.
788 
789 	@param Handle [in]
790 	Handle to a file received by a previous call to osl_openFile().
791 
792 	@param pSize [out]
793 	Current size in bytes.
794 
795 	@return
796 	osl_File_E_None on success<br>
797 	osl_File_E_INVAL the format of the parameters was not valid<br>
798 	osl_File_E_OVERFLOW the resulting file offset would be a value which cannot	be represented correctly for regular files<br>
799 
800 	@see osl_openFile()
801 	@see osl_setFilePos()
802 	@see osl_getFileStatus()
803 */
804 
805 oslFileError SAL_CALL osl_getFileSize( oslFileHandle Handle, sal_uInt64 *pSize );
806 
807 
808 /** Map flags.
809 
810     @since UDK 3.2.10
811  */
812 #define osl_File_MapFlag_RandomAccess ((sal_uInt32)(0x1))
813 
814 /** Map flag denoting that the mapped address space will be accessed by the
815     process soon (and it is advantageous for the operating system to already
816     start paging in the data).
817 
818     @since UDK 3.2.12
819  */
820 #define osl_File_MapFlag_WillNeed ((sal_uInt32)(0x2))
821 
822 /** Map a shared file into memory.
823 
824     @since UDK 3.2.10
825  */
826 oslFileError
827 SAL_CALL osl_mapFile (
828   oslFileHandle Handle,
829   void**        ppAddr,
830   sal_uInt64    uLength,
831   sal_uInt64    uOffset,
832   sal_uInt32    uFlags
833 );
834 
835 
836 /** Unmap a shared file from memory.
837 
838     @since UDK 3.2.10
839  */
840 oslFileError
841 SAL_CALL osl_unmapFile (
842   void*      pAddr,
843   sal_uInt64 uLength
844 );
845 
846 
847 /**	Read a number of bytes from a file.
848 
849     Reads a number of bytes from a file. The internal file pointer is
850     increased by the number of bytes read.
851 
852 	@param Handle [in]
853 	Handle to a file received by a previous call to osl_openFile().
854 
855 	@param pBuffer [out]
856 	Points to a buffer which receives data. The buffer must be large enough
857 	to hold uBytesRequested bytes.
858 
859 	@param uBytesRequested [in]
860 	Number of bytes which should be retrieved.
861 
862 	@param pBytesRead [out]
863 	On success the number of bytes which have actually been retrieved.
864 
865 	@return
866 	osl_File_E_None on success<br>
867 	osl_File_E_INVAL the format of the parameters was not valid<br>
868 	osl_File_E_INTR function call was interrupted<br>
869 	osl_File_E_IO on I/O errors<br>
870 	osl_File_E_ISDIR is a directory<br>
871 	osl_File_E_BADF bad file<br>
872 	osl_File_E_FAULT bad address<br>
873 	osl_File_E_AGAIN operation would block<br>
874 	osl_File_E_NOLINK link has been severed<br>
875 
876 	@see osl_openFile()
877 	@see osl_writeFile()
878     @see osl_readLine()
879 	@see osl_setFilePos()
880 */
881 
882 oslFileError SAL_CALL osl_readFile( oslFileHandle Handle, void *pBuffer, sal_uInt64 uBytesRequested, sal_uInt64 *pBytesRead );
883 
884 
885 /**	Test if the end of a file is reached.
886 
887 	@param Handle [in]
888 	Handle to a file received by a previous call to osl_openFile().
889 
890 	@param pIsEOF [out]
891 	Points to a variable that receives the end-of-file status.
892 
893 	@return
894 	osl_File_E_None on success <br>
895 	osl_File_E_INVAL the format of the parameters was not valid<br>
896 	osl_File_E_INTR function call was interrupted<br>
897 	osl_File_E_IO on I/O errors<br>
898 	osl_File_E_ISDIR is a directory<br>
899 	osl_File_E_BADF bad file<br>
900 	osl_File_E_FAULT bad address<br>
901 	osl_File_E_AGAIN operation would block<br>
902 	osl_File_E_NOLINK link has been severed<p>
903 
904 	@see osl_openFile()
905 	@see osl_readFile()
906     @see osl_readLine()
907 	@see osl_setFilePos()
908 */
909 
910 oslFileError SAL_CALL osl_isEndOfFile( oslFileHandle Handle, sal_Bool *pIsEOF );
911 
912 
913 /** Write a number of bytes to a file.
914 
915 	Writes a number of bytes to a file.
916 	The internal file pointer is increased by the number of bytes read.
917 
918 	@param Handle [in]
919 	Handle to a file received by a previous call to osl_openFile().
920 
921 	@param pBuffer [in]
922 	Points to a buffer which contains the data.
923 
924 	@param uBytesToWrite [in]
925 	Number of bytes which should be written.
926 
927 	@param pBytesWritten [out]
928 	On success the number of bytes which have actually been written.
929 
930 	@return
931 	osl_File_E_None on success<br>
932 	osl_File_E_INVAL the format of the parameters was not valid<br>
933 	osl_File_E_FBIG file too large<br>
934 	osl_File_E_DQUOT quota exceeded<p>
935 	osl_File_E_AGAIN operation would block<br>
936 	osl_File_E_BADF bad file<br>
937 	osl_File_E_FAULT bad address<br>
938 	osl_File_E_INTR function call was interrupted<br>
939 	osl_File_E_IO on I/O errosr<br>
940 	osl_File_E_NOLCK no record locks available<br>
941 	osl_File_E_NOLINK link has been severed<br>
942 	osl_File_E_NOSPC no space left on device<br>
943 	osl_File_E_NXIO no such device or address<br>
944 
945 	@see osl_openFile()
946 	@see osl_readFile()
947 	@see osl_setFilePos()
948 */
949 
950 oslFileError SAL_CALL osl_writeFile( oslFileHandle Handle, const void *pBuffer, sal_uInt64 uBytesToWrite, sal_uInt64 *pBytesWritten );
951 
952 /** Read a number of bytes from a specified offset in a file.
953 
954     The current position of the internal file pointer may or may not be changed.
955 
956     @since UDK 3.2.10
957  */
958 oslFileError SAL_CALL osl_readFileAt(
959   oslFileHandle Handle,
960   sal_uInt64    uOffset,
961   void*         pBuffer,
962   sal_uInt64    uBytesRequested,
963   sal_uInt64*   pBytesRead
964 );
965 
966 
967 /** Write a number of bytes to a specified offset in a file.
968 
969     The current position of the internal file pointer may or may not be changed.
970 
971     @since UDK 3.2.10
972  */
973 oslFileError SAL_CALL osl_writeFileAt(
974   oslFileHandle Handle,
975   sal_uInt64    uOffset,
976   const void*   pBuffer,
977   sal_uInt64    uBytesToWrite,
978   sal_uInt64*   pBytesWritten
979 );
980 
981 
982 /** Read a line from a file.
983 
984     Reads a line from a file. The new line delimiter is NOT returned!
985 
986 	@param Handle [in]
987 	Handle to a file received by a previous call to osl_openFile().
988 
989 	@param	ppSequence [in/out]
990 	A pointer pointer to a sal_Sequence that will hold the line read on success.
991 
992 	@return
993 	osl_File_E_None on success<br>
994 	osl_File_E_INVAL the format of the parameters was not valid<br>
995 	osl_File_E_INTR function call was interrupted<br>
996 	osl_File_E_IO on I/O errors<br>
997 	osl_File_E_ISDIR is a directory<br>
998 	osl_File_E_BADF bad file<br>
999 	osl_File_E_FAULT bad address<br>
1000 	osl_File_E_AGAIN operation would block<br>
1001 	osl_File_E_NOLINK link has been severed<p>
1002 
1003 	@see osl_openFile()
1004 	@see osl_readFile()
1005 	@see osl_writeFile()
1006 	@see osl_setFilePos()
1007 */
1008 
1009 oslFileError SAL_CALL osl_readLine( oslFileHandle Handle, sal_Sequence** ppSequence );
1010 
1011 /** Synchronize the memory representation of a file with that on the physical medium.
1012 
1013      The function ensures that all modified data and attributes of the file associated with
1014      the given file handle have been written to the physical medium.
1015      In case the hard disk has a write cache enabled, the data may not really be on
1016      permanent storage when osl_syncFile returns.
1017 
1018       @param Handle
1019       [in] Handle to a file received by a previous call to osl_openFile().
1020 
1021       @return
1022       <dl>
1023       <dt>osl_File_E_None</dt>
1024       <dd>On success</dd>
1025       <dt>osl_File_E_INVAL</dt>
1026       <dd>The value of the input parameter is invalid</dd>
1027       </dl>
1028       <br><p><strong>In addition to these error codes others may occur as well, for instance:</strong></p><br>
1029       <dl>
1030       <dt>osl_File_E_BADF</dt>
1031       <dd>The file associated with the given file handle is not open for writing</dd>
1032       <dt>osl_File_E_IO</dt>
1033       <dd>An I/O error occurred</dd>
1034       <dt>osl_File_E_NOSPC</dt>
1035       <dd>There is no enough space on the target device</dd>
1036       <dt>osl_File_E_ROFS</dt>
1037       <dd>The file associated with the given file handle is located on a read only file system</dd>
1038       <dt>osl_File_E_TIMEDOUT</dt>
1039       <dd>A remote connection timed out. This may happen when a file is on a remote location</dd>
1040       </dl>
1041 
1042       @see osl_openFile()
1043       @see osl_writeFile()
1044 */
1045 oslFileError SAL_CALL osl_syncFile(oslFileHandle Handle);
1046 
1047 /**	Close an open file.
1048 
1049 	@param Handle [in]
1050 	Handle to a file received by a previous call to osl_openFile().
1051 
1052 	@return
1053 	osl_File_E_None on success<br>
1054 	osl_File_E_INVAL the format of the parameters was not valid<br>
1055 	osl_File_E_BADF Bad file<br>
1056 	osl_File_E_INTR function call was interrupted<br>
1057 	osl_File_E_NOLINK link has been severed<br>
1058 	osl_File_E_NOSPC no space left on device<br>
1059 	osl_File_E_IO on I/O errors<br>
1060 
1061 	@see osl_openFile()
1062 */
1063 
1064 oslFileError SAL_CALL osl_closeFile( oslFileHandle Handle );
1065 
1066 
1067 /**	Create a directory.
1068 
1069 	@param pustrDirectoryURL [in]
1070 	Full qualified URL of the directory to create.
1071 
1072 	@return
1073 	osl_File_E_None on success<br>
1074 	osl_File_E_INVAL the format of the parameters was not valid<br>
1075 	osl_File_E_NOMEM not enough memory for allocating structures <br>
1076 	osl_File_E_EXIST file exists<br>
1077 	osl_File_E_ACCES permission denied<br>
1078 	osl_File_E_NAMETOOLONG file name too long<br>
1079 	osl_File_E_NOENT no such file or directory<br>
1080 	osl_File_E_NOTDIR not a directory<br>
1081 	osl_File_E_ROFS read-only file system<br>
1082 	osl_File_E_NOSPC no space left on device<br>
1083 	osl_File_E_DQUOT quota exceeded<br>
1084 	osl_File_E_LOOP too many symbolic links encountered<br>
1085 	osl_File_E_FAULT bad address<br>
1086 	osl_FileE_IO on I/O errors<br>
1087 	osl_File_E_MLINK too many links<br>
1088 	osl_File_E_MULTIHOP multihop attempted<br>
1089 	osl_File_E_NOLINK link has been severed<br>
1090 
1091 	@see osl_removeDirectory()
1092 */
1093 
1094 oslFileError SAL_CALL osl_createDirectory( rtl_uString* pustrDirectoryURL );
1095 
1096 
1097 /**	Remove an empty directory.
1098 
1099 	@param pustrDirectoryURL [in]
1100 	Full qualified URL of the directory.
1101 
1102 	@return
1103 	osl_File_E_None on success<br>
1104 	osl_File_E_INVAL the format of the parameters was not valid<br>
1105 	osl_File_E_NOMEM not enough memory for allocating structures <br>
1106 	osl_File_E_PERM operation not permitted<br>
1107 	osl_File_E_ACCES permission denied<br>
1108 	osl_File_E_NOENT no such file or directory<br>
1109 	osl_File_E_NOTDIR not a directory<br>
1110 	osl_File_E_NOTEMPTY directory not empty<br>
1111 	osl_File_E_FAULT bad address<br>
1112 	osl_File_E_NAMETOOLONG file name too long<br>
1113 	osl_File_E_BUSY device or resource busy<br>
1114 	osl_File_E_ROFS read-only file system<br>
1115 	osl_File_E_LOOP too many symbolic links encountered<br>
1116 	osl_File_E_BUSY device or resource busy<br>
1117 	osl_File_E_EXIST file exists<br>
1118 	osl_File_E_IO on I/O errors<br>
1119 	osl_File_E_MULTIHOP multihop attempted<br>
1120 	osl_File_E_NOLINK link has been severed<br>
1121 
1122 	@see osl_createDirectory()
1123 */
1124 
1125 oslFileError SAL_CALL osl_removeDirectory( rtl_uString* pustrDirectoryURL );
1126 
1127 /** Function pointer representing a function that will be called by osl_createDirectoryPath
1128     if a directory has been created.
1129 
1130     To avoid unpredictable results the callee must not access the directory whose
1131     creation is just notified.
1132 
1133     @param pData
1134     [in] User specified data given in osl_createDirectoryPath.
1135 
1136     @param aDirectoryUrl
1137     [in] The absolute file URL of the directory that was just created by
1138     osl_createDirectoryPath.
1139 
1140     @see osl_createDirectoryPath
1141 */
1142 typedef void (SAL_CALL *oslDirectoryCreationCallbackFunc)(void* pData, rtl_uString* aDirectoryUrl);
1143 
1144 /** Create a directory path.
1145 
1146     The osl_createDirectoryPath function creates a specified directory path.
1147     All nonexisting sub directories will be created.
1148     <p><strong>PLEASE NOTE:</strong> You cannot rely on getting the error code
1149     osl_File_E_EXIST for existing directories. Programming against this error
1150     code is in general a strong indication of a wrong usage of osl_createDirectoryPath.</p>
1151 
1152     @param aDirectoryUrl
1153     [in] The absolute file URL of the directory path to create.
1154     A relative file URL will not be accepted.
1155 
1156     @param aDirectoryCreationFunc
1157     [in] Pointer to a function that will be called synchronously
1158     for each sub directory that was created. The value of this
1159     parameter may be NULL, in this case notifications will not be
1160     sent.
1161 
1162     @param pData
1163     [in] User specified data to be passed to the directory creation
1164     callback function. The value of this parameter may be arbitrary
1165     and will not be interpreted by osl_createDirectoryPath.
1166 
1167     @return
1168     <dl>
1169     <dt>osl_File_E_None</dt>
1170     <dd>On success</dd>
1171     <dt>osl_File_E_INVAL</dt>
1172     <dd>The format of the parameters was not valid</dd>
1173     <dt>osl_File_E_ACCES</dt>
1174     <dd>Permission denied</dd>
1175     <dt>osl_File_E_EXIST</dt>
1176     <dd>The final node of the specified directory path already exist</dd>
1177     <dt>osl_File_E_NAMETOOLONG</dt>
1178     <dd>The name of the specified directory path exceeds the maximum allowed length</dd>
1179     <dt>osl_File_E_NOTDIR</dt>
1180     <dd>A component of the specified directory path already exist as file in any part of the directory path</dd>
1181     <dt>osl_File_E_ROFS</dt>
1182     <dd>Read-only file system</dd>
1183 	<dt>osl_File_E_NOSPC</dt>
1184 	<dd>No space left on device</dd>
1185 	<dt>osl_File_E_DQUOT</dt>
1186 	<dd>Quota exceeded</dd>
1187 	<dt>osl_File_E_FAULT</dt>
1188 	<dd>Bad address</dd>
1189 	<dt>osl_File_E_IO</dt>
1190 	<dd>I/O error</dd>
1191 	<dt>osl_File_E_LOOP</dt>
1192 	<dd>Too many symbolic links encountered</dd>
1193     <dt>osl_File_E_NOLINK</dt>
1194     <dd>Link has been severed</dd>
1195     <dt>osl_File_E_invalidError</dt>
1196     <dd>An unknown error occurred</dd>
1197 	</dl>
1198 
1199 	@see oslDirectoryCreationFunc
1200 	@see oslFileError
1201 	@see osl_createDirectory
1202 */
1203 oslFileError SAL_CALL osl_createDirectoryPath(
1204     rtl_uString* aDirectoryUrl,
1205     oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc,
1206     void* pData);
1207 
1208 /** Remove a regular file.
1209 
1210 	@param pustrFileURL [in]
1211 	Full qualified URL of the file to remove.
1212 
1213 	@return
1214 	osl_File_E_None on success<br>
1215 	osl_File_E_INVAL the format of the parameters was not valid<br>
1216 	osl_File_E_NOMEM not enough memory for allocating structures <br>
1217 	osl_File_E_ACCES permission denied<br>
1218 	osl_File_E_PERM operation not permitted<br>
1219 	osl_File_E_NAMETOOLONG file name too long<br>
1220 	osl_File_E_NOENT no such file or directory<br>
1221 	osl_File_E_ISDIR is a directory<br>
1222 	osl_File_E_ROFS read-only file system<br>
1223 	osl_File_E_FAULT bad address<br>
1224 	osl_File_E_LOOP too many symbolic links encountered<br>
1225 	osl_File_E_IO on I/O errors<br>
1226 	osl_File_E_BUSY device or resource busy<br>
1227 	osl_File_E_INTR function call was interrupted<br>
1228 	osl_File_E_LOOP too many symbolic links encountered<br>
1229 	osl_File_E_MULTIHOP multihop attempted<br>
1230 	osl_File_E_NOLINK link has been severed<br>
1231 	osl_File_E_TXTBSY text file busy<br>
1232 
1233 	@see osl_openFile()
1234 */
1235 
1236 oslFileError SAL_CALL osl_removeFile( rtl_uString* pustrFileURL );
1237 
1238 
1239 /** Copy a file to a new destination.
1240 
1241     Copies a file to a new destination. Copies only files not directories.
1242     No assumptions should be made about preserving attributes or file time.
1243 
1244 	@param pustrSourceFileURL [in]
1245 	Full qualified URL of the source file.
1246 
1247 	@param pustrDestFileURL [in]
1248 	Full qualified URL of the destination file. A directory is NOT a valid destination file!
1249 
1250 	@return
1251 	osl_File_E_None on success<br>
1252 	osl_File_E_INVAL the format of the parameters was not valid<br>
1253 	osl_File_E_NOMEM not enough memory for allocating structures <br>
1254 	osl_File_E_ACCES permission denied<br>
1255 	osl_File_E_PERM operation not permitted<br>
1256 	osl_File_E_NAMETOOLONG file name too long<br>
1257 	osl_File_E_NOENT no such file or directory<br>
1258 	osl_File_E_ISDIR is a directory<br>
1259 	osl_File_E_ROFS read-only file system<p>
1260 
1261 	@see	osl_moveFile()
1262 	@see	osl_removeFile()
1263 */
1264 
1265 oslFileError SAL_CALL osl_copyFile( rtl_uString* pustrSourceFileURL, rtl_uString *pustrDestFileURL );
1266 
1267 
1268 /** Move a file or directory to a new destination or renames it.
1269 
1270     Moves a file or directory to a new destination or renames it.
1271     File time and attributes are preserved.
1272 
1273 	@param pustrSourceFileURL [in]
1274 	Full qualified URL of the source file.
1275 
1276 	@param pustrDestFileURL [in]
1277 	Full qualified URL of the destination file. An existing directory is NOT a valid destination !
1278 
1279 	@return
1280 	osl_File_E_None on success<br>
1281 	osl_File_E_INVAL the format of the parameters was not valid<br>
1282 	osl_File_E_NOMEM not enough memory for allocating structures <br>
1283 	osl_File_E_ACCES permission denied<br>
1284 	osl_File_E_PERM operation not permitted<br>
1285 	osl_File_E_NAMETOOLONG file name too long<br>
1286 	osl_File_E_NOENT no such file or directory<br>
1287 	osl_File_E_ROFS read-only file system<br>
1288 
1289 	@see osl_copyFile()
1290 */
1291 
1292 oslFileError SAL_CALL osl_moveFile( rtl_uString* pustrSourceFileURL, rtl_uString *pustrDestFileURL );
1293 
1294 
1295 /**	Determine a valid unused canonical name for a requested name.
1296 
1297     Determines a valid unused canonical name for a requested name.
1298     Depending on the Operating System and the File System the illegal characters are replaced by valid ones.
1299     If a file or directory with the requested name already exists a new name is generated following
1300     the common rules on the actual Operating System and File System.
1301 
1302 	@param pustrRequestedURL [in]
1303 	Requested name of a file or directory.
1304 
1305 	@param ppustrValidURL [out]
1306 	On success receives a name which is unused and valid on the actual Operating System and
1307 	File System.
1308 
1309 	@return
1310 	osl_File_E_None on success<br>
1311 	osl_File_E_INVAL the format of the parameters was not valid<br>
1312 
1313 	@see osl_getFileStatus()
1314 */
1315 
1316 oslFileError SAL_CALL osl_getCanonicalName( rtl_uString *pustrRequestedURL, rtl_uString **ppustrValidURL);
1317 
1318 
1319 /**	Convert a path relative to a given directory into an full qualified file URL.
1320 
1321 	Convert a path relative to a given directory into an full qualified file URL.
1322 	The function resolves symbolic links if possible and path ellipses, so on success
1323 	the resulting absolute path is fully resolved.
1324 
1325 	@param pustrBaseDirectoryURL [in]
1326 	Base directory URL to which the relative path is related to.
1327 
1328 	@param pustrRelativeFileURL [in]
1329 	An URL of a file or directory relative to the directory path specified by pustrBaseDirectoryURL
1330 	or an absolute path.
1331 	If pustrRelativeFileURL denotes an absolute path pustrBaseDirectoryURL will be ignored.
1332 
1333 	@param ppustrAbsoluteFileURL [out]
1334 	On success it receives the full qualified absoulte file URL.
1335 
1336 	@return
1337 	osl_File_E_None on success<br>
1338 	osl_File_E_INVAL the format of the parameters was not valid<br>
1339 	osl_File_E_NOMEM not enough memory for allocating structures <br>
1340 	osl_File_E_NOTDIR not a directory<br>
1341 	osl_File_E_ACCES permission denied<br>
1342 	osl_File_E_NOENT no such file or directory<br>
1343 	osl_File_E_NAMETOOLONG file name too long<br>
1344 	osl_File_E_OVERFLOW value too large for defined data type<br>
1345 	osl_File_E_FAULT bad address<br>
1346 	osl_File_E_INTR function call was interrupted<br>
1347 	osl_File_E_LOOP too many symbolic links encountered<br>
1348 	osl_File_E_MULTIHOP multihop attempted<br>
1349 	osl_File_E_NOLINK link has been severed<br>
1350 
1351 	@see	osl_getFileStatus()
1352 */
1353 
1354 oslFileError SAL_CALL osl_getAbsoluteFileURL(
1355     rtl_uString* pustrBaseDirectoryURL,
1356     rtl_uString *pustrRelativeFileURL,
1357     rtl_uString **ppustrAbsoluteFileURL );
1358 
1359 
1360 /**	Convert a system dependend path into a file URL.
1361 
1362 	@param pustrSystemPath [in]
1363 	A System dependent path of a file or directory.
1364 
1365 	@param ppustrFileURL [out]
1366 	On success it receives the file URL.
1367 
1368 	@return
1369 	osl_File_E_None on success<br>
1370 	osl_File_E_INVAL the format of the parameters was not valid<br>
1371 
1372 	@see osl_getSystemPathFromFileURL()
1373 */
1374 
1375 oslFileError SAL_CALL osl_getFileURLFromSystemPath( rtl_uString *pustrSystemPath, rtl_uString **ppustrFileURL);
1376 
1377 
1378 /**	Searche a full qualified system path or a file URL.
1379 
1380     @param pustrFileName [in]
1381     A system dependent path, a file URL, a file or relative directory.
1382 
1383     @param pustrSearchPath [in]
1384     A list of system paths, in which a given file has to be searched. The Notation of a path list is
1385     system dependend, e.g. on UNIX system "/usr/bin:/bin" and on Windows "C:\BIN;C:\BATCH".
1386     These paths are only for the search of a file or a relative path, otherwise it will be ignored.
1387     If pustrSearchPath is NULL or while using the search path the search failed, the function searches for
1388     a matching file in all system directories and in the directories listed in the PATH environment
1389     variable.
1390     The value of an environment variable should be used (e.g. LD_LIBRARY_PATH) if the caller is not
1391     aware of the Operating System and so doesn't know which path list delimiter to use.
1392 
1393 	@param ppustrFileURL [out]
1394 	On success it receives the full qualified file URL.
1395 
1396 	@return
1397 	osl_File_E_None on success<br>
1398 	osl_File_E_INVAL the format of the parameters was not valid<br>
1399 	osl_File_E_NOTDIR not a directory<br>
1400 	osl_File_E_NOENT no such file or directory not found<br>
1401 
1402 	@see osl_getFileURLFromSystemPath()
1403 	@see osl_getSystemPathFromFileURL()
1404 */
1405 
1406 oslFileError SAL_CALL osl_searchFileURL( rtl_uString *pustrFileName, rtl_uString *pustrSearchPath, rtl_uString **ppustrFileURL );
1407 
1408 
1409 /**	Convert a file URL into a system dependend path.
1410 
1411 	@param pustrFileURL [in]
1412 	A File URL.
1413 
1414 	@param ppustrSystemPath [out]
1415 	On success it receives the system path.
1416 
1417 	@return
1418 	osl_File_E_None on success
1419 	osl_File_E_INVAL the format of the parameters was not valid
1420 
1421 	@see osl_getFileURLFromSystemPath()
1422 */
1423 
1424 oslFileError SAL_CALL osl_getSystemPathFromFileURL( rtl_uString *pustrFileURL, rtl_uString **ppustrSystemPath);
1425 
1426 
1427 /** Function pointer representing the function called back from osl_abbreviateSystemPath
1428 
1429 	@param ustrText [in]
1430 	Text to calculate the width for
1431 
1432 	@return
1433 	The width of the text specified by ustrText, e.g. it can return the width in pixel
1434 	or the width in character count.
1435 
1436 	@see osl_abbreviateSystemPath()
1437 */
1438 
1439 typedef sal_uInt32 (SAL_CALL *oslCalcTextWidthFunc)( rtl_uString *ustrText );
1440 
1441 
1442 /** Abbreviate a system notation path.
1443 
1444 	@param ustrSystemPath [in]
1445 	The full system path to abbreviate
1446 
1447 	@param pustrCompacted [out]
1448 	Receives the compacted system path on output
1449 
1450 	@param pfnCalcWidth [in]
1451 	Function ptr that calculates the width of a string. Can be zero.
1452 
1453 	@param uMaxWidth [in]
1454 	Maximum width allowed that is retunrned from pfnCalcWidth.
1455 	If pfnCalcWidth is zero the character count is assumed as width.
1456 
1457 	@return
1458 	osl_File_E_None on success<br>
1459 
1460 	@see	oslCalcTextWidthFunc
1461 */
1462 
1463 oslFileError SAL_CALL osl_abbreviateSystemPath(
1464     rtl_uString *ustrSystemPath,
1465     rtl_uString **pustrCompacted,
1466     sal_uInt32 uMaxWidth,
1467     oslCalcTextWidthFunc pCalcWidth );
1468 
1469 
1470 /**	Set file attributes.
1471 
1472 	@param pustrFileURL [in]
1473 	The full qualified file URL.
1474 
1475 	@param uAttributes [in]
1476 	Attributes of the file to be set.
1477 
1478 	@return
1479 	osl_File_E_None on success<br>
1480 	osl_File_E_INVAL the format of the parameters was not valid<br>
1481 
1482 	@see osl_getFileStatus()
1483 */
1484 
1485 oslFileError SAL_CALL osl_setFileAttributes( rtl_uString *pustrFileURL, sal_uInt64 uAttributes );
1486 
1487 
1488 /**	Set the file time.
1489 
1490 	@param pustrFileURL [in]
1491 	The full qualified URL of the file.
1492 
1493 	@param aCreationTime [in]
1494 	Creation time of the given file.
1495 
1496 	@param aLastAccessTime [in]
1497 	Time of the last access of the given file.
1498 
1499 	@param aLastWriteTime [in]
1500 	Time of the last modifying of the given file.
1501 
1502 	@return
1503 	osl_File_E_None on success<br>
1504 	osl_File_E_INVAL the format of the parameters was not valid<br>
1505 	osl_File_E_NOENT no such file or directory not found<br>
1506 
1507 	@see osl_getFileStatus()
1508 */
1509 
1510 oslFileError SAL_CALL osl_setFileTime(
1511     rtl_uString *pustrFileURL,
1512     const TimeValue *aCreationTime,
1513 	const TimeValue *aLastAccessTime,
1514 	const TimeValue *aLastWriteTime);
1515 
1516 
1517 /**	Retrieves the file URL of the system's temporary directory path
1518 
1519 	@param pustrTempDirURL[out]
1520 	On success receives the URL of system's	temporary directory path.
1521 
1522 	@return
1523 	osl_File_E_None on success
1524 	osl_File_E_NOENT no such file or directory not found
1525 */
1526 
1527 oslFileError SAL_CALL osl_getTempDirURL( rtl_uString **pustrTempDirURL );
1528 
1529 
1530 /** Creates a temporary file in the directory provided by the caller or the
1531     directory returned by osl_getTempDirURL.
1532 
1533 	Creates a temporary file in the directory provided by the caller or the
1534     directory returned by osl_getTempDirURL.
1535     Under UNIX Operating Systems the file will be created with read and write
1536     access for the user exclusively.
1537     If the caller requests only a handle to the open file but not the name of
1538     it, the file will be automatically removed on close else the caller is
1539     responsible for removing the file on success.
1540 
1541     @param  pustrDirectoryURL [in]
1542 	Specifies the full qualified URL where the temporary file should be created.
1543     If pustrDirectoryURL is 0 the path returned by osl_getTempDirURL will be used.
1544 
1545     @param  pHandle [out]
1546 	On success receives a handle to the open file. If pHandle is 0 the file will
1547 	be closed on return, in this case ppustrTempFileURL must not be 0.
1548 
1549     @param  ppustrTempFileURL [out]
1550 	On success receives the full qualified URL of the temporary file.
1551     If ppustrTempFileURL is 0 the file will be automatically removed on close,
1552 	in this case pHandle must not be 0.
1553     If ppustrTempFileURL is not 0 the caller receives the name of the created
1554 	file and is responsible for removing the file, in this case
1555 	*ppustrTempFileURL must be 0 or must point to a valid rtl_uString.
1556 
1557     @descr
1558 	Description of the different pHandle, ppustrTempFileURL parameter combinations.
1559     pHandle is 0 and ppustrTempDirURL is 0 - this combination is invalid
1560     pHandle is not 0 and ppustrTempDirURL is 0 - a handle to the open file
1561     will be returned on success and the file will be automatically removed on close.
1562     pHandle is 0 and ppustrTempDirURL is not 0 - the name of the file will be returned,
1563 	the caller is responsible for opening, closing and removing the file.
1564     pHandle is not 0 and ppustrTempDirURL is not 0 - a handle to the open file as well as
1565     the file name will be returned, the caller is responsible for closing and removing
1566     the file.
1567 
1568     @return
1569 	osl_File_E_None   on success
1570     osl_File_E_INVAL  the format of the parameter is invalid
1571     osl_File_E_NOMEM  not enough memory for allocating structures
1572 	osl_File_E_ACCES  Permission denied
1573 	osl_File_E_NOENT  No such file or directory
1574 	osl_File_E_NOTDIR Not a directory
1575 	osl_File_E_ROFS   Read-only file system
1576 	osl_File_E_NOSPC  No space left on device
1577 	osl_File_E_DQUOT  Quota exceeded
1578 
1579 	@see    osl_getTempDirURL()
1580 */
1581 
1582 oslFileError SAL_CALL osl_createTempFile(
1583     rtl_uString*   pustrDirectoryURL,
1584     oslFileHandle* pHandle,
1585     rtl_uString**  ppustrTempFileURL);
1586 
1587 #ifdef __cplusplus
1588 }
1589 #endif
1590 
1591 #endif	/* _OSL_FILE_H_ */
1592 
1593 
1594