/** * Decompresses one stream to another. * * @returns Exit code. * @param phVfsSrc The input stream. Set to NIL if closed. * @param pOpts The options. * @param phVfsDst The output stream. Set to NIL if closed. */ static RTEXITCODE gzipDecompressFile(PRTVFSIOSTREAM phVfsSrc, PCRTGZIPCMDOPTS pOpts, PRTVFSIOSTREAM phVfsDst) { RTEXITCODE rcExit = gzipSetupDecompressor(phVfsSrc); if (rcExit == RTEXITCODE_SUCCESS) rcExit = gzipPushFlushAndClose(phVfsSrc, pOpts, phVfsDst); return rcExit; }
/** * For testing the archive (todo). * * @returns Exit code. * @param phVfsSrc The input stream. Set to NIL if closed. * @param pOpts The options. */ static RTEXITCODE gzipTestFile(PRTVFSIOSTREAM phVfsSrc, PCRTGZIPCMDOPTS pOpts) { /* * Read the whole stream. */ RTEXITCODE rcExit = gzipSetupDecompressor(phVfsSrc); if (rcExit == RTEXITCODE_SUCCESS) { for (;;) { uint8_t abBuf[_64K]; size_t cbRead; int rc = RTVfsIoStrmRead(*phVfsSrc, abBuf, sizeof(abBuf), true /*fBlocking*/, &cbRead); if (RT_FAILURE(rc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTVfsIoStrmRead failed: %Rrc", rc); if (rc == VINF_EOF && cbRead == 0) return RTEXITCODE_SUCCESS; } } return rcExit; }