size_t LLHTTPAssetRequest::readCompressedData(void* data, size_t size) { mZStream.next_out = (Bytef*)data; mZStream.avail_out = size; while (mZStream.avail_out > 0) { if (mZStream.avail_in == 0 && !mZInputExhausted) { S32 to_read = llmin(COMPRESSED_INPUT_BUFFER_SIZE, (S32)(mVFile->getSize() - mVFile->tell())); mVFile->read((U8*)mZInputBuffer, to_read); /*Flawfinder: ignore*/ mZStream.next_in = (Bytef*)mZInputBuffer; mZStream.avail_in = mVFile->getLastBytesRead(); mZInputExhausted = mZStream.avail_in == 0; } int r = deflate(&mZStream, mZInputExhausted ? Z_FINISH : Z_NO_FLUSH); if (r == Z_STREAM_END) { break; } } return size - mZStream.avail_out; }
int vfs_seek(void *datasource, ogg_int64_t offset, int whence) { LLVFile *file = (LLVFile *)datasource; // vfs has 31-bit files if (offset > S32_MAX) { return -1; } S32 origin; switch (whence) { case SEEK_SET: origin = 0; break; case SEEK_END: origin = file->getSize(); break; case SEEK_CUR: origin = -1; break; default: llerrs << "Invalid whence argument to vfs_seek" << llendl; return -1; } if (file->seek((S32)offset, origin)) { return 0; } else { return -1; } }
size_t vfs_read(void *ptr, size_t size, size_t nmemb, void *datasource) { LLVFile *file = (LLVFile *)datasource; if (size > 0 && file->read((U8*)ptr, size * nmemb)) /*Flawfinder: ignore*/ { S32 read = file->getLastBytesRead(); return read / size; /*Flawfinder: ignore*/ } else { return 0; } }
long vfs_tell (void *datasource) { LLVFile *file = (LLVFile *)datasource; return file->tell(); }