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