beta-0.89.2
[luatex.git] / source / libs / zziplib / zziplib-0.13.62 / zzip / mmapped.h
blob18fbabadb4052f91ef08287e81475f9fd531130b
1 #ifndef _ZZIP_MMAPPED_H_
2 #define _ZZIP_MMAPPED_H_
3 /*
4 * NOTE: this is part of libzzipmmapped (i.e. it is not libzzip).
6 * simplified zip disk access using a mmapping of the whole archive.
8 * Author:
9 * Guido Draheim <guidod@gmx.de>
11 * Copyright (c) 2003,2004 Guido Draheim
12 * All rights reserved,
13 * use under the restrictions of the
14 * Lesser GNU General Public License
15 * or alternatively the restrictions
16 * of the Mozilla Public License 1.1
20 #include <zzip/types.h>
22 #ifdef _ZZIP_DISK_FILE_STRUCT
23 #include <zlib.h> /* z_stream */
24 #endif
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
30 typedef struct zzip_disk_file ZZIP_DISK_FILE;
31 typedef struct zzip_disk ZZIP_DISK;
32 /* def struct zzip_disk_entry ZZIP_DISK_ENTRY; */
34 /* we expose this structure so third party applications can augment
35 * on them. The mmapped zip access usually just needs the two pointers
36 * specifying the mmapped area, whereever you have that from.
38 struct zzip_disk
40 zzip_byte_t* buffer; /* start of mmapped area, the base of all seekvals */
41 zzip_byte_t* endbuf; /* end of mmapped area, i.e. buffer + buflen */
42 void* reserved; /* - for later extensions (might be renamed) */
43 void* user; /* - free for applications (use this!) */
44 long flags; /* bit 0: findfile searches case-insensitive */
45 #ifdef _WIN64
46 __int64 mapped;
47 #else
48 long mapped; /* used for mmap() wrappers of zzip/__mmap.h */
49 #endif
50 long unused; /* - for later extensions (might be renamed) */
51 long code; /* - free for applications (use this!) */
54 /* fnmatch search shall be case insensitive */
55 #define ZZIP_DISK_FLAGS_MATCH_NOCASE 1
56 #define ZZIP_DISK_FLAGS_OWNED_BUFFER 2
58 typedef int (*zzip_strcmp_fn_t)(char*, char*);
59 typedef int (*zzip_fnmatch_fn_t)(char*, char*, int);
61 #define zzip_disk_extern extern
63 zzip_disk_extern int
64 zzip_disk_init(ZZIP_DISK* disk, void* buffer, zzip_size_t buflen);
66 zzip_disk_extern zzip__new__ ZZIP_DISK*
67 zzip_disk_new(void);
69 zzip_disk_extern zzip__new__ ZZIP_DISK*
70 zzip_disk_mmap(int fd);
72 zzip_disk_extern int
73 zzip_disk_munmap(ZZIP_DISK* disk);
75 zzip_disk_extern zzip__new__ ZZIP_DISK*
76 zzip_disk_open(char* filename);
78 zzip_disk_extern zzip__new__ ZZIP_DISK *
79 zzip_disk_buffer(void *buffer, size_t buflen);
81 zzip_disk_extern int
82 zzip_disk_close(ZZIP_DISK* disk);
85 zzip_disk_extern ZZIP_DISK_ENTRY*
86 zzip_disk_findfirst(ZZIP_DISK* disk);
88 zzip_disk_extern ZZIP_DISK_ENTRY*
89 zzip_disk_findnext(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
91 zzip_disk_extern zzip__new__ char*
92 zzip_disk_entry_strdup_name(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
93 zzip_disk_extern zzip__new__ char*
94 zzip_disk_entry_strdup_comment(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
95 zzip_disk_extern struct zzip_file_header*
96 zzip_disk_entry_to_file_header(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
97 zzip_disk_extern zzip_byte_t*
98 zzip_disk_entry_to_data(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
100 zzip_disk_extern ZZIP_DISK_ENTRY*
101 zzip_disk_findfile(ZZIP_DISK* disk,
102 char* filename, ZZIP_DISK_ENTRY* after,
103 zzip_strcmp_fn_t compare);
104 zzip_disk_extern ZZIP_DISK_ENTRY*
105 zzip_disk_findmatch(ZZIP_DISK* disk,
106 char* filespec, ZZIP_DISK_ENTRY* after,
107 zzip_fnmatch_fn_t compare, int flags);
110 zzip_disk_extern zzip__new__ ZZIP_DISK_FILE*
111 zzip_disk_entry_fopen (ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
113 zzip_disk_extern zzip__new__ ZZIP_DISK_FILE*
114 zzip_disk_fopen (ZZIP_DISK* disk, char* filename);
116 zzip_disk_extern _zzip_size_t
117 zzip_disk_fread (void* ptr, _zzip_size_t size, _zzip_size_t nmemb,
118 ZZIP_DISK_FILE* file);
119 zzip_disk_extern int
120 zzip_disk_fclose (ZZIP_DISK_FILE* file);
122 zzip_disk_feof (ZZIP_DISK_FILE* file);
124 #ifdef _ZZIP_DISK_FILE_STRUCT
126 * typedef struct zzip_disk_file ZZIP_DISK_FILE;
128 struct zzip_disk_file
130 zzip_byte_t* buffer; /* fopen disk->buffer */
131 zzip_byte_t* endbuf; /* fopen disk->endbuf */
132 zzip_size_t avail; /* memorized for checks on EOF */
133 z_stream zlib; /* for inflated blocks */
134 zzip_byte_t* stored; /* for stored blocks */
136 #endif
138 #ifdef __cplusplus
140 #endif
141 #endif