MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / readData

Method readData

lib/QuaZip/quazip/quaziodevice.cpp:218–277  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

216}
217
218qint64 QuaZIODevice::readData(char *data, qint64 maxSize)
219{
220 int read = 0;
221 while (read < maxSize) {
222 if (d->inBufPos == d->inBufSize) {
223 d->inBufPos = 0;
224 d->inBufSize = d->io->read(d->inBuf, QUAZIO_INBUFSIZE);
225 if (d->inBufSize == -1) {
226 d->inBufSize = 0;
227 setErrorString(d->io->errorString());
228 return -1;
229 }
230 if (d->inBufSize == 0)
231 break;
232 }
233 while (read < maxSize && d->inBufPos < d->inBufSize) {
234 d->zins.next_in = reinterpret_cast<Bytef *>(d->inBuf + d->inBufPos);
235 d->zins.avail_in = d->inBufSize - d->inBufPos;
236 d->zins.next_out = reinterpret_cast<Bytef *>(data + read);
237 d->zins.avail_out = static_cast<uInt>(maxSize - read); // hope it's less than 2GB
238 int more = 0;
239 switch (inflate(&d->zins, Z_SYNC_FLUSH)) {
240 case Z_OK:
241 read = reinterpret_cast<char *>(d->zins.next_out) - data;
242 d->inBufPos = reinterpret_cast<z_const char *>(d->zins.next_in) - d->inBuf;
243 break;
244 case Z_STREAM_END:
245 read = reinterpret_cast<char *>(d->zins.next_out) - data;
246 d->inBufPos = reinterpret_cast<z_const char *>(d->zins.next_in) - d->inBuf;
247 d->atEnd = true;
248 return read;
249 case Z_BUF_ERROR: // this should never happen, but just in case
250 if (!d->zBufError) {
251 qWarning("Z_BUF_ERROR detected with %d/%d in/out, weird",
252 d->zins.avail_in, d->zins.avail_out);
253 d->zBufError = true;
254 }
255 memmove(d->inBuf, d->inBuf + d->inBufPos, d->inBufSize - d->inBufPos);
256 d->inBufSize -= d->inBufPos;
257 d->inBufPos = 0;
258 more = d->io->read(d->inBuf + d->inBufSize, QUAZIO_INBUFSIZE - d->inBufSize);
259 if (more == -1) {
260 setErrorString(d->io->errorString());
261 return -1;
262 }
263 if (more == 0)
264 return read;
265 d->inBufSize += more;
266 break;
267 default:
268 setErrorString(QString::fromLocal8Bit(d->zins.msg));
269 return -1;
270 }
271 }
272 }
273#ifdef QUAZIP_ZIODEVICE_DEBUG_INPUT
274 indebug.write(data, read);
275#endif

Callers

nothing calls this directly

Calls 3

errorStringMethod · 0.80
readMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected