annotate src/zlib-1.2.7/contrib/minizip/ioapi.c @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents e13257ea84a4
children
rev   line source
Chris@4 1 /* ioapi.h -- IO base function header for compress/uncompress .zip
Chris@4 2 part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
Chris@4 3
Chris@4 4 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
Chris@4 5
Chris@4 6 Modifications for Zip64 support
Chris@4 7 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
Chris@4 8
Chris@4 9 For more info read MiniZip_info.txt
Chris@4 10
Chris@4 11 */
Chris@4 12
Chris@4 13 #if defined(_WIN32) && (!(defined(_CRT_SECURE_NO_WARNINGS)))
Chris@4 14 #define _CRT_SECURE_NO_WARNINGS
Chris@4 15 #endif
Chris@4 16
Chris@4 17 #if defined(__APPLE__) || defined(IOAPI_NO_64)
Chris@4 18 // In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
Chris@4 19 #define FOPEN_FUNC(filename, mode) fopen(filename, mode)
Chris@4 20 #define FTELLO_FUNC(stream) ftello(stream)
Chris@4 21 #define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)
Chris@4 22 #else
Chris@4 23 #define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
Chris@4 24 #define FTELLO_FUNC(stream) ftello64(stream)
Chris@4 25 #define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)
Chris@4 26 #endif
Chris@4 27
Chris@4 28
Chris@4 29 #include "ioapi.h"
Chris@4 30
Chris@4 31 voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)
Chris@4 32 {
Chris@4 33 if (pfilefunc->zfile_func64.zopen64_file != NULL)
Chris@4 34 return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
Chris@4 35 else
Chris@4 36 {
Chris@4 37 return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);
Chris@4 38 }
Chris@4 39 }
Chris@4 40
Chris@4 41 long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)
Chris@4 42 {
Chris@4 43 if (pfilefunc->zfile_func64.zseek64_file != NULL)
Chris@4 44 return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
Chris@4 45 else
Chris@4 46 {
Chris@4 47 uLong offsetTruncated = (uLong)offset;
Chris@4 48 if (offsetTruncated != offset)
Chris@4 49 return -1;
Chris@4 50 else
Chris@4 51 return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);
Chris@4 52 }
Chris@4 53 }
Chris@4 54
Chris@4 55 ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)
Chris@4 56 {
Chris@4 57 if (pfilefunc->zfile_func64.zseek64_file != NULL)
Chris@4 58 return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
Chris@4 59 else
Chris@4 60 {
Chris@4 61 uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
Chris@4 62 if ((tell_uLong) == MAXU32)
Chris@4 63 return (ZPOS64_T)-1;
Chris@4 64 else
Chris@4 65 return tell_uLong;
Chris@4 66 }
Chris@4 67 }
Chris@4 68
Chris@4 69 void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)
Chris@4 70 {
Chris@4 71 p_filefunc64_32->zfile_func64.zopen64_file = NULL;
Chris@4 72 p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
Chris@4 73 p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
Chris@4 74 p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
Chris@4 75 p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
Chris@4 76 p_filefunc64_32->zfile_func64.ztell64_file = NULL;
Chris@4 77 p_filefunc64_32->zfile_func64.zseek64_file = NULL;
Chris@4 78 p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;
Chris@4 79 p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
Chris@4 80 p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;
Chris@4 81 p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;
Chris@4 82 p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;
Chris@4 83 }
Chris@4 84
Chris@4 85
Chris@4 86
Chris@4 87 static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));
Chris@4 88 static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
Chris@4 89 static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
Chris@4 90 static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));
Chris@4 91 static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
Chris@4 92 static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
Chris@4 93 static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
Chris@4 94
Chris@4 95 static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
Chris@4 96 {
Chris@4 97 FILE* file = NULL;
Chris@4 98 const char* mode_fopen = NULL;
Chris@4 99 if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
Chris@4 100 mode_fopen = "rb";
Chris@4 101 else
Chris@4 102 if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
Chris@4 103 mode_fopen = "r+b";
Chris@4 104 else
Chris@4 105 if (mode & ZLIB_FILEFUNC_MODE_CREATE)
Chris@4 106 mode_fopen = "wb";
Chris@4 107
Chris@4 108 if ((filename!=NULL) && (mode_fopen != NULL))
Chris@4 109 file = fopen(filename, mode_fopen);
Chris@4 110 return file;
Chris@4 111 }
Chris@4 112
Chris@4 113 static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
Chris@4 114 {
Chris@4 115 FILE* file = NULL;
Chris@4 116 const char* mode_fopen = NULL;
Chris@4 117 if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
Chris@4 118 mode_fopen = "rb";
Chris@4 119 else
Chris@4 120 if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
Chris@4 121 mode_fopen = "r+b";
Chris@4 122 else
Chris@4 123 if (mode & ZLIB_FILEFUNC_MODE_CREATE)
Chris@4 124 mode_fopen = "wb";
Chris@4 125
Chris@4 126 if ((filename!=NULL) && (mode_fopen != NULL))
Chris@4 127 file = FOPEN_FUNC((const char*)filename, mode_fopen);
Chris@4 128 return file;
Chris@4 129 }
Chris@4 130
Chris@4 131
Chris@4 132 static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
Chris@4 133 {
Chris@4 134 uLong ret;
Chris@4 135 ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
Chris@4 136 return ret;
Chris@4 137 }
Chris@4 138
Chris@4 139 static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
Chris@4 140 {
Chris@4 141 uLong ret;
Chris@4 142 ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
Chris@4 143 return ret;
Chris@4 144 }
Chris@4 145
Chris@4 146 static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
Chris@4 147 {
Chris@4 148 long ret;
Chris@4 149 ret = ftell((FILE *)stream);
Chris@4 150 return ret;
Chris@4 151 }
Chris@4 152
Chris@4 153
Chris@4 154 static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
Chris@4 155 {
Chris@4 156 ZPOS64_T ret;
Chris@4 157 ret = FTELLO_FUNC((FILE *)stream);
Chris@4 158 return ret;
Chris@4 159 }
Chris@4 160
Chris@4 161 static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin)
Chris@4 162 {
Chris@4 163 int fseek_origin=0;
Chris@4 164 long ret;
Chris@4 165 switch (origin)
Chris@4 166 {
Chris@4 167 case ZLIB_FILEFUNC_SEEK_CUR :
Chris@4 168 fseek_origin = SEEK_CUR;
Chris@4 169 break;
Chris@4 170 case ZLIB_FILEFUNC_SEEK_END :
Chris@4 171 fseek_origin = SEEK_END;
Chris@4 172 break;
Chris@4 173 case ZLIB_FILEFUNC_SEEK_SET :
Chris@4 174 fseek_origin = SEEK_SET;
Chris@4 175 break;
Chris@4 176 default: return -1;
Chris@4 177 }
Chris@4 178 ret = 0;
Chris@4 179 if (fseek((FILE *)stream, offset, fseek_origin) != 0)
Chris@4 180 ret = -1;
Chris@4 181 return ret;
Chris@4 182 }
Chris@4 183
Chris@4 184 static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
Chris@4 185 {
Chris@4 186 int fseek_origin=0;
Chris@4 187 long ret;
Chris@4 188 switch (origin)
Chris@4 189 {
Chris@4 190 case ZLIB_FILEFUNC_SEEK_CUR :
Chris@4 191 fseek_origin = SEEK_CUR;
Chris@4 192 break;
Chris@4 193 case ZLIB_FILEFUNC_SEEK_END :
Chris@4 194 fseek_origin = SEEK_END;
Chris@4 195 break;
Chris@4 196 case ZLIB_FILEFUNC_SEEK_SET :
Chris@4 197 fseek_origin = SEEK_SET;
Chris@4 198 break;
Chris@4 199 default: return -1;
Chris@4 200 }
Chris@4 201 ret = 0;
Chris@4 202
Chris@4 203 if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
Chris@4 204 ret = -1;
Chris@4 205
Chris@4 206 return ret;
Chris@4 207 }
Chris@4 208
Chris@4 209
Chris@4 210 static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
Chris@4 211 {
Chris@4 212 int ret;
Chris@4 213 ret = fclose((FILE *)stream);
Chris@4 214 return ret;
Chris@4 215 }
Chris@4 216
Chris@4 217 static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
Chris@4 218 {
Chris@4 219 int ret;
Chris@4 220 ret = ferror((FILE *)stream);
Chris@4 221 return ret;
Chris@4 222 }
Chris@4 223
Chris@4 224 void fill_fopen_filefunc (pzlib_filefunc_def)
Chris@4 225 zlib_filefunc_def* pzlib_filefunc_def;
Chris@4 226 {
Chris@4 227 pzlib_filefunc_def->zopen_file = fopen_file_func;
Chris@4 228 pzlib_filefunc_def->zread_file = fread_file_func;
Chris@4 229 pzlib_filefunc_def->zwrite_file = fwrite_file_func;
Chris@4 230 pzlib_filefunc_def->ztell_file = ftell_file_func;
Chris@4 231 pzlib_filefunc_def->zseek_file = fseek_file_func;
Chris@4 232 pzlib_filefunc_def->zclose_file = fclose_file_func;
Chris@4 233 pzlib_filefunc_def->zerror_file = ferror_file_func;
Chris@4 234 pzlib_filefunc_def->opaque = NULL;
Chris@4 235 }
Chris@4 236
Chris@4 237 void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def)
Chris@4 238 {
Chris@4 239 pzlib_filefunc_def->zopen64_file = fopen64_file_func;
Chris@4 240 pzlib_filefunc_def->zread_file = fread_file_func;
Chris@4 241 pzlib_filefunc_def->zwrite_file = fwrite_file_func;
Chris@4 242 pzlib_filefunc_def->ztell64_file = ftell64_file_func;
Chris@4 243 pzlib_filefunc_def->zseek64_file = fseek64_file_func;
Chris@4 244 pzlib_filefunc_def->zclose_file = fclose_file_func;
Chris@4 245 pzlib_filefunc_def->zerror_file = ferror_file_func;
Chris@4 246 pzlib_filefunc_def->opaque = NULL;
Chris@4 247 }