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