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