/src/zziplib/zzip/zzip.h
C++ Header | 268 lines | 159 code | 33 blank | 76 comment | 0 complexity | e1ce75a998e75f347208c2a43f6c5fc5 MD5 | raw file
1/* 2 * Author: 3 * Guido Draheim <guidod@gmx.de> 4 * Tomi Ollila <Tomi.Ollila@iki.fi> 5 * 6 * Copyright (c) 1999,2000,2001,2002,2003,2004 Guido Draheim 7 * All rights reserved, 8 * usage allowed under the restrictions of the 9 * Lesser GNU General Public License 10 * or alternatively the restrictions 11 * of the Mozilla Public License 1.1 12 * 13 * if you see "unknown symbol" errors, check first that `-I ..` is part of 14 * your compiler options - a special hint to VC/IDE users who tend to make up 15 * their own workspace files. All includes look like #include <zzip|*.h>, so 16 * you need to add an include path to the dir containing (!!) the ./zzip/ dir 17 */ 18 19#ifndef _ZZIP_ZZIP_H /* zziplib.h */ 20#define _ZZIP_ZZIP_H 21 22#include <zzip/types.h> 23 24#ifdef __cplusplus 25extern "C" { 26#endif 27 28/* the zzip_error_t is also used to pass back ZLIB errors... */ 29#define ZZIP_ERROR -4096 30 31typedef enum 32{ 33 ZZIP_NO_ERROR = 0, /* no error, may be used if user sets it. */ 34 ZZIP_OUTOFMEM = ZZIP_ERROR-20, /* out of memory */ 35 ZZIP_DIR_OPEN = ZZIP_ERROR-21, /* failed to open zipfile, see errno for details */ 36 ZZIP_DIR_STAT = ZZIP_ERROR-22, /* failed to fstat zipfile, see errno for details */ 37 ZZIP_DIR_SEEK = ZZIP_ERROR-23, /* failed to lseek zipfile, see errno for details */ 38 ZZIP_DIR_READ = ZZIP_ERROR-24, /* failed to read zipfile, see errno for details */ 39 ZZIP_DIR_TOO_SHORT = ZZIP_ERROR-25, 40 ZZIP_DIR_EDH_MISSING = ZZIP_ERROR-26, 41 ZZIP_DIRSIZE = ZZIP_ERROR-27, 42 ZZIP_ENOENT = ZZIP_ERROR-28, 43 ZZIP_UNSUPP_COMPR = ZZIP_ERROR-29, 44 ZZIP_CORRUPTED = ZZIP_ERROR-31, 45 ZZIP_UNDEF = ZZIP_ERROR-32, 46 ZZIP_DIR_LARGEFILE = ZZIP_ERROR-33 47} zzip_error_t; 48 49/* 50 * zzip_open flags. 51 */ 52#define ZZIP_CASEINSENSITIVE O_APPEND /* do not use anymore. use CASLESS */ 53#define ZZIP_IGNOREPATH O_TRUNC /* do not use anymore. use NOPATHS */ 54#define ZZIP_EXTRAFLAGS (ZZIP_CASEINSENSITIVE|ZZIP_IGNOREPATH) 55 56/* zzip_open_ext_io o_modes flags : new style. use these from now on! */ 57#define ZZIP_CASELESS (1<<12) /* ignore filename case inside zips */ 58#define ZZIP_NOPATHS (1<<13) /* ignore subdir paths, just filename*/ 59#define ZZIP_PREFERZIP (1<<14) /* try first zipped file, then real*/ 60#define ZZIP_ONLYZIP (1<<16) /* try _only_ zipped file, skip real*/ 61#define ZZIP_FACTORY (1<<17) /* old file handle is not closed */ 62#define ZZIP_ALLOWREAL (1<<18) /* real files use default_io (magic) */ 63#define ZZIP_THREADED (1<<19) /* try to be safe for multithreading */ 64 65/* 66 * zzip largefile renames 67 */ 68#ifdef ZZIP_LARGEFILE_RENAME 69#define zzip_telldir zzip_telldir64 70#define zzip_seekdir zzip_seekdir64 71#endif 72 73/* 74 * zzip typedefs 75 */ 76/* zzip_strings_t ext[] = { ".zip", ".jar", ".pk3", 0 } */ 77typedef char _zzip_const * _zzip_const zzip_strings_t; 78typedef char _zzip_const zzip_char_t; 79typedef struct zzip_dir ZZIP_DIR; 80typedef struct zzip_file ZZIP_FILE; 81typedef struct zzip_dirent ZZIP_DIRENT; 82typedef struct zzip_dirent ZZIP_STAT; 83 84struct zzip_dirent 85{ 86 int d_compr; /* compression method */ 87 int d_csize; /* compressed size */ 88 int st_size; /* file size / decompressed size */ 89 char * d_name; /* file name / strdupped name */ 90}; 91 92/* 93 * Getting error strings 94 * zzip/err.c 95 */ 96_zzip_export /* error in _opendir : */ 97zzip_char_t* zzip_strerror(int errcode); 98_zzip_export /* error in other functions : */ 99zzip_char_t* zzip_strerror_of(ZZIP_DIR * dir); 100_zzip_export /* error mapped to errno.h defines : */ 101int zzip_errno(int errcode); 102 103 104/* 105 * Functions to grab information from ZZIP_DIR/ZZIP_FILE structure 106 * (if ever needed) 107 * zzip/info.c 108 */ 109_zzip_export 110int zzip_error(ZZIP_DIR * dir); 111_zzip_export 112void zzip_seterror(ZZIP_DIR * dir, int errcode); 113_zzip_export 114zzip_char_t* zzip_compr_str(int compr); 115 116_zzip_export 117ZZIP_DIR * zzip_dirhandle(ZZIP_FILE * fp); 118_zzip_export 119int zzip_dirfd(ZZIP_DIR * dir); 120_zzip_export 121int zzip_dir_real(ZZIP_DIR * dir); 122_zzip_export 123int zzip_file_real(ZZIP_FILE * fp); 124_zzip_export 125void* zzip_realdir(ZZIP_DIR * dir); 126_zzip_export 127int zzip_realfd(ZZIP_FILE * fp); 128 129/* 130 * zip handle management 131 * zzip/zip.c 132 */ 133_zzip_export 134ZZIP_DIR * zzip_dir_alloc(zzip_strings_t* fileext); 135_zzip_export 136int zzip_dir_free(ZZIP_DIR *); 137 138/* 139 * Opening/closing a zip archive 140 * zzip-zip.c 141 */ 142_zzip_export 143ZZIP_DIR * zzip_dir_fdopen(int fd, zzip_error_t * errcode_p); 144_zzip_export 145ZZIP_DIR * zzip_dir_open(zzip_char_t* filename, zzip_error_t * errcode_p); 146_zzip_export 147int zzip_dir_close(ZZIP_DIR * dir); 148_zzip_export 149int zzip_dir_read(ZZIP_DIR * dir, ZZIP_DIRENT * dirent); 150 151 152/* 153 * Scanning files in zip archive 154 * zzip/dir.c 155 * zzip/zip.c 156 */ 157_zzip_export 158ZZIP_DIR * zzip_opendir(zzip_char_t* filename); 159_zzip_export 160int zzip_closedir(ZZIP_DIR * dir); 161_zzip_export 162ZZIP_DIRENT * zzip_readdir(ZZIP_DIR * dir); 163_zzip_export 164void zzip_rewinddir(ZZIP_DIR * dir); 165_zzip_export 166zzip_off_t zzip_telldir(ZZIP_DIR * dir); 167_zzip_export 168void zzip_seekdir(ZZIP_DIR * dir, zzip_off_t offset); 169 170/* 171 * 'opening', 'closing' and reading invidual files in zip archive. 172 * zzip/file.c 173 */ 174_zzip_export 175ZZIP_FILE * zzip_file_open(ZZIP_DIR * dir, zzip_char_t* name, int flags); 176_zzip_export 177int zzip_file_close(ZZIP_FILE * fp); 178_zzip_export 179zzip_ssize_t zzip_file_read(ZZIP_FILE * fp, void* buf, zzip_size_t len); 180 181_zzip_export 182ZZIP_FILE * zzip_open(zzip_char_t* name, int flags); 183_zzip_export 184int zzip_close(ZZIP_FILE * fp); 185_zzip_export 186zzip_ssize_t zzip_read(ZZIP_FILE * fp, void * buf, zzip_size_t len); 187 188/* 189 * the stdc variant to open/read/close files. - Take note of the freopen() 190 * call as it may reuse an existing preparsed copy of a zip central directory 191 */ 192_zzip_export 193ZZIP_FILE* zzip_freopen(zzip_char_t* name, zzip_char_t* mode, ZZIP_FILE*); 194_zzip_export 195ZZIP_FILE* zzip_fopen(zzip_char_t* name, zzip_char_t* mode); 196_zzip_export 197zzip_size_t zzip_fread(void *ptr, zzip_size_t size, zzip_size_t nmemb, 198 ZZIP_FILE * file); 199_zzip_export 200int zzip_fclose(ZZIP_FILE * fp); 201 202/* 203 * seek and tell functions 204 */ 205_zzip_export 206int zzip_rewind(ZZIP_FILE *fp); 207_zzip_export 208zzip_off_t zzip_seek(ZZIP_FILE * fp, zzip_off_t offset, int whence); 209_zzip_export 210zzip_off_t zzip_tell(ZZIP_FILE * fp); 211 212/* 213 * reading info of a single file 214 * zzip/stat.c 215 */ 216_zzip_export 217int zzip_dir_stat(ZZIP_DIR * dir, zzip_char_t* name, 218 ZZIP_STAT * zs, int flags); 219_zzip_export 220int zzip_file_stat(ZZIP_FILE * fp, ZZIP_STAT * zs); 221_zzip_export 222int zzip_fstat(ZZIP_FILE * fp, ZZIP_STAT * zs); 223 224#ifdef ZZIP_LARGEFILE_RENAME 225#define zzip_open_shared_io zzip_open_shared_io64 226#define zzip_open_ext_io zzip_open_ext_io64 227#define zzip_opendir_ext_io zzip_opendir_ext_io64 228#define zzip_dir_open_ext_io zzip_dir_open_ext_io64 229#define zzip_plugin_io_t zzip_plugin_io64_t 230#endif 231 232/* 233 * all ext_io functions can be called with a default of ext/io == zero/zero 234 * which will default to a ".zip" extension and posix io of the system. 235 */ 236typedef union _zzip_plugin_io _zzip_const * zzip_plugin_io_t; 237 238_zzip_export 239ZZIP_FILE * zzip_open_shared_io(ZZIP_FILE* stream, 240 zzip_char_t* name, int o_flags, int o_modes, 241 zzip_strings_t* ext, zzip_plugin_io_t io); 242 243_zzip_export 244ZZIP_FILE * zzip_open_ext_io(zzip_char_t* name, int o_flags, int o_modes, 245 zzip_strings_t* ext, zzip_plugin_io_t io); 246 247_zzip_export 248ZZIP_DIR * zzip_opendir_ext_io(zzip_char_t* name, int o_modes, 249 zzip_strings_t* ext, zzip_plugin_io_t io); 250 251_zzip_export 252ZZIP_DIR * zzip_dir_open_ext_io(zzip_char_t* filename, 253 zzip_error_t* errcode_p, 254 zzip_strings_t* ext, zzip_plugin_io_t io); 255 256/* zzip_file_open_ext_io => zzip_dir_open_ext_io + zzip_file_open */ 257 258#ifdef __cplusplus 259}; 260#endif 261 262#endif /* _ZZIPLIB_H */ 263 264/* 265 * Local variables: 266 * c-file-style: "stroustrup" 267 * End: 268 */