]> granicus.if.org Git - zziplib/blob - zzip/plugin.h
patches from Mike Frysinger
[zziplib] / zzip / plugin.h
1 /*
2  * Author: 
3  *      Guido Draheim <guidod@gmx.de>
4  *
5  * Copyright (c) 2002,2003 Guido Draheim
6  *          All rights reserved
7  *          use under the restrictions of the
8  *          Lesser GNU General Public License
9  *          or alternatively the restrictions 
10  *          of the Mozilla Public License 1.1
11  *
12  *  the interfaces for the plugin_io system
13  *
14  * Using the following you can provide your own file I/O functions to
15  * e.g. read data directly from memory, provide simple
16  * "encryption"/"decryption" of on-disk .zip-files...
17  * Note that this currently only provides a subset of the functionality
18  * in zziplib. It does not attempt to provide any directory functions,
19  * but if your program 1) only uses ordinary on-disk files and you
20  * just want this for file obfuscation, or 2) you only access your
21  * .zip archives using zzip_open & co., this is sufficient.
22  *
23  * Currently the default io are the POSIX functions, except
24  * for 'filesize' that is zziplibs own provided zzip_filesize function,
25  * using standard POSIX fd's. You are however free to replace this with
26  * whatever data type you need, so long as you provide implementations
27  * for all the functions, and the data type fits an int.
28  *
29  * all functions receiving ext_io are able to cope with both arguments
30  * set to zero which will let them default to a ZIP ext and posix io.
31  */
32 #ifndef _ZZIP_PLUGIN_H /* zzip-io.h */
33 #define _ZZIP_PLUGIN_H 1
34
35 #include <zzip/zzip.h>
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 /* we have renamed zzip_plugin_io.use_mmap to zzip_plugin_io.sys */
42 #define ZZIP_PLUGIN_IO_SYS 1
43
44 struct zzip_plugin_io { /* use "zzip_plugin_io_handlers" in applications !! */
45     int          (*open)(zzip_char_t* name, int flags, ...);
46     int          (*close)(int fd);
47     zzip_ssize_t (*read)(int fd, void* buf, zzip_size_t len);
48     zzip_off_t   (*seeks)(int fd, zzip_off_t offset, int whence);
49     zzip_off_t   (*filesize)(int fd);
50     long         sys;
51     long         type;
52     zzip_ssize_t (*write)(int fd, _zzip_const void* buf, zzip_size_t len);
53 };
54
55 typedef union _zzip_plugin_io
56 {
57     struct zzip_plugin_io fd;
58     struct { void* padding[8]; } ptr;
59 } zzip_plugin_io_handlers;
60
61 #define _zzip_plugin_io_handlers zzip_plugin_io_handlers
62 /* for backward compatibility, and the following to your application code:
63  * #ifndef _zzip_plugin_io_handlers
64  * #define _zzip_plugin_io_handlers struct zzip_plugin_io
65  */
66 typedef zzip_plugin_io_handlers* zzip_plugin_io_handlers_t;
67
68 #ifdef ZZIP_LARGEFILE_RENAME
69 #define zzip_filesize        zzip_filesize64
70 #define zzip_get_default_io  zzip_get_default_io64
71 #define zzip_init_io         zzip_init_io64
72 #endif
73
74 _zzip_export zzip_off_t
75 zzip_filesize(int fd);
76
77 /* get the default file I/O functions */
78 _zzip_export zzip_plugin_io_t zzip_get_default_io(void);
79
80 /*
81  * Initializes a zzip_plugin_io_t to the zziplib default io.
82  * This is useful if you only want to override e.g. the 'read' function.
83  * all zzip functions that can receive a zzip_plugin_io_t can
84  * handle a zero pointer in that place and default to posix io.
85  */
86 _zzip_export
87 int zzip_init_io(zzip_plugin_io_handlers_t io, int flags);
88
89 /* zzip_init_io flags : */
90 # define ZZIP_IO_USE_MMAP 1
91
92 #ifdef __cplusplus
93 };
94 #endif
95
96 #endif