Lines Matching refs:zs

174     ZSTD_seekable* zs = malloc(sizeof(ZSTD_seekable));  in ZSTD_seekable_create()  local
176 if (zs == NULL) return NULL; in ZSTD_seekable_create()
179 memset(zs, 0, sizeof(*zs)); in ZSTD_seekable_create()
181 zs->dstream = ZSTD_createDStream(); in ZSTD_seekable_create()
182 if (zs->dstream == NULL) { in ZSTD_seekable_create()
183 free(zs); in ZSTD_seekable_create()
187 return zs; in ZSTD_seekable_create()
190 size_t ZSTD_seekable_free(ZSTD_seekable* zs) in ZSTD_seekable_free() argument
192 if (zs == NULL) return 0; /* support free on null */ in ZSTD_seekable_free()
193 ZSTD_freeDStream(zs->dstream); in ZSTD_seekable_free()
194 free(zs->seekTable.entries); in ZSTD_seekable_free()
195 free(zs); in ZSTD_seekable_free()
204 unsigned ZSTD_seekable_offsetToFrameIndex(ZSTD_seekable* const zs, unsigned long long pos) in ZSTD_seekable_offsetToFrameIndex() argument
207 U32 hi = (U32)zs->seekTable.tableLen; in ZSTD_seekable_offsetToFrameIndex()
208 assert(zs->seekTable.tableLen <= UINT_MAX); in ZSTD_seekable_offsetToFrameIndex()
210 if (pos >= zs->seekTable.entries[zs->seekTable.tableLen].dOffset) { in ZSTD_seekable_offsetToFrameIndex()
211 return (U32)zs->seekTable.tableLen; in ZSTD_seekable_offsetToFrameIndex()
216 if (zs->seekTable.entries[mid].dOffset <= pos) { in ZSTD_seekable_offsetToFrameIndex()
225 unsigned ZSTD_seekable_getNumFrames(ZSTD_seekable* const zs) in ZSTD_seekable_getNumFrames() argument
227 assert(zs->seekTable.tableLen <= UINT_MAX); in ZSTD_seekable_getNumFrames()
228 return (unsigned)zs->seekTable.tableLen; in ZSTD_seekable_getNumFrames()
231 unsigned long long ZSTD_seekable_getFrameCompressedOffset(ZSTD_seekable* const zs, unsigned frameIn… in ZSTD_seekable_getFrameCompressedOffset() argument
233 if (frameIndex >= zs->seekTable.tableLen) return ZSTD_SEEKABLE_FRAMEINDEX_TOOLARGE; in ZSTD_seekable_getFrameCompressedOffset()
234 return zs->seekTable.entries[frameIndex].cOffset; in ZSTD_seekable_getFrameCompressedOffset()
237 unsigned long long ZSTD_seekable_getFrameDecompressedOffset(ZSTD_seekable* const zs, unsigned frame… in ZSTD_seekable_getFrameDecompressedOffset() argument
239 if (frameIndex >= zs->seekTable.tableLen) return ZSTD_SEEKABLE_FRAMEINDEX_TOOLARGE; in ZSTD_seekable_getFrameDecompressedOffset()
240 return zs->seekTable.entries[frameIndex].dOffset; in ZSTD_seekable_getFrameDecompressedOffset()
243 size_t ZSTD_seekable_getFrameCompressedSize(ZSTD_seekable* const zs, unsigned frameIndex) in ZSTD_seekable_getFrameCompressedSize() argument
245 if (frameIndex >= zs->seekTable.tableLen) return ERROR(frameIndex_tooLarge); in ZSTD_seekable_getFrameCompressedSize()
246 return zs->seekTable.entries[frameIndex + 1].cOffset - in ZSTD_seekable_getFrameCompressedSize()
247 zs->seekTable.entries[frameIndex].cOffset; in ZSTD_seekable_getFrameCompressedSize()
250 size_t ZSTD_seekable_getFrameDecompressedSize(ZSTD_seekable* const zs, unsigned frameIndex) in ZSTD_seekable_getFrameDecompressedSize() argument
252 if (frameIndex > zs->seekTable.tableLen) return ERROR(frameIndex_tooLarge); in ZSTD_seekable_getFrameDecompressedSize()
253 return zs->seekTable.entries[frameIndex + 1].dOffset - in ZSTD_seekable_getFrameDecompressedSize()
254 zs->seekTable.entries[frameIndex].dOffset; in ZSTD_seekable_getFrameDecompressedSize()
257 static size_t ZSTD_seekable_loadSeekTable(ZSTD_seekable* zs) in ZSTD_seekable_loadSeekTable() argument
260 ZSTD_seekable_customFile src = zs->src; in ZSTD_seekable_loadSeekTable()
263 CHECK_IO(src.read(src.opaque, zs->inBuff, ZSTD_seekTableFooterSize)); in ZSTD_seekable_loadSeekTable()
265 if (MEM_readLE32(zs->inBuff + 5) != ZSTD_SEEKABLE_MAGICNUMBER) { in ZSTD_seekable_loadSeekTable()
269 { BYTE const sfd = zs->inBuff[4]; in ZSTD_seekable_loadSeekTable()
278 { U32 const numFrames = MEM_readLE32(zs->inBuff); in ZSTD_seekable_loadSeekTable()
288 CHECK_IO(src.read(src.opaque, zs->inBuff, toRead)); in ZSTD_seekable_loadSeekTable()
293 if (MEM_readLE32(zs->inBuff) != (ZSTD_MAGIC_SKIPPABLE_START | 0xE)) { in ZSTD_seekable_loadSeekTable()
296 if (MEM_readLE32(zs->inBuff+4) + ZSTD_SKIPPABLEHEADERSIZE != frameSize) { in ZSTD_seekable_loadSeekTable()
321 … memmove(zs->inBuff, zs->inBuff + pos, offset); /* move any data we haven't read yet */ in ZSTD_seekable_loadSeekTable()
322 CHECK_IO(src.read(src.opaque, zs->inBuff+offset, toRead)); in ZSTD_seekable_loadSeekTable()
329 cOffset += MEM_readLE32(zs->inBuff + pos); in ZSTD_seekable_loadSeekTable()
331 dOffset += MEM_readLE32(zs->inBuff + pos); in ZSTD_seekable_loadSeekTable()
334 entries[idx].checksum = MEM_readLE32(zs->inBuff + pos); in ZSTD_seekable_loadSeekTable()
341 zs->seekTable.entries = entries; in ZSTD_seekable_loadSeekTable()
342 zs->seekTable.tableLen = numFrames; in ZSTD_seekable_loadSeekTable()
343 zs->seekTable.checksumFlag = checksumFlag; in ZSTD_seekable_loadSeekTable()
349 size_t ZSTD_seekable_initBuff(ZSTD_seekable* zs, const void* src, size_t srcSize) in ZSTD_seekable_initBuff() argument
351 zs->buffWrapper = (buffWrapper_t){src, srcSize, 0}; in ZSTD_seekable_initBuff()
352 { ZSTD_seekable_customFile srcFile = {&zs->buffWrapper, in ZSTD_seekable_initBuff()
355 return ZSTD_seekable_initAdvanced(zs, srcFile); } in ZSTD_seekable_initBuff()
358 size_t ZSTD_seekable_initFile(ZSTD_seekable* zs, FILE* src) in ZSTD_seekable_initFile() argument
362 return ZSTD_seekable_initAdvanced(zs, srcFile); in ZSTD_seekable_initFile()
365 size_t ZSTD_seekable_initAdvanced(ZSTD_seekable* zs, ZSTD_seekable_customFile src) in ZSTD_seekable_initAdvanced() argument
367 zs->src = src; in ZSTD_seekable_initAdvanced()
369 { const size_t seekTableInit = ZSTD_seekable_loadSeekTable(zs); in ZSTD_seekable_initAdvanced()
372 zs->decompressedOffset = (U64)-1; in ZSTD_seekable_initAdvanced()
373 zs->curFrame = (U32)-1; in ZSTD_seekable_initAdvanced()
375 { const size_t dstreamInit = ZSTD_initDStream(zs->dstream); in ZSTD_seekable_initAdvanced()
380 size_t ZSTD_seekable_decompress(ZSTD_seekable* zs, void* dst, size_t len, unsigned long long offset) in ZSTD_seekable_decompress() argument
382 U32 targetFrame = ZSTD_seekable_offsetToFrameIndex(zs, offset); in ZSTD_seekable_decompress()
385 if (targetFrame != zs->curFrame || offset != zs->decompressedOffset) { in ZSTD_seekable_decompress()
386 zs->decompressedOffset = zs->seekTable.entries[targetFrame].dOffset; in ZSTD_seekable_decompress()
387 zs->curFrame = targetFrame; in ZSTD_seekable_decompress()
389 CHECK_IO(zs->src.seek(zs->src.opaque, in ZSTD_seekable_decompress()
390 zs->seekTable.entries[targetFrame].cOffset, in ZSTD_seekable_decompress()
392 zs->in = (ZSTD_inBuffer){zs->inBuff, 0, 0}; in ZSTD_seekable_decompress()
393 XXH64_reset(&zs->xxhState, 0); in ZSTD_seekable_decompress()
394 ZSTD_resetDStream(zs->dstream); in ZSTD_seekable_decompress()
397 while (zs->decompressedOffset < offset + len) { in ZSTD_seekable_decompress()
401 if (zs->decompressedOffset < offset) { in ZSTD_seekable_decompress()
403 …outTmp = (ZSTD_outBuffer){zs->outBuff, MIN(SEEKABLE_BUFF_SIZE, offset - zs->decompressedOffset), 0… in ZSTD_seekable_decompress()
405 outTmp = (ZSTD_outBuffer){dst, len, zs->decompressedOffset - offset}; in ZSTD_seekable_decompress()
409 toRead = ZSTD_decompressStream(zs->dstream, &outTmp, &zs->in); in ZSTD_seekable_decompress()
414 if (zs->seekTable.checksumFlag) { in ZSTD_seekable_decompress()
415 XXH64_update(&zs->xxhState, (BYTE*)outTmp.dst + prevOutPos, in ZSTD_seekable_decompress()
418 zs->decompressedOffset += outTmp.pos - prevOutPos; in ZSTD_seekable_decompress()
424 if (zs->seekTable.checksumFlag && in ZSTD_seekable_decompress()
425 (XXH64_digest(&zs->xxhState) & 0xFFFFFFFFU) != in ZSTD_seekable_decompress()
426 zs->seekTable.entries[targetFrame].checksum) { in ZSTD_seekable_decompress()
430 if (zs->decompressedOffset < offset + len) { in ZSTD_seekable_decompress()
432 targetFrame = ZSTD_seekable_offsetToFrameIndex(zs, zs->decompressedOffset); in ZSTD_seekable_decompress()
438 if (zs->in.pos == zs->in.size) { in ZSTD_seekable_decompress()
440 CHECK_IO(zs->src.read(zs->src.opaque, zs->inBuff, toRead)); in ZSTD_seekable_decompress()
441 zs->in.size = toRead; in ZSTD_seekable_decompress()
442 zs->in.pos = 0; in ZSTD_seekable_decompress()
445 } while (zs->decompressedOffset != offset + len); in ZSTD_seekable_decompress()
450 size_t ZSTD_seekable_decompressFrame(ZSTD_seekable* zs, void* dst, size_t dstSize, unsigned frameIn… in ZSTD_seekable_decompressFrame() argument
452 if (frameIndex >= zs->seekTable.tableLen) { in ZSTD_seekable_decompressFrame()
458 zs->seekTable.entries[frameIndex + 1].dOffset - in ZSTD_seekable_decompressFrame()
459 zs->seekTable.entries[frameIndex].dOffset; in ZSTD_seekable_decompressFrame()
464 zs, dst, decompressedSize, in ZSTD_seekable_decompressFrame()
465 zs->seekTable.entries[frameIndex].dOffset); in ZSTD_seekable_decompressFrame()