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 */
48 long mapped
; /* used for mmap() wrappers of zzip/__mmap.h */
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
64 zzip_disk_init(ZZIP_DISK
* disk
, void* buffer
, zzip_size_t buflen
);
66 zzip_disk_extern zzip__new__ ZZIP_DISK
*
69 zzip_disk_extern zzip__new__ ZZIP_DISK
*
70 zzip_disk_mmap(int fd
);
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
);
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
);
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 */