/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* 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 */ #include #include #include #include "zlib.h" #include "axis2_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 = NULL; const char *mode_fopen = NULL; 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) && (mode_fopen != NULL)) file = fopen(filename, mode_fopen); return file; } uLong ZCALLBACK fread_file_func( voidpf opaque, voidpf stream, void *buf, uLong size) { uLong ret; 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; ret = (uLong) fwrite(buf, 1, (size_t) size, (FILE *) stream); return ret; } long ZCALLBACK ftell_file_func( voidpf opaque, voidpf stream) { long ret; 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; 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; ret = fclose((FILE *) stream); return ret; } int ZCALLBACK ferror_file_func( voidpf opaque, voidpf stream) { int ret; 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 = NULL; }