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