📄 ioapi.c
字号:
/* ioapi.c -- IO base function header for compress/uncompress .zip files using zlib + zip or unzip API Version 1.01, May 8th, 2004 Copyright (C) 1998-2004 Gilles Vollant*///嶍彍#include <stdio.h>//嶍彍#include <stdlib.h>//嶍彍#include <string.h>//捛壛#include "zlibType.h"//捛壛#include "zlibFileMemory.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#endifvoidpf 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 (opaque, filename, mode) 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!=NULL) && (mode_fopen != NULL)) file = ___fopen(filename, mode_fopen); return file;}uLong ZCALLBACK fread_file_func (opaque, stream, buf, size) 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 (opaque, stream, buf, size) 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 (opaque, stream) voidpf opaque; voidpf stream;{ long ret; ret = ___ftell((FILE *)stream); return ret;}long ZCALLBACK fseek_file_func (opaque, stream, offset, origin) 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 (opaque, stream) voidpf opaque; voidpf stream;{ int ret; ret = ___fclose((FILE *)stream); return ret;}int ZCALLBACK ferror_file_func (opaque, stream) voidpf opaque; voidpf stream;{ int ret; ret = ___ferror((FILE *)stream); return ret;}void fill_fopen_filefunc (pzlib_filefunc_def) 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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -