]> granicus.if.org Git - zziplib/blob - zzip/mmapped.h
patches from Mike Frysinger
[zziplib] / zzip / mmapped.h
1 #ifndef _ZZIP_MMAPPED_H_
2 #define _ZZIP_MMAPPED_H_
3 /*
4  * NOTE: this is part of libzzipmmapped (i.e. it is not libzzip). 
5  *
6  * simplified zip disk access using a mmapping of the whole archive.
7  *
8  * Author: 
9  *      Guido Draheim <guidod@gmx.de>
10  *
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
17  */
18
19
20 #include <zzip/types.h>
21
22 #ifdef _ZZIP_DISK_FILE_STRUCT
23 #include <zlib.h> /* z_stream */
24 #endif
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
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; */
33
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.
37  */
38 struct zzip_disk
39 {
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!) */
48 };
49
50 typedef int (*zzip_strcmp_fn_t)(char*, char*);
51 typedef int (*zzip_fnmatch_fn_t)(char*, char*, int);
52
53 #define zzip_disk_extern extern
54
55 zzip_disk_extern int
56 zzip_disk_init(ZZIP_DISK* disk, void* buffer, zzip_size_t buflen);
57
58 zzip_disk_extern zzip__new__ ZZIP_DISK*
59 zzip_disk_new(void);
60
61 zzip_disk_extern zzip__new__ ZZIP_DISK*
62 zzip_disk_mmap(int fd);
63
64 zzip_disk_extern int 
65 zzip_disk_munmap(ZZIP_DISK* disk);
66
67 zzip_disk_extern zzip__new__ ZZIP_DISK*
68 zzip_disk_open(char* filename);
69
70 zzip_disk_extern int
71 zzip_disk_close(ZZIP_DISK* disk);
72
73
74 zzip_disk_extern ZZIP_DISK_ENTRY*
75 zzip_disk_findfirst(ZZIP_DISK* disk);
76
77 zzip_disk_extern ZZIP_DISK_ENTRY*
78 zzip_disk_findnext(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
79
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);
88
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);
97
98
99 zzip_disk_extern zzip__new__ ZZIP_DISK_FILE*
100 zzip_disk_entry_fopen (ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
101
102 zzip_disk_extern zzip__new__ ZZIP_DISK_FILE*
103 zzip_disk_fopen (ZZIP_DISK* disk, char* filename);
104
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);
108 zzip_disk_extern int
109 zzip_disk_fclose (ZZIP_DISK_FILE* file);
110 int
111 zzip_disk_feof (ZZIP_DISK_FILE* file);
112
113 #ifdef _ZZIP_DISK_FILE_STRUCT
114 /**
115  * typedef struct zzip_disk_file ZZIP_DISK_FILE;
116  */
117 struct zzip_disk_file
118 {
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 */
124 };
125 #endif
126
127 #ifdef __cplusplus
128 }
129 #endif
130 #endif
131