aboutsummaryrefslogtreecommitdiffstats
path: root/android/utils/mapfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'android/utils/mapfile.h')
-rw-r--r--android/utils/mapfile.h133
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