PageRenderTime 22ms CodeModel.GetById 12ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/src/zziplib/zzip/plugin.h

https://bitbucket.org/cabalistic/ogredeps/
C++ Header | 99 lines | 39 code | 14 blank | 46 comment | 0 complexity | c8e94e5cb5e7f015f39f37cfcd473b88 MD5 | raw file
 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
38extern "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
44struct 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
55typedef 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
63/* for backward compatibility, add the following to your application code:
64 * #ifndef _zzip_plugin_io_handlers
65 * #define _zzip_plugin_io_handlers struct zzip_plugin_io
66 */
67typedef zzip_plugin_io_handlers* zzip_plugin_io_handlers_t;
68
69#ifdef ZZIP_LARGEFILE_RENAME
70#define zzip_filesize        zzip_filesize64
71#define zzip_get_default_io  zzip_get_default_io64
72#define zzip_init_io         zzip_init_io64
73#endif
74
75_zzip_export zzip_off_t
76zzip_filesize(int fd);
77
78/* get the default file I/O functions.
79 *  This functions returns a pointer to an internal static structure.
80 */
81_zzip_export zzip_plugin_io_t zzip_get_default_io(void);
82
83/*
84 * Initializes a zzip_plugin_io_t to the zziplib default io.
85 * This is useful if you only want to override e.g. the 'read' function.
86 * all zzip functions that can receive a zzip_plugin_io_t can
87 * handle a zero pointer in that place and default to posix io.
88 */
89_zzip_export
90int zzip_init_io(zzip_plugin_io_handlers_t io, int flags);
91
92/* zzip_init_io flags : */
93# define ZZIP_IO_USE_MMAP 1
94
95#ifdef __cplusplus
96};
97#endif
98
99#endif