Lines Matching refs:zs

173     ZSTD_seekable* zs = malloc(sizeof(ZSTD_seekable));  in ZSTD_seekable_create()  local
175 if (zs == NULL) return NULL; in ZSTD_seekable_create()
178 memset(zs, 0, sizeof(*zs)); in ZSTD_seekable_create()
180 zs->dstream = ZSTD_createDStream(); in ZSTD_seekable_create()
181 if (zs->dstream == NULL) { in ZSTD_seekable_create()
182 free(zs); in ZSTD_seekable_create()
186 return zs; in ZSTD_seekable_create()
189 size_t ZSTD_seekable_free(ZSTD_seekable* zs) in ZSTD_seekable_free() argument
191 if (zs == NULL) return 0; /* support free on null */ in ZSTD_seekable_free()
192 ZSTD_freeDStream(zs->dstream); in ZSTD_seekable_free()
193 free(zs->seekTable.entries); in ZSTD_seekable_free()
194 free(zs); in ZSTD_seekable_free()
203 U32 ZSTD_seekable_offsetToFrameIndex(ZSTD_seekable* const zs, unsigned long long pos) in ZSTD_seekable_offsetToFrameIndex() argument
206 U32 hi = zs->seekTable.tableLen; in ZSTD_seekable_offsetToFrameIndex()
208 if (pos >= zs->seekTable.entries[zs->seekTable.tableLen].dOffset) { in ZSTD_seekable_offsetToFrameIndex()
209 return zs->seekTable.tableLen; in ZSTD_seekable_offsetToFrameIndex()
214 if (zs->seekTable.entries[mid].dOffset <= pos) { in ZSTD_seekable_offsetToFrameIndex()
223 U32 ZSTD_seekable_getNumFrames(ZSTD_seekable* const zs) in ZSTD_seekable_getNumFrames() argument
225 return zs->seekTable.tableLen; in ZSTD_seekable_getNumFrames()
228 unsigned long long ZSTD_seekable_getFrameCompressedOffset(ZSTD_seekable* const zs, U32 frameIndex) in ZSTD_seekable_getFrameCompressedOffset() argument
230 if (frameIndex >= zs->seekTable.tableLen) return ZSTD_SEEKABLE_FRAMEINDEX_TOOLARGE; in ZSTD_seekable_getFrameCompressedOffset()
231 return zs->seekTable.entries[frameIndex].cOffset; in ZSTD_seekable_getFrameCompressedOffset()
234 unsigned long long ZSTD_seekable_getFrameDecompressedOffset(ZSTD_seekable* const zs, U32 frameIndex) in ZSTD_seekable_getFrameDecompressedOffset() argument
236 if (frameIndex >= zs->seekTable.tableLen) return ZSTD_SEEKABLE_FRAMEINDEX_TOOLARGE; in ZSTD_seekable_getFrameDecompressedOffset()
237 return zs->seekTable.entries[frameIndex].dOffset; in ZSTD_seekable_getFrameDecompressedOffset()
240 size_t ZSTD_seekable_getFrameCompressedSize(ZSTD_seekable* const zs, U32 frameIndex) in ZSTD_seekable_getFrameCompressedSize() argument
242 if (frameIndex >= zs->seekTable.tableLen) return ERROR(frameIndex_tooLarge); in ZSTD_seekable_getFrameCompressedSize()
243 return zs->seekTable.entries[frameIndex + 1].cOffset - in ZSTD_seekable_getFrameCompressedSize()
244 zs->seekTable.entries[frameIndex].cOffset; in ZSTD_seekable_getFrameCompressedSize()
247 size_t ZSTD_seekable_getFrameDecompressedSize(ZSTD_seekable* const zs, U32 frameIndex) in ZSTD_seekable_getFrameDecompressedSize() argument
249 if (frameIndex > zs->seekTable.tableLen) return ERROR(frameIndex_tooLarge); in ZSTD_seekable_getFrameDecompressedSize()
250 return zs->seekTable.entries[frameIndex + 1].dOffset - in ZSTD_seekable_getFrameDecompressedSize()
251 zs->seekTable.entries[frameIndex].dOffset; in ZSTD_seekable_getFrameDecompressedSize()
254 static size_t ZSTD_seekable_loadSeekTable(ZSTD_seekable* zs) in ZSTD_seekable_loadSeekTable() argument
257 ZSTD_seekable_customFile src = zs->src; in ZSTD_seekable_loadSeekTable()
260 CHECK_IO(src.read(src.opaque, zs->inBuff, ZSTD_seekTableFooterSize)); in ZSTD_seekable_loadSeekTable()
262 if (MEM_readLE32(zs->inBuff + 5) != ZSTD_SEEKABLE_MAGICNUMBER) { in ZSTD_seekable_loadSeekTable()
266 { BYTE const sfd = zs->inBuff[4]; in ZSTD_seekable_loadSeekTable()
275 { U32 const numFrames = MEM_readLE32(zs->inBuff); in ZSTD_seekable_loadSeekTable()
285 CHECK_IO(src.read(src.opaque, zs->inBuff, toRead)); in ZSTD_seekable_loadSeekTable()
290 if (MEM_readLE32(zs->inBuff) != (ZSTD_MAGIC_SKIPPABLE_START | 0xE)) { in ZSTD_seekable_loadSeekTable()
293 if (MEM_readLE32(zs->inBuff+4) + ZSTD_skippableHeaderSize != frameSize) { in ZSTD_seekable_loadSeekTable()
318 … memmove(zs->inBuff, zs->inBuff + pos, offset); /* move any data we haven't read yet */ in ZSTD_seekable_loadSeekTable()
319 CHECK_IO(src.read(src.opaque, zs->inBuff+offset, toRead)); in ZSTD_seekable_loadSeekTable()
326 cOffset += MEM_readLE32(zs->inBuff + pos); in ZSTD_seekable_loadSeekTable()
328 dOffset += MEM_readLE32(zs->inBuff + pos); in ZSTD_seekable_loadSeekTable()
331 entries[idx].checksum = MEM_readLE32(zs->inBuff + pos); in ZSTD_seekable_loadSeekTable()
338 zs->seekTable.entries = entries; in ZSTD_seekable_loadSeekTable()
339 zs->seekTable.tableLen = numFrames; in ZSTD_seekable_loadSeekTable()
340 zs->seekTable.checksumFlag = checksumFlag; in ZSTD_seekable_loadSeekTable()
346 size_t ZSTD_seekable_initBuff(ZSTD_seekable* zs, const void* src, size_t srcSize) in ZSTD_seekable_initBuff() argument
348 zs->buffWrapper = (buffWrapper_t){src, srcSize, 0}; in ZSTD_seekable_initBuff()
349 { ZSTD_seekable_customFile srcFile = {&zs->buffWrapper, in ZSTD_seekable_initBuff()
352 return ZSTD_seekable_initAdvanced(zs, srcFile); } in ZSTD_seekable_initBuff()
355 size_t ZSTD_seekable_initFile(ZSTD_seekable* zs, FILE* src) in ZSTD_seekable_initFile() argument
359 return ZSTD_seekable_initAdvanced(zs, srcFile); in ZSTD_seekable_initFile()
362 size_t ZSTD_seekable_initAdvanced(ZSTD_seekable* zs, ZSTD_seekable_customFile src) in ZSTD_seekable_initAdvanced() argument
364 zs->src = src; in ZSTD_seekable_initAdvanced()
366 { const size_t seekTableInit = ZSTD_seekable_loadSeekTable(zs); in ZSTD_seekable_initAdvanced()
369 zs->decompressedOffset = (U64)-1; in ZSTD_seekable_initAdvanced()
370 zs->curFrame = (U32)-1; in ZSTD_seekable_initAdvanced()
372 { const size_t dstreamInit = ZSTD_initDStream(zs->dstream); in ZSTD_seekable_initAdvanced()
377 size_t ZSTD_seekable_decompress(ZSTD_seekable* zs, void* dst, size_t len, unsigned long long offset) in ZSTD_seekable_decompress() argument
379 U32 targetFrame = ZSTD_seekable_offsetToFrameIndex(zs, offset); in ZSTD_seekable_decompress()
382 if (targetFrame != zs->curFrame || offset != zs->decompressedOffset) { in ZSTD_seekable_decompress()
383 zs->decompressedOffset = zs->seekTable.entries[targetFrame].dOffset; in ZSTD_seekable_decompress()
384 zs->curFrame = targetFrame; in ZSTD_seekable_decompress()
386 CHECK_IO(zs->src.seek(zs->src.opaque, in ZSTD_seekable_decompress()
387 zs->seekTable.entries[targetFrame].cOffset, in ZSTD_seekable_decompress()
389 zs->in = (ZSTD_inBuffer){zs->inBuff, 0, 0}; in ZSTD_seekable_decompress()
390 XXH64_reset(&zs->xxhState, 0); in ZSTD_seekable_decompress()
391 ZSTD_resetDStream(zs->dstream); in ZSTD_seekable_decompress()
394 while (zs->decompressedOffset < offset + len) { in ZSTD_seekable_decompress()
398 if (zs->decompressedOffset < offset) { in ZSTD_seekable_decompress()
400 …outTmp = (ZSTD_outBuffer){zs->outBuff, MIN(SEEKABLE_BUFF_SIZE, offset - zs->decompressedOffset), 0… in ZSTD_seekable_decompress()
402 outTmp = (ZSTD_outBuffer){dst, len, zs->decompressedOffset - offset}; in ZSTD_seekable_decompress()
406 toRead = ZSTD_decompressStream(zs->dstream, &outTmp, &zs->in); in ZSTD_seekable_decompress()
411 if (zs->seekTable.checksumFlag) { in ZSTD_seekable_decompress()
412 XXH64_update(&zs->xxhState, (BYTE*)outTmp.dst + prevOutPos, in ZSTD_seekable_decompress()
415 zs->decompressedOffset += outTmp.pos - prevOutPos; in ZSTD_seekable_decompress()
421 if (zs->seekTable.checksumFlag && in ZSTD_seekable_decompress()
422 (XXH64_digest(&zs->xxhState) & 0xFFFFFFFFU) != in ZSTD_seekable_decompress()
423 zs->seekTable.entries[targetFrame].checksum) { in ZSTD_seekable_decompress()
427 if (zs->decompressedOffset < offset + len) { in ZSTD_seekable_decompress()
429 targetFrame = ZSTD_seekable_offsetToFrameIndex(zs, zs->decompressedOffset); in ZSTD_seekable_decompress()
435 if (zs->in.pos == zs->in.size) { in ZSTD_seekable_decompress()
437 CHECK_IO(zs->src.read(zs->src.opaque, zs->inBuff, toRead)); in ZSTD_seekable_decompress()
438 zs->in.size = toRead; in ZSTD_seekable_decompress()
439 zs->in.pos = 0; in ZSTD_seekable_decompress()
442 } while (zs->decompressedOffset != offset + len); in ZSTD_seekable_decompress()
447 size_t ZSTD_seekable_decompressFrame(ZSTD_seekable* zs, void* dst, size_t dstSize, U32 frameIndex) in ZSTD_seekable_decompressFrame() argument
449 if (frameIndex >= zs->seekTable.tableLen) { in ZSTD_seekable_decompressFrame()
455 zs->seekTable.entries[frameIndex + 1].dOffset - in ZSTD_seekable_decompressFrame()
456 zs->seekTable.entries[frameIndex].dOffset; in ZSTD_seekable_decompressFrame()
461 zs, dst, decompressedSize, in ZSTD_seekable_decompressFrame()
462 zs->seekTable.entries[frameIndex].dOffset); in ZSTD_seekable_decompressFrame()