new beta-0.90.0
[luatex.git] / source / libs / zziplib / zziplib-src / zzip / plugin.h
blobdb563d2dcec51af5558f0a0380956566d55f7909
1 /*
2 * Author:
3 * Guido Draheim <guidod@gmx.de>
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
12 * the interfaces for the plugin_io system
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.
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.
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.
32 #ifndef _ZZIP_PLUGIN_H /* zzip-io.h */
33 #define _ZZIP_PLUGIN_H 1
35 #include <zzip/zzip.h>
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
41 /* we have renamed zzip_plugin_io.use_mmap to zzip_plugin_io.sys */
42 #define ZZIP_PLUGIN_IO_SYS 1
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 #ifdef _WIN64
51 __int64 sys;
52 #else
53 long sys;
54 #endif
55 long type;
56 zzip_ssize_t (*write)(int fd, _zzip_const void* buf, zzip_size_t len);
59 typedef union _zzip_plugin_io
61 struct zzip_plugin_io fd;
62 struct { void* padding[8]; } ptr;
63 } zzip_plugin_io_handlers;
65 #define _zzip_plugin_io_handlers zzip_plugin_io_handlers
67 /* for backward compatibility, add the following to your application code:
68 * #ifndef _zzip_plugin_io_handlers
69 * #define _zzip_plugin_io_handlers struct zzip_plugin_io
71 typedef zzip_plugin_io_handlers* zzip_plugin_io_handlers_t;
73 #ifdef ZZIP_LARGEFILE_RENAME
74 #define zzip_filesize zzip_filesize64
75 #define zzip_get_default_io zzip_get_default_io64
76 #define zzip_init_io zzip_init_io64
77 #endif
79 _zzip_export zzip_off_t
80 zzip_filesize(int fd);
82 /* get the default file I/O functions.
83 * This functions returns a pointer to an internal static structure.
85 _zzip_export zzip_plugin_io_t zzip_get_default_io(void);
88 * Initializes a zzip_plugin_io_t to the zziplib default io.
89 * This is useful if you only want to override e.g. the 'read' function.
90 * all zzip functions that can receive a zzip_plugin_io_t can
91 * handle a zero pointer in that place and default to posix io.
93 _zzip_export
94 int zzip_init_io(zzip_plugin_io_handlers_t io, int flags);
96 /* zzip_init_io flags : */
97 # define ZZIP_IO_USE_MMAP 1
99 #ifdef __cplusplus
101 #endif
103 #endif