diff options
Diffstat (limited to 'ACE/contrib/minizip/ioapi.c')
-rw-r--r-- | ACE/contrib/minizip/ioapi.c | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/ACE/contrib/minizip/ioapi.c b/ACE/contrib/minizip/ioapi.c new file mode 100644 index 00000000000..2e3ae874b02 --- /dev/null +++ b/ACE/contrib/minizip/ioapi.c @@ -0,0 +1,169 @@ +/* ioapi.c -- IO base function header for compress/uncompress .zip + files using zlib + zip or unzip API + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + $Id$ +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "zlib.h" +#include "ioapi.h" + + + +/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ + +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif + +#ifndef SEEK_END +#define SEEK_END 2 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + +voidpf ZCALLBACK fopen_file_func OF(( + voidpf opaque, + const char* filename, + int mode)); + +uLong ZCALLBACK fread_file_func OF(( + voidpf opaque, + voidpf stream, + void* buf, + uLong size)); + +uLong ZCALLBACK fwrite_file_func OF(( + voidpf opaque, + voidpf stream, + const void* buf, + uLong size)); + +long ZCALLBACK ftell_file_func OF(( + voidpf opaque, + voidpf stream)); + +long ZCALLBACK fseek_file_func OF(( + voidpf opaque, + voidpf stream, + uLong offset, + int origin)); + +int ZCALLBACK fclose_file_func OF(( + voidpf opaque, + voidpf stream)); + +int ZCALLBACK ferror_file_func OF(( + voidpf opaque, + voidpf stream)); + + +voidpf ZCALLBACK fopen_file_func ( voidpf opaque,const char* filename,int mode) + { + FILE* file = 0; + const char* mode_fopen = 0; + MINIZIP_UNUSED_ARG (opaque); + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + mode_fopen = "rb"; + else + if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + mode_fopen = "r+b"; + else + if (mode & ZLIB_FILEFUNC_MODE_CREATE) + mode_fopen = "wb"; + + if ((filename != 0) && (mode_fopen != 0)) + file = fopen(filename, mode_fopen); + return file; +} + + +uLong ZCALLBACK fread_file_func (voidpf opaque,voidpf stream,void* buf,uLong size) +{ + uLong ret; + + MINIZIP_UNUSED_ARG (opaque); + + ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); + return ret; +} + + +uLong ZCALLBACK fwrite_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size) + +{ + uLong ret; + MINIZIP_UNUSED_ARG (opaque); + ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); + return ret; +} + +long ZCALLBACK ftell_file_func (opaque, stream) + voidpf opaque; + voidpf stream; +{ + long ret; + MINIZIP_UNUSED_ARG (opaque); + ret = ftell((FILE *)stream); + return ret; +} + +long ZCALLBACK fseek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin) +{ + int fseek_origin=0; + long ret; + MINIZIP_UNUSED_ARG (opaque); + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + fseek_origin = SEEK_CUR; + break; + case ZLIB_FILEFUNC_SEEK_END : + fseek_origin = SEEK_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + fseek_origin = SEEK_SET; + break; + default: return -1; + } + ret = 0; + fseek((FILE *)stream, offset, fseek_origin); + return ret; +} + +int ZCALLBACK fclose_file_func (voidpf opaque,voidpf stream) +{ + int ret; + MINIZIP_UNUSED_ARG (opaque); + ret = fclose((FILE *)stream); + return ret; +} + +int ZCALLBACK ferror_file_func (voidpf opaque,voidpf stream) +{ + int ret; + MINIZIP_UNUSED_ARG (opaque); + ret = ferror((FILE *)stream); + return ret; +} + +void fill_fopen_filefunc (zlib_filefunc_def* pzlib_filefunc_def) + { + pzlib_filefunc_def->zopen_file = fopen_file_func; + pzlib_filefunc_def->zread_file = fread_file_func; + pzlib_filefunc_def->zwrite_file = fwrite_file_func; + pzlib_filefunc_def->ztell_file = ftell_file_func; + pzlib_filefunc_def->zseek_file = fseek_file_func; + pzlib_filefunc_def->zclose_file = fclose_file_func; + pzlib_filefunc_def->zerror_file = ferror_file_func; + pzlib_filefunc_def->opaque = 0; +} |