| 55 | } |
| 56 | |
| 57 | void MiniZStreamWrapper::initialize(CompressedFileInfo& fileInfo) { |
| 58 | close(); |
| 59 | this->file = &fileInfo; |
| 60 | mzStreamPtr = std::make_unique<miniz::mz_stream>(); |
| 61 | memset(mzStreamPtr.get(), 0, sizeof(miniz::mz_stream)); |
| 62 | uint8_t gzipHdr[GZipFileSystem::GZIP_HEADER_MINSIZE]; |
| 63 | |
| 64 | idx_t dataStart = GZipFileSystem::GZIP_HEADER_MINSIZE; |
| 65 | auto numBytesRead = |
| 66 | fileInfo.childFileInfo->readFile(gzipHdr, GZipFileSystem::GZIP_HEADER_MINSIZE); |
| 67 | verifyGZIPHeader(gzipHdr, numBytesRead); |
| 68 | if (gzipHdr[3] & GZipFileSystem::GZIP_FLAG_EXTRA) { |
| 69 | uint8_t gzipXLen[2]; |
| 70 | fileInfo.childFileInfo->seek(dataStart, SEEK_SET); |
| 71 | fileInfo.childFileInfo->readFile(gzipXLen, 2); |
| 72 | auto xlen = (uint8_t)gzipXLen[0] | (uint8_t)gzipXLen[1] << 8; |
| 73 | dataStart += xlen + 2; |
| 74 | } |
| 75 | if (gzipHdr[3] & GZipFileSystem::GZIP_FLAG_NAME) { |
| 76 | fileInfo.childFileInfo->seek(dataStart, SEEK_SET); |
| 77 | dataStart += consumeStr(*fileInfo.childFileInfo); |
| 78 | } |
| 79 | fileInfo.childFileInfo->seek(dataStart, SEEK_SET); |
| 80 | auto ret = miniz::mz_inflateInit2(mzStreamPtr.get(), -MZ_DEFAULT_WINDOW_BITS); |
| 81 | // LCOV_EXCL_START |
| 82 | if (ret != miniz::MZ_OK) { |
| 83 | throw InternalException("Failed to initialize miniz"); |
| 84 | } |
| 85 | // LCOV_EXCL_STOP |
| 86 | } |
| 87 | |
| 88 | bool MiniZStreamWrapper::read(StreamData& sd) { |
| 89 | if (sd.refresh) { |
nothing calls this directly
no test coverage detected