libclamav/zziplib/zzip-io.h
b151ef55
 /*
  * Author: 
  *	Guido Draheim <guidod@gmx.de>
  *
  *	Copyright (c) 2002 Guido Draheim
  * 	    All rights reserved
  *	    use under the restrictions of the
  *	    Lesser GNU General Public License
  *          note the additional license information 
  *          that can be found in COPYING.ZZIP
  *
  *  the interfaces for the plugin_io system
  *
  * Using the following you can provide your own file I/O functions to
  * e.g. read data directly from memory, provide simple
  * "encryption"/"decryption" of on-disk .zip-files...
  * Note that this currently only provides a subset of the functionality
  * in zziplib. It does not attempt to provide any directory functions,
  * but if your program 1) only uses ordinary on-disk files and you
  * just want this for file obfuscation, or 2) you only access your
  * .zip archives using zzip_open & co., this is sufficient.
  *
  * Currently the default io are the POSIX functions, except
  * for 'filesize' that is zziplibs own provided zzip_filesize function,
  * using standard POSIX fd's. You are however free to replace this with
  * whatever data type you need, so long as you provide implementations
  * for all the functions, and the data type fits an int.
  *
  * all functions receiving ext_io are able to cope with both arguments
  * set to zero which will let them default to a ZIP ext and posix io.
  */
 #ifndef _ZZIP_IO_H
 #define _ZZIP_IO_H
 
 #include <zzip-conf.h>
 #include <zziplib.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 struct zzip_plugin_io
 {
     int        (*open)(zzip_char_t* name, int flags, ...);
     int        (*close)(int fd);
     int        (*read)(int fd, void* buf, unsigned int len);
     zzip_off_t (*seeks)(int fd, zzip_off_t offset, int whence);
     zzip_off_t (*filesize)(int fd);
     long       use_mmap;
 };
 
 _zzip_export zzip_off_t
 zzip_filesize(int fd);
 
 /* get the default file I/O functions */
 _zzip_export zzip_plugin_io_t zzip_get_default_io(void);
 
 /*
  * Initializes a zzip_plugin_io_t to the zziplib default io.
  * This is useful if you only want to override e.g. the 'read' function.
  * all zzip functions that can receive a zzip_plugin_io_t can
  * handle a zero pointer in that place and default to posix io.
  */
 _zzip_export
 int zzip_init_io(struct zzip_plugin_io* io, int flags);
 
 /* zzip_init_io flags : */
 # define ZZIP_IO_USE_MMAP 1
 
 #ifdef __cplusplus
 };
 #endif
 
 #endif