1 #ifndef _ZZIP_MMAPPED_H_
2 #define _ZZIP_MMAPPED_H_
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.
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 */
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.
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 long mapped; /* used for mmap() wrappers of zzip/__mmap.h */
46 long unused; /* - for later extensions (might be renamed) */
47 long code; /* - free for applications (use this!) */
50 typedef int (*zzip_strcmp_fn_t)(char*, char*);
51 typedef int (*zzip_fnmatch_fn_t)(char*, char*, int);
53 #define zzip_disk_extern extern
56 zzip_disk_init(ZZIP_DISK* disk, void* buffer, zzip_size_t buflen);
58 zzip_disk_extern zzip__new__ ZZIP_DISK*
61 zzip_disk_extern zzip__new__ ZZIP_DISK*
62 zzip_disk_mmap(int fd);
65 zzip_disk_munmap(ZZIP_DISK* disk);
67 zzip_disk_extern zzip__new__ ZZIP_DISK*
68 zzip_disk_open(char* filename);
71 zzip_disk_close(ZZIP_DISK* disk);
74 zzip_disk_extern ZZIP_DISK_ENTRY*
75 zzip_disk_findfirst(ZZIP_DISK* disk);
77 zzip_disk_extern ZZIP_DISK_ENTRY*
78 zzip_disk_findnext(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
80 zzip_disk_extern zzip__new__ char*
81 zzip_disk_entry_strdup_name(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
82 zzip_disk_extern zzip__new__ char*
83 zzip_disk_entry_strdup_comment(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
84 zzip_disk_extern struct zzip_file_header*
85 zzip_disk_entry_to_file_header(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
86 zzip_disk_extern zzip_byte_t*
87 zzip_disk_entry_to_data(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
89 zzip_disk_extern ZZIP_DISK_ENTRY*
90 zzip_disk_findfile(ZZIP_DISK* disk,
91 char* filename, ZZIP_DISK_ENTRY* after,
92 zzip_strcmp_fn_t compare);
93 zzip_disk_extern ZZIP_DISK_ENTRY*
94 zzip_disk_findmatch(ZZIP_DISK* disk,
95 char* filespec, ZZIP_DISK_ENTRY* after,
96 zzip_fnmatch_fn_t compare, int flags);
99 zzip_disk_extern zzip__new__ ZZIP_DISK_FILE*
100 zzip_disk_entry_fopen (ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
102 zzip_disk_extern zzip__new__ ZZIP_DISK_FILE*
103 zzip_disk_fopen (ZZIP_DISK* disk, char* filename);
105 zzip_disk_extern _zzip_size_t
106 zzip_disk_fread (void* ptr, _zzip_size_t size, _zzip_size_t nmemb,
107 ZZIP_DISK_FILE* file);
109 zzip_disk_fclose (ZZIP_DISK_FILE* file);
111 zzip_disk_feof (ZZIP_DISK_FILE* file);
113 #ifdef _ZZIP_DISK_FILE_STRUCT
115 * typedef struct zzip_disk_file ZZIP_DISK_FILE;
117 struct zzip_disk_file
119 zzip_byte_t* buffer; /* fopen disk->buffer */
120 zzip_byte_t* endbuf; /* fopen disk->endbuf */
121 zzip_size_t avail; /* memorized for checks on EOF */
122 z_stream zlib; /* for inflated blocks */
123 zzip_byte_t* stored; /* for stored blocks */