diff options
Diffstat (limited to 'android/utils/mapfile.h')
-rw-r--r-- | android/utils/mapfile.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/android/utils/mapfile.h b/android/utils/mapfile.h new file mode 100644 index 0000000..c125337 --- /dev/null +++ b/android/utils/mapfile.h @@ -0,0 +1,133 @@ +/* Copyright (C) 2007-2010 The Android Open Source Project +** +** This software is licensed under the terms of the GNU General Public +** License version 2, as published by the Free Software Foundation, and +** may be copied, distributed, and modified under those terms. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +*/ + +/* + * Contains declarations of routines that implement platform-independent + * file I/O. + */ + +#ifndef _ANDROID_UTILS_FILEIO_H +#define _ANDROID_UTILS_FILEIO_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct MapFile MapFile; + +#ifdef WIN32 +/* Declare constants that are missing in Win32 headers. */ +#define PROT_READ 0x1 +#define PROT_WRITE 0x2 +#define PROT_EXEC 0x4 +#define PROT_NONE 0x0 +#endif + +/* Checks if file handle is a valid one. + * Return: + * boolean: 1 if handle is valid, or 0 if it's not valid. + */ +static inline int +mapfile_is_valid(MapFile* handle) +{ + return (int)handle != -1; +} + +/* Opens file in selected mode. + * Param: + * path - Path to the file to open. + * oflag - Defines mode in which file is to be opened. This value follows the + * symantics of O_XXX flags defined for standard open routine. + * share_mode Defines sharing mode for the opened file. This value follows the + * symantics of S_IXXX flags defined for standard open routine. + * Return: + * A valid handle to the opened file on success, or an invalid value on + * failure. In case of failure errno contains error code. + */ +extern MapFile* mapfile_open(const char* path, int oflag, int share_mode); + +/* Closes a file handle opened with mapfile_open routine. + * Param: + * handle - A handle to a file previously obtained via successful call to + * mapfile_open routine. + * Return: + * 0 on success, or -1 on failure with errno containing the error code. + */ +extern int mapfile_close(MapFile* handle); + +/* Reads from a file opened with mapfile_open routine. + * Except for handle parameter, semantics of this call are the same as for + * the regualar read routine. + * Param: + * handle - A handle to a file previously obtained via successful call to + * mapfile_open routine. + */ +extern ssize_t mapfile_read(MapFile* handle, void* buf, size_t nbyte); + +/* Reads from a specific offset in a file opened with mapfile_open routine. + * Param: + * handle - A handle to a file previously obtained via successful call to + * mapfile_open routine. + * offset - Offset in the file where to start reading from. + * Rest of the parameters and return value are the same as in file_read. + */ +extern ssize_t mapfile_read_at(MapFile* handle, + size_t offset, + void* buf, + size_t nbyte); + +/* Maps a section of a file to memory. + * Param: + * handle - A handle to a file previously obtained via successful call to + * mapfile_open routine. + * offset - Offset in the file where mapping should begin. + * size - Number of bytes starting with offset that should be mapped. + * prot - Determines whether read, write, execute, or some combination of + * accesses are permitted to the data being mapped. This parameter has the + * same semantics as in regular mmap routene. + * mapped_offset - Upon success, contains pointer to the requested offset + * within the mapped section of the file. + * size - Upon success, contains total number of bytes that were actually + * mapped. + * Return: + * Upon successful completion returns pointer to the beginning of memory + * mapping, containing mapping of the requested section of a file. Note that + * value returned from this routine doesn't necessarily points to the beginning + * of the requested section mapping. Use value returned in mapped_offset + * parameter to get actual pointer to the beginning of the requested section + * mapping. Value returned from this routine must eventually be passed to + * file_unmap_section reoutine to unmap section mapped with this routine. + * This routine returns NULL on failure and sets errno to indicate the error. + */ +extern void* mapfile_map(MapFile* handle, + size_t offset, + size_t size, + int prot, + void** mapped_offset, + size_t* mapped_size); + +/* Umaps section of a file previously mapped with mapfile_map routine. + * Param: + * mapped_at - A pointer to the base address of the mapped section of a file + * that is to be unmapped. + * len - Byte size of the section that is to be unmapped. + * Return: + * Upon successful completion returns 0. Otherwise, returns -1 and sets + * errno to indicate the error. + */ +extern int mapfile_unmap(void* mapped_at, size_t len); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif // _ANDROID_UTILS_FILEIO_H |