Home | History | Annotate | Download | only in utils
      1 /* Copyright (C) 2007-2010 The Android Open Source Project
      2 **
      3 ** This software is licensed under the terms of the GNU General Public
      4 ** License version 2, as published by the Free Software Foundation, and
      5 ** may be copied, distributed, and modified under those terms.
      6 **
      7 ** This program is distributed in the hope that it will be useful,
      8 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
      9 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     10 ** GNU General Public License for more details.
     11 */
     12 
     13 /*
     14  * Contains declarations of routines that implement platform-independent
     15  * file I/O.
     16  */
     17 
     18 #ifndef _ANDROID_UTILS_FILEIO_H
     19 #define _ANDROID_UTILS_FILEIO_H
     20 
     21 #include "android/utils/compiler.h"
     22 
     23 #include <stddef.h>
     24 #include <unistd.h>
     25 
     26 ANDROID_BEGIN_HEADER
     27 
     28 typedef struct MapFile MapFile;
     29 
     30 #ifdef WIN32
     31 /* Declare constants that are missing in Win32 headers. */
     32 #define PROT_READ   0x1
     33 #define PROT_WRITE  0x2
     34 #define PROT_EXEC   0x4
     35 #define PROT_NONE   0x0
     36 #endif
     37 
     38 /* Checks if file handle is a valid one.
     39  * Return:
     40  *  boolean: 1 if handle is valid, or 0 if it's not valid.
     41  */
     42 static inline int
     43 mapfile_is_valid(MapFile* handle)
     44 {
     45     return handle != (void*)(ptrdiff_t)-1;
     46 }
     47 
     48 /* Opens file in selected mode.
     49  * Param:
     50  *  path - Path to the file to open.
     51  *  oflag - Defines mode in which file is to be opened. This value follows the
     52  *      symantics of O_XXX flags defined for standard open routine.
     53  *  share_mode Defines sharing mode for the opened file. This value follows the
     54  *      symantics of S_IXXX flags defined for standard open routine.
     55  * Return:
     56  *  A valid handle to the opened file on success, or an invalid value on
     57  *  failure. In case of failure errno contains error code.
     58  */
     59 extern MapFile* mapfile_open(const char* path, int oflag, int share_mode);
     60 
     61 /* Closes a file handle opened with mapfile_open routine.
     62  * Param:
     63  *  handle - A handle to a file previously obtained via successful call to
     64  *      mapfile_open routine.
     65  * Return:
     66  *  0 on success, or -1 on failure with errno containing the error code.
     67  */
     68 extern int mapfile_close(MapFile* handle);
     69 
     70 /* Reads from a file opened with mapfile_open routine.
     71  * Except for handle parameter, semantics of this call are the same as for
     72  * the regualar read routine.
     73  * Param:
     74  *  handle - A handle to a file previously obtained via successful call to
     75  *      mapfile_open routine.
     76  */
     77 extern ssize_t mapfile_read(MapFile* handle, void* buf, size_t nbyte);
     78 
     79 /* Reads from a specific offset in a file opened with mapfile_open routine.
     80  * Param:
     81  *  handle - A handle to a file previously obtained via successful call to
     82  *      mapfile_open routine.
     83  *  offset - Offset in the file where to start reading from.
     84  *  Rest of the parameters and return value are the same as in file_read.
     85  */
     86 extern ssize_t mapfile_read_at(MapFile* handle,
     87                                size_t offset,
     88                                void* buf,
     89                                size_t nbyte);
     90 
     91 /* Maps a section of a file to memory.
     92  * Param:
     93  *  handle - A handle to a file previously obtained via successful call to
     94  *      mapfile_open routine.
     95  *  offset - Offset in the file where mapping should begin.
     96  *  size - Number of bytes starting with offset that should be mapped.
     97  *  prot - Determines whether read, write, execute, or some combination of
     98  *      accesses are permitted to the data being mapped. This parameter has the
     99  *      same semantics as in regular mmap routene.
    100  *  mapped_offset - Upon success, contains pointer to the requested offset
    101  *      within the mapped section of the file.
    102  *  size - Upon success, contains total number of bytes that were actually
    103  *      mapped.
    104  * Return:
    105  *  Upon successful completion returns pointer to the beginning of memory
    106  *  mapping, containing mapping of the requested section of a file. Note that
    107  *  value returned from this routine doesn't necessarily points to the beginning
    108  *  of the requested section mapping. Use value returned in mapped_offset
    109  *  parameter to get actual pointer to the beginning of the requested section
    110  *  mapping. Value returned from this routine must eventually be passed to
    111  *  file_unmap_section reoutine to unmap section mapped with this routine.
    112  *  This routine returns NULL on failure and sets errno to indicate the error.
    113  */
    114 extern void* mapfile_map(MapFile* handle,
    115                          size_t offset,
    116                          size_t size,
    117                          int prot,
    118                          void** mapped_offset,
    119                          size_t* mapped_size);
    120 
    121 /* Umaps section of a file previously mapped with mapfile_map routine.
    122  * Param:
    123  *  mapped_at - A pointer to the base address of the mapped section of a file
    124  *      that is to be unmapped.
    125  *  len - Byte size of the section that is to be unmapped.
    126  * Return:
    127  *  Upon successful completion returns 0. Otherwise, returns -1 and sets
    128  *  errno to indicate the error.
    129  */
    130 extern int mapfile_unmap(void* mapped_at, size_t len);
    131 
    132 ANDROID_END_HEADER
    133 
    134 #endif  // _ANDROID_UTILS_FILEIO_H
    135