Lines Matching refs:zs

176     ZSTD_seekable* zs = malloc(sizeof(ZSTD_seekable));  in ZSTD_seekable_create()  local
178 if (zs == NULL) return NULL; in ZSTD_seekable_create()
181 memset(zs, 0, sizeof(*zs)); in ZSTD_seekable_create()
183 zs->dstream = ZSTD_createDStream(); in ZSTD_seekable_create()
184 if (zs->dstream == NULL) { in ZSTD_seekable_create()
185 free(zs); in ZSTD_seekable_create()
189 return zs; in ZSTD_seekable_create()
192 size_t ZSTD_seekable_free(ZSTD_seekable* zs) in ZSTD_seekable_free() argument
194 if (zs == NULL) return 0; /* support free on null */ in ZSTD_seekable_free()
195 ZSTD_freeDStream(zs->dstream); in ZSTD_seekable_free()
196 free(zs->seekTable.entries); in ZSTD_seekable_free()
197 free(zs); in ZSTD_seekable_free()
206 unsigned ZSTD_seekable_offsetToFrameIndex(ZSTD_seekable* const zs, unsigned long long pos) in ZSTD_seekable_offsetToFrameIndex() argument
209 U32 hi = (U32)zs->seekTable.tableLen; in ZSTD_seekable_offsetToFrameIndex()
210 assert(zs->seekTable.tableLen <= UINT_MAX); in ZSTD_seekable_offsetToFrameIndex()
212 if (pos >= zs->seekTable.entries[zs->seekTable.tableLen].dOffset) { in ZSTD_seekable_offsetToFrameIndex()
213 return (U32)zs->seekTable.tableLen; in ZSTD_seekable_offsetToFrameIndex()
218 if (zs->seekTable.entries[mid].dOffset <= pos) { in ZSTD_seekable_offsetToFrameIndex()
227 unsigned ZSTD_seekable_getNumFrames(ZSTD_seekable* const zs) in ZSTD_seekable_getNumFrames() argument
229 assert(zs->seekTable.tableLen <= UINT_MAX); in ZSTD_seekable_getNumFrames()
230 return (unsigned)zs->seekTable.tableLen; in ZSTD_seekable_getNumFrames()
233 unsigned long long ZSTD_seekable_getFrameCompressedOffset(ZSTD_seekable* const zs, unsigned frameIn… in ZSTD_seekable_getFrameCompressedOffset() argument
235 if (frameIndex >= zs->seekTable.tableLen) return ZSTD_SEEKABLE_FRAMEINDEX_TOOLARGE; in ZSTD_seekable_getFrameCompressedOffset()
236 return zs->seekTable.entries[frameIndex].cOffset; in ZSTD_seekable_getFrameCompressedOffset()
239 unsigned long long ZSTD_seekable_getFrameDecompressedOffset(ZSTD_seekable* const zs, unsigned frame… in ZSTD_seekable_getFrameDecompressedOffset() argument
241 if (frameIndex >= zs->seekTable.tableLen) return ZSTD_SEEKABLE_FRAMEINDEX_TOOLARGE; in ZSTD_seekable_getFrameDecompressedOffset()
242 return zs->seekTable.entries[frameIndex].dOffset; in ZSTD_seekable_getFrameDecompressedOffset()
245 size_t ZSTD_seekable_getFrameCompressedSize(ZSTD_seekable* const zs, unsigned frameIndex) in ZSTD_seekable_getFrameCompressedSize() argument
247 if (frameIndex >= zs->seekTable.tableLen) return ERROR(frameIndex_tooLarge); in ZSTD_seekable_getFrameCompressedSize()
248 return zs->seekTable.entries[frameIndex + 1].cOffset - in ZSTD_seekable_getFrameCompressedSize()
249 zs->seekTable.entries[frameIndex].cOffset; in ZSTD_seekable_getFrameCompressedSize()
252 size_t ZSTD_seekable_getFrameDecompressedSize(ZSTD_seekable* const zs, unsigned frameIndex) in ZSTD_seekable_getFrameDecompressedSize() argument
254 if (frameIndex > zs->seekTable.tableLen) return ERROR(frameIndex_tooLarge); in ZSTD_seekable_getFrameDecompressedSize()
255 return zs->seekTable.entries[frameIndex + 1].dOffset - in ZSTD_seekable_getFrameDecompressedSize()
256 zs->seekTable.entries[frameIndex].dOffset; in ZSTD_seekable_getFrameDecompressedSize()
259 static size_t ZSTD_seekable_loadSeekTable(ZSTD_seekable* zs) in ZSTD_seekable_loadSeekTable() argument
262 ZSTD_seekable_customFile src = zs->src; in ZSTD_seekable_loadSeekTable()
265 CHECK_IO(src.read(src.opaque, zs->inBuff, ZSTD_seekTableFooterSize)); in ZSTD_seekable_loadSeekTable()
267 if (MEM_readLE32(zs->inBuff + 5) != ZSTD_SEEKABLE_MAGICNUMBER) { in ZSTD_seekable_loadSeekTable()
271 { BYTE const sfd = zs->inBuff[4]; in ZSTD_seekable_loadSeekTable()
280 { U32 const numFrames = MEM_readLE32(zs->inBuff); in ZSTD_seekable_loadSeekTable()
290 CHECK_IO(src.read(src.opaque, zs->inBuff, toRead)); in ZSTD_seekable_loadSeekTable()
295 if (MEM_readLE32(zs->inBuff) != (ZSTD_MAGIC_SKIPPABLE_START | 0xE)) { in ZSTD_seekable_loadSeekTable()
298 if (MEM_readLE32(zs->inBuff+4) + ZSTD_SKIPPABLEHEADERSIZE != frameSize) { in ZSTD_seekable_loadSeekTable()
323 … memmove(zs->inBuff, zs->inBuff + pos, offset); /* move any data we haven't read yet */ in ZSTD_seekable_loadSeekTable()
324 CHECK_IO(src.read(src.opaque, zs->inBuff+offset, toRead)); in ZSTD_seekable_loadSeekTable()
331 cOffset += MEM_readLE32(zs->inBuff + pos); in ZSTD_seekable_loadSeekTable()
333 dOffset += MEM_readLE32(zs->inBuff + pos); in ZSTD_seekable_loadSeekTable()
336 entries[idx].checksum = MEM_readLE32(zs->inBuff + pos); in ZSTD_seekable_loadSeekTable()
343 zs->seekTable.entries = entries; in ZSTD_seekable_loadSeekTable()
344 zs->seekTable.tableLen = numFrames; in ZSTD_seekable_loadSeekTable()
345 zs->seekTable.checksumFlag = checksumFlag; in ZSTD_seekable_loadSeekTable()
351 size_t ZSTD_seekable_initBuff(ZSTD_seekable* zs, const void* src, size_t srcSize) in ZSTD_seekable_initBuff() argument
353 zs->buffWrapper = (buffWrapper_t){src, srcSize, 0}; in ZSTD_seekable_initBuff()
354 { ZSTD_seekable_customFile srcFile = {&zs->buffWrapper, in ZSTD_seekable_initBuff()
357 return ZSTD_seekable_initAdvanced(zs, srcFile); } in ZSTD_seekable_initBuff()
360 size_t ZSTD_seekable_initFile(ZSTD_seekable* zs, FILE* src) in ZSTD_seekable_initFile() argument
364 return ZSTD_seekable_initAdvanced(zs, srcFile); in ZSTD_seekable_initFile()
367 size_t ZSTD_seekable_initAdvanced(ZSTD_seekable* zs, ZSTD_seekable_customFile src) in ZSTD_seekable_initAdvanced() argument
369 zs->src = src; in ZSTD_seekable_initAdvanced()
371 { const size_t seekTableInit = ZSTD_seekable_loadSeekTable(zs); in ZSTD_seekable_initAdvanced()
374 zs->decompressedOffset = (U64)-1; in ZSTD_seekable_initAdvanced()
375 zs->curFrame = (U32)-1; in ZSTD_seekable_initAdvanced()
377 { const size_t dstreamInit = ZSTD_initDStream(zs->dstream); in ZSTD_seekable_initAdvanced()
382 size_t ZSTD_seekable_decompress(ZSTD_seekable* zs, void* dst, size_t len, unsigned long long offset) in ZSTD_seekable_decompress() argument
384 U32 targetFrame = ZSTD_seekable_offsetToFrameIndex(zs, offset); in ZSTD_seekable_decompress()
388 if (targetFrame != zs->curFrame || offset != zs->decompressedOffset) { in ZSTD_seekable_decompress()
389 zs->decompressedOffset = zs->seekTable.entries[targetFrame].dOffset; in ZSTD_seekable_decompress()
390 zs->curFrame = targetFrame; in ZSTD_seekable_decompress()
392 CHECK_IO(zs->src.seek(zs->src.opaque, in ZSTD_seekable_decompress()
393 zs->seekTable.entries[targetFrame].cOffset, in ZSTD_seekable_decompress()
395 zs->in = (ZSTD_inBuffer){zs->inBuff, 0, 0}; in ZSTD_seekable_decompress()
396 XXH64_reset(&zs->xxhState, 0); in ZSTD_seekable_decompress()
397 ZSTD_resetDStream(zs->dstream); in ZSTD_seekable_decompress()
400 while (zs->decompressedOffset < offset + len) { in ZSTD_seekable_decompress()
405 if (zs->decompressedOffset < offset) { in ZSTD_seekable_decompress()
407 …outTmp = (ZSTD_outBuffer){zs->outBuff, MIN(SEEKABLE_BUFF_SIZE, offset - zs->decompressedOffset), 0… in ZSTD_seekable_decompress()
409 outTmp = (ZSTD_outBuffer){dst, len, zs->decompressedOffset - offset}; in ZSTD_seekable_decompress()
413 toRead = ZSTD_decompressStream(zs->dstream, &outTmp, &zs->in); in ZSTD_seekable_decompress()
418 if (zs->seekTable.checksumFlag) { in ZSTD_seekable_decompress()
419 XXH64_update(&zs->xxhState, (BYTE*)outTmp.dst + prevOutPos, in ZSTD_seekable_decompress()
430 zs->decompressedOffset += forwardProgress; in ZSTD_seekable_decompress()
436 if (zs->seekTable.checksumFlag && in ZSTD_seekable_decompress()
437 (XXH64_digest(&zs->xxhState) & 0xFFFFFFFFU) != in ZSTD_seekable_decompress()
438 zs->seekTable.entries[targetFrame].checksum) { in ZSTD_seekable_decompress()
442 if (zs->decompressedOffset < offset + len) { in ZSTD_seekable_decompress()
444 targetFrame = ZSTD_seekable_offsetToFrameIndex(zs, zs->decompressedOffset); in ZSTD_seekable_decompress()
450 if (zs->in.pos == zs->in.size) { in ZSTD_seekable_decompress()
452 CHECK_IO(zs->src.read(zs->src.opaque, zs->inBuff, toRead)); in ZSTD_seekable_decompress()
453 zs->in.size = toRead; in ZSTD_seekable_decompress()
454 zs->in.pos = 0; in ZSTD_seekable_decompress()
457 } while (zs->decompressedOffset != offset + len); in ZSTD_seekable_decompress()
462 size_t ZSTD_seekable_decompressFrame(ZSTD_seekable* zs, void* dst, size_t dstSize, unsigned frameIn… in ZSTD_seekable_decompressFrame() argument
464 if (frameIndex >= zs->seekTable.tableLen) { in ZSTD_seekable_decompressFrame()
470 zs->seekTable.entries[frameIndex + 1].dOffset - in ZSTD_seekable_decompressFrame()
471 zs->seekTable.entries[frameIndex].dOffset; in ZSTD_seekable_decompressFrame()
476 zs, dst, decompressedSize, in ZSTD_seekable_decompressFrame()
477 zs->seekTable.entries[frameIndex].dOffset); in ZSTD_seekable_decompressFrame()