1381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes/* ioapi.h -- IO base function header for compress/uncompress .zip
2381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
39e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
4381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
59e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
6381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes         Modifications for Zip64 support
7381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
89e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
9381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes         For more info read MiniZip_info.txt
109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
11381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes*/
129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
13ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#if defined(_WIN32) && (!(defined(_CRT_SECURE_NO_WARNINGS)))
14381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        #define _CRT_SECURE_NO_WARNINGS
159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#endif
169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
17ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#if defined(__APPLE__) || defined(IOAPI_NO_64)
18ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
19ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
20ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#define FTELLO_FUNC(stream) ftello(stream)
21ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)
22ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#else
23ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
24ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#define FTELLO_FUNC(stream) ftello64(stream)
25ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)
26ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes#endif
27ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes
28ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes
29381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes#include "ioapi.h"
309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
31381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesvoidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)
32381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes{
33381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    if (pfilefunc->zfile_func64.zopen64_file != NULL)
34381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
35381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    else
36381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    {
37381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);
38381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    }
39381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes}
409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
41381716e9396b55b1adb8235b020c37344f60ab07Elliott Hugheslong call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)
42381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes{
43381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    if (pfilefunc->zfile_func64.zseek64_file != NULL)
44381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
45381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    else
46381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    {
47381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        uLong offsetTruncated = (uLong)offset;
48381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        if (offsetTruncated != offset)
49381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes            return -1;
50381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        else
51381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes            return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);
52381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    }
53381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes}
549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
55381716e9396b55b1adb8235b020c37344f60ab07Elliott HughesZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)
56381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes{
57381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    if (pfilefunc->zfile_func64.zseek64_file != NULL)
58381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
59381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    else
60381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    {
61381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
62ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes        if ((tell_uLong) == MAXU32)
63381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes            return (ZPOS64_T)-1;
64381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        else
65381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes            return tell_uLong;
66381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    }
67381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes}
689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
69381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesvoid fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)
70381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes{
71381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zfile_func64.zopen64_file = NULL;
72381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
73381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
74381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
75381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
76381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zfile_func64.ztell64_file = NULL;
77381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zfile_func64.zseek64_file = NULL;
78381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;
79381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
80381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;
81381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;
82381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;
83381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes}
849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
87381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic voidpf  ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));
88381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic uLong   ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
89381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic uLong   ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
90381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));
91381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic long    ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
92381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic int     ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
93381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic int     ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
95381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
96381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes{
97381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    FILE* file = NULL;
98381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    const char* mode_fopen = NULL;
99381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
100381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        mode_fopen = "rb";
101381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    else
102381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
103381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        mode_fopen = "r+b";
104381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    else
105381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    if (mode & ZLIB_FILEFUNC_MODE_CREATE)
106381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        mode_fopen = "wb";
1079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
108381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    if ((filename!=NULL) && (mode_fopen != NULL))
109381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        file = fopen(filename, mode_fopen);
110381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    return file;
111381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes}
1129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
113381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
1149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{
1159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    FILE* file = NULL;
1169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    const char* mode_fopen = NULL;
1179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
1189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project        mode_fopen = "rb";
1199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    else
1209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
1219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project        mode_fopen = "r+b";
1229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    else
1239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    if (mode & ZLIB_FILEFUNC_MODE_CREATE)
1249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project        mode_fopen = "wb";
1259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
1269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    if ((filename!=NULL) && (mode_fopen != NULL))
127ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes        file = FOPEN_FUNC((const char*)filename, mode_fopen);
1289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    return file;
1299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}
1309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
1319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
132381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
1339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{
1349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    uLong ret;
1359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
1369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    return ret;
1379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}
1389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
139381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
1409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{
1419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    uLong ret;
1429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
1439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    return ret;
1449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}
1459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
146381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
1479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{
1489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    long ret;
1499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    ret = ftell((FILE *)stream);
1509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    return ret;
1519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}
1529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
153381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes
154381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
155381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes{
156381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    ZPOS64_T ret;
157ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes    ret = FTELLO_FUNC((FILE *)stream);
158381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    return ret;
159381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes}
160381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes
161381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic long ZCALLBACK fseek_file_func (voidpf  opaque, voidpf stream, uLong offset, int origin)
1629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{
1639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    int fseek_origin=0;
1649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    long ret;
1659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    switch (origin)
1669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    {
1679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    case ZLIB_FILEFUNC_SEEK_CUR :
1689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project        fseek_origin = SEEK_CUR;
1699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project        break;
1709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    case ZLIB_FILEFUNC_SEEK_END :
1719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project        fseek_origin = SEEK_END;
1729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project        break;
1739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    case ZLIB_FILEFUNC_SEEK_SET :
1749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project        fseek_origin = SEEK_SET;
1759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project        break;
1769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    default: return -1;
1779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    }
1789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    ret = 0;
179381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    if (fseek((FILE *)stream, offset, fseek_origin) != 0)
180381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        ret = -1;
1819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    return ret;
1829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}
1839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
184381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic long ZCALLBACK fseek64_file_func (voidpf  opaque, voidpf stream, ZPOS64_T offset, int origin)
185381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes{
186381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    int fseek_origin=0;
187381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    long ret;
188381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    switch (origin)
189381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    {
190381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    case ZLIB_FILEFUNC_SEEK_CUR :
191381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        fseek_origin = SEEK_CUR;
192381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        break;
193381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    case ZLIB_FILEFUNC_SEEK_END :
194381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        fseek_origin = SEEK_END;
195381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        break;
196381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    case ZLIB_FILEFUNC_SEEK_SET :
197381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        fseek_origin = SEEK_SET;
198381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes        break;
199381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    default: return -1;
200381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    }
201381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    ret = 0;
202381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes
203ee9e11d0d4e3361533860bf04896abb86a291bfbElliott Hughes    if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
204381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes                        ret = -1;
205381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes
206381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    return ret;
207381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes}
208381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes
209381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes
210381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
2119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{
2129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    int ret;
2139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    ret = fclose((FILE *)stream);
2149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    return ret;
2159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}
2169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
217381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesstatic int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
2189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{
2199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    int ret;
2209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    ret = ferror((FILE *)stream);
2219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    return ret;
2229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}
2239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project
2249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid fill_fopen_filefunc (pzlib_filefunc_def)
2259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project  zlib_filefunc_def* pzlib_filefunc_def;
2269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{
2279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    pzlib_filefunc_def->zopen_file = fopen_file_func;
2289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    pzlib_filefunc_def->zread_file = fread_file_func;
2299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    pzlib_filefunc_def->zwrite_file = fwrite_file_func;
2309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    pzlib_filefunc_def->ztell_file = ftell_file_func;
2319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    pzlib_filefunc_def->zseek_file = fseek_file_func;
2329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    pzlib_filefunc_def->zclose_file = fclose_file_func;
2339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    pzlib_filefunc_def->zerror_file = ferror_file_func;
2349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project    pzlib_filefunc_def->opaque = NULL;
2359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}
236381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes
237381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughesvoid fill_fopen64_filefunc (zlib_filefunc64_def*  pzlib_filefunc_def)
238381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes{
239381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    pzlib_filefunc_def->zopen64_file = fopen64_file_func;
240381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    pzlib_filefunc_def->zread_file = fread_file_func;
241381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    pzlib_filefunc_def->zwrite_file = fwrite_file_func;
242381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    pzlib_filefunc_def->ztell64_file = ftell64_file_func;
243381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    pzlib_filefunc_def->zseek64_file = fseek64_file_func;
244381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    pzlib_filefunc_def->zclose_file = fclose_file_func;
245381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    pzlib_filefunc_def->zerror_file = ferror_file_func;
246381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes    pzlib_filefunc_def->opaque = NULL;
247381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes}
248