Lines Matching defs:zds
2194 ZSTD_DStream *zds;
2199 zds = (ZSTD_DStream *)ZSTD_malloc(sizeof(ZSTD_DStream), customMem);
2200 if (zds == NULL)
2202 memset(zds, 0, sizeof(ZSTD_DStream));
2203 memcpy(&zds->customMem, &customMem, sizeof(ZSTD_customMem));
2204 zds->dctx = ZSTD_createDCtx_advanced(customMem);
2205 if (zds->dctx == NULL) {
2206 ZSTD_freeDStream(zds);
2209 zds->stage = zdss_init;
2210 zds->maxWindowSize = ZSTD_MAXWINDOWSIZE_DEFAULT;
2211 return zds;
2217 ZSTD_DStream *zds = ZSTD_createDStream_advanced(stackMem);
2218 if (!zds) {
2222 zds->maxWindowSize = maxWindowSize;
2223 zds->stage = zdss_loadHeader;
2224 zds->lhSize = zds->inPos = zds->outStart = zds->outEnd = 0;
2225 ZSTD_freeDDict(zds->ddictLocal);
2226 zds->ddictLocal = NULL;
2227 zds->ddict = zds->ddictLocal;
2228 zds->legacyVersion = 0;
2229 zds->hostageByte = 0;
2232 size_t const blockSize = MIN(zds->maxWindowSize, ZSTD_BLOCKSIZE_ABSOLUTEMAX);
2233 size_t const neededOutSize = zds->maxWindowSize + blockSize + WILDCOPY_OVERLENGTH * 2;
2235 zds->inBuff = (char *)ZSTD_malloc(blockSize, zds->customMem);
2236 zds->inBuffSize = blockSize;
2237 zds->outBuff = (char *)ZSTD_malloc(neededOutSize, zds->customMem);
2238 zds->outBuffSize = neededOutSize;
2239 if (zds->inBuff == NULL || zds->outBuff == NULL) {
2240 ZSTD_freeDStream(zds);
2244 return zds;
2249 ZSTD_DStream *zds = ZSTD_initDStream(maxWindowSize, workspace, workspaceSize);
2250 if (zds) {
2251 zds->ddict = ddict;
2253 return zds;
2256 size_t ZSTD_freeDStream(ZSTD_DStream *zds)
2258 if (zds == NULL)
2261 ZSTD_customMem const cMem = zds->customMem;
2262 ZSTD_freeDCtx(zds->dctx);
2263 zds->dctx = NULL;
2264 ZSTD_freeDDict(zds->ddictLocal);
2265 zds->ddictLocal = NULL;
2266 ZSTD_free(zds->inBuff, cMem);
2267 zds->inBuff = NULL;
2268 ZSTD_free(zds->outBuff, cMem);
2269 zds->outBuff = NULL;
2270 ZSTD_free(zds, cMem);
2280 size_t ZSTD_resetDStream(ZSTD_DStream *zds)
2282 zds->stage = zdss_loadHeader;
2283 zds->lhSize = zds->inPos = zds->outStart = zds->outEnd = 0;
2284 zds->legacyVersion = 0;
2285 zds->hostageByte = 0;
2298 size_t ZSTD_decompressStream(ZSTD_DStream *zds, ZSTD_outBuffer *output, ZSTD_inBuffer *input)
2309 switch (zds->stage) {
2311 ZSTD_resetDStream(zds); /* transparent reset on starting decoding a new frame */
2315 size_t const hSize = ZSTD_getFrameParams(&zds->fParams, zds->headerBuffer, zds->lhSize);
2319 size_t const toLoad = hSize - zds->lhSize; /* if hSize!=0, hSize > zds->lhSize */
2321 memcpy(zds->headerBuffer + zds->lhSize, ip, iend - ip);
2322 zds->lhSize += iend - ip;
2324 return (MAX(ZSTD_frameHeaderSize_min, hSize) - zds->lhSize) +
2327 memcpy(zds->headerBuffer + zds->lhSize, ip, toLoad);
2328 zds->lhSize = hSize;
2334 if (zds->fParams.frameContentSize && zds->fParams.windowSize /* skippable frame if == 0 */
2335 && (U64)(size_t)(oend - op) >= zds->fParams.frameContentSize) {
2338 size_t const decompressedSize = ZSTD_decompress_usingDDict(zds->dctx, op, oend - op, istart, cSize, zds->ddict);
2343 zds->dctx->expected = 0;
2344 zds->stage = zdss_init;
2351 ZSTD_refDDict(zds->dctx, zds->ddict);
2353 size_t const h1Size = ZSTD_nextSrcSizeToDecompress(zds->dctx); /* == ZSTD_frameHeaderSize_prefix */
2354 CHECK_F(ZSTD_decompressContinue(zds->dctx, NULL, 0, zds->headerBuffer, h1Size));
2356 size_t const h2Size = ZSTD_nextSrcSizeToDecompress(zds->dctx);
2357 CHECK_F(ZSTD_decompressContinue(zds->dctx, NULL, 0, zds->headerBuffer + h1Size, h2Size));
2361 zds->fParams.windowSize = MAX(zds->fParams.windowSize, 1U << ZSTD_WINDOWLOG_ABSOLUTEMIN);
2362 if (zds->fParams.windowSize > zds->maxWindowSize)
2367 size_t const blockSize = MIN(zds->maxWindowSize, ZSTD_BLOCKSIZE_ABSOLUTEMAX);
2368 size_t const neededOutSize = zds->maxWindowSize + blockSize + WILDCOPY_OVERLENGTH * 2;
2369 if (zds->inBuffSize < blockSize) {
2372 if (zds->outBuffSize < neededOutSize) {
2375 zds->blockSize = blockSize;
2377 zds->stage = zdss_read;
2382 size_t const neededInSize = ZSTD_nextSrcSizeToDecompress(zds->dctx);
2384 zds->stage = zdss_init;
2389 const int isSkipFrame = ZSTD_isSkipFrame(zds->dctx);
2390 size_t const decodedSize = ZSTD_decompressContinue(zds->dctx, zds->outBuff + zds->outStart,
2391 (isSkipFrame ? 0 : zds->outBuffSize - zds->outStart), ip, neededInSize);
2397 zds->outEnd = zds->outStart + decodedSize;
2398 zds->stage = zdss_flush;
2405 zds->stage = zdss_load;
2411 size_t const neededInSize = ZSTD_nextSrcSizeToDecompress(zds->dctx);
2412 size_t const toLoad = neededInSize - zds->inPos; /* should always be <= remaining space within inBuff */
2414 if (toLoad > zds->inBuffSize - zds->inPos)
2416 loadedSize = ZSTD_limitCopy(zds->inBuff + zds->inPos, toLoad, ip, iend - ip);
2418 zds->inPos += loadedSize;
2426 const int isSkipFrame = ZSTD_isSkipFrame(zds->dctx);
2427 size_t const decodedSize = ZSTD_decompressContinue(zds->dctx, zds->outBuff + zds->outStart, zds->outBuffSize - zds->outStart,
2428 zds->inBuff, neededInSize);
2431 zds->inPos = 0; /* input is consumed */
2433 zds->stage = zdss_read;
2436 zds->outEnd = zds->outStart + decodedSize;
2437 zds->stage = zdss_flush;
2444 size_t const toFlushSize = zds->outEnd - zds->outStart;
2445 size_t const flushedSize = ZSTD_limitCopy(op, oend - op, zds->outBuff + zds->outStart, toFlushSize);
2447 zds->outStart += flushedSize;
2449 zds->stage = zdss_read;
2450 if (zds->outStart + zds->blockSize > zds->outBuffSize)
2451 zds->outStart = zds->outEnd = 0;
2467 size_t nextSrcSizeHint = ZSTD_nextSrcSizeToDecompress(zds->dctx);
2469 if (zds->outEnd == zds->outStart) { /* output fully flushed */
2470 if (zds->hostageByte) {
2472 zds->stage = zdss_read;
2479 if (!zds->hostageByte) { /* output not fully flushed; keep last byte as hostage; will be released when all output is flushed */
2481 zds->hostageByte = 1;
2485 nextSrcSizeHint += ZSTD_blockHeaderSize * (ZSTD_nextInputType(zds->dctx) == ZSTDnit_block); /* preload header of next block */
2486 if (zds->inPos > nextSrcSizeHint)
2488 nextSrcSizeHint -= zds->inPos; /* already loaded*/