1c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project/* 2c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * Copyright 2006 The Android Open Source Project 3c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * 4c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * System utilities. 5c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project */ 6c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project#ifndef _MINZIP_SYSUTIL 7c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project#define _MINZIP_SYSUTIL 8c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 9c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project#include "inline_magic.h" 10c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 11c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project#include <sys/types.h> 12c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 13c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project/* 14c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * Use this to keep track of mapped segments. 15c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project */ 16c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Projecttypedef struct MemMapping { 17c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project void* addr; /* start of data */ 18c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project size_t length; /* length of data */ 19c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 20c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project void* baseAddr; /* page-aligned base address */ 21c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project size_t baseLength; /* length of mapping */ 22c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project} MemMapping; 23c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 24c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project/* copy a map */ 25c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source ProjectINLINE void sysCopyMap(MemMapping* dst, const MemMapping* src) { 26c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project *dst = *src; 27c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project} 28c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 29c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project/* 30c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * Load a file into a new shared memory segment. All data from the current 31c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * offset to the end of the file is pulled in. 32c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * 33c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * The segment is read-write, allowing VM fixups. (It should be modified 34c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * to support .gz/.zip compressed data.) 35c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * 36c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * On success, "pMap" is filled in, and zero is returned. 37c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project */ 38c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Projectint sysLoadFileInShmem(int fd, MemMapping* pMap); 39c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 40c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project/* 41c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * Map a file (from fd's current offset) into a shared, 42c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * read-only memory segment. 43c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * 44c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * On success, "pMap" is filled in, and zero is returned. 45c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project */ 46c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Projectint sysMapFileInShmem(int fd, MemMapping* pMap); 47c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 48c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project/* 49c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * Like sysMapFileInShmem, but on only part of a file. 50c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project */ 51c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Projectint sysMapFileSegmentInShmem(int fd, off_t start, long length, 52c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project MemMapping* pMap); 53c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 54c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project/* 55c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * Release the pages associated with a shared memory segment. 56c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * 57c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project * This does not free "pMap"; it just releases the memory. 58c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project */ 59c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Projectvoid sysReleaseShmem(MemMapping* pMap); 60c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project 61c24a8e688a6312764254beac2b2520bb0c5e998dThe Android Open Source Project#endif /*_MINZIP_SYSUTIL*/ 62