1
/* ioapi.c -- IO base function header for compress/uncompress .zip
2
files using zlib + zip or unzip API
4
Version 1.01e, February 12th, 2005
6
Copyright (C) 1998-2005 Gilles Vollant
8
Modified by Sergey A. Tachenov to integrate with Qt.
17
#include "quazip_global.h"
21
/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
35
voidpf ZCALLBACK qiodevice_open_file_func (
40
QIODevice *iodevice = reinterpret_cast<QIODevice*>(file);
41
if(iodevice->isSequential())
43
if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
44
iodevice->open(QIODevice::ReadOnly);
46
if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
47
iodevice->open(QIODevice::ReadWrite);
49
if (mode & ZLIB_FILEFUNC_MODE_CREATE)
50
iodevice->open(QIODevice::WriteOnly);
52
if(iodevice->isOpen())
59
uLong ZCALLBACK qiodevice_read_file_func (
66
ret = (uLong)((QIODevice*)stream)->read((char*)buf,size);
71
uLong ZCALLBACK qiodevice_write_file_func (
78
ret = (uLong)((QIODevice*)stream)->write((char*)buf,size);
82
uLong ZCALLBACK qiodevice_tell_file_func (
87
ret = ((QIODevice*)stream)->pos();
91
int ZCALLBACK qiodevice_seek_file_func (
97
uLong qiodevice_seek_result=0;
101
case ZLIB_FILEFUNC_SEEK_CUR :
102
qiodevice_seek_result = ((QIODevice*)stream)->pos() + offset;
104
case ZLIB_FILEFUNC_SEEK_END :
105
qiodevice_seek_result = ((QIODevice*)stream)->size() - offset;
107
case ZLIB_FILEFUNC_SEEK_SET :
108
qiodevice_seek_result = offset;
112
ret = !((QIODevice*)stream)->seek(qiodevice_seek_result);
116
int ZCALLBACK qiodevice_close_file_func (
117
voidpf opaque UNUSED,
120
((QIODevice*)stream)->close();
124
int ZCALLBACK qiodevice_error_file_func (
125
voidpf opaque UNUSED,
128
return !((QIODevice*)stream)->errorString().isEmpty();
131
void fill_qiodevice_filefunc (
132
zlib_filefunc_def* pzlib_filefunc_def)
134
pzlib_filefunc_def->zopen_file = qiodevice_open_file_func;
135
pzlib_filefunc_def->zread_file = qiodevice_read_file_func;
136
pzlib_filefunc_def->zwrite_file = qiodevice_write_file_func;
137
pzlib_filefunc_def->ztell_file = qiodevice_tell_file_func;
138
pzlib_filefunc_def->zseek_file = qiodevice_seek_file_func;
139
pzlib_filefunc_def->zclose_file = qiodevice_close_file_func;
140
pzlib_filefunc_def->zerror_file = qiodevice_error_file_func;
141
pzlib_filefunc_def->opaque = NULL;