]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Merge remote-tracking branch 'refs/remotes/Cyan4973/dev070' into dev070
authorinikep <inikep@gmail.com>
Wed, 1 Jun 2016 07:16:11 +0000 (09:16 +0200)
committerinikep <inikep@gmail.com>
Wed, 1 Jun 2016 07:16:11 +0000 (09:16 +0200)
# Conflicts:
# .gitignore
# lib/decompress/zstd_decompress.c
# programs/zbufftest.c

1  2 
.gitignore
lib/common/zstd_static.h
lib/decompress/zstd_decompress.c
programs/zbufftest.c

diff --cc .gitignore
index f0e2c9f12f842dc70720b2ca31104c90b9bb5d04,c902124900066c61c52170e29b14a6a00e38caa3..9a71d4bcd7c32c298b417ef5ced7957901901ead
@@@ -31,7 -31,5 +31,7 @@@ projects/VS201
  .directory
  _codelite/
  _zstdbench/
--zlib_wrapper/
+ .clang_complete
 +
 +# CMake
 +projects/cmake/
Simple merge
index da00799cf22869357905109e3a0c87ab09da7f09,4ef8de30f8d4872ec487e0843f62e06e4d279442..6d79e678a66b3e10fd2cd57e4d89f7b3648b735b
@@@ -1030,11 -1028,9 +1037,14 @@@ size_t ZSTD_nextSrcSizeToDecompress(ZST
      return dctx->expected;
  }
  
 +int ZSTD_isSkipFrame(ZSTD_DCtx* dctx)
 +{
 +    return dctx->stage == ZSTDds_skipFrame;
 +}
 +
+ /** ZSTD_decompressContinue() :
+ *   @return : nb of bytes generated into `dst` (necessarily <= `dstCapacity)
+ *             or an error code, which can be tested using ZSTD_isError() */
  size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize)
  {
      /* Sanity check */
              dctx->stage = ZSTDds_decodeBlockHeader;
              dctx->expected = ZSTD_blockHeaderSize;
              dctx->previousDstEnd = (char*)dst + rSize;
+             if (ZSTD_isError(rSize)) return rSize;
+             if (dctx->fParams.checksumFlag) XXH64_update(&dctx->xxhState, dst, rSize);
              return rSize;
          }
 +    case ZSTDds_decodeSkippableHeader:
 +        {   memcpy(dctx->headerBuffer + ZSTD_frameHeaderSize_min, src, dctx->expected);
 +            dctx->expected = MEM_readLE32(dctx->headerBuffer + 4);
 +            dctx->stage = ZSTDds_skipFrame;
 +            return 0;
 +        }
 +    case ZSTDds_skipFrame:
 +        {   dctx->expected = 0;
 +            dctx->stage = ZSTDds_getFrameHeaderSize;
 +            return 0;
 +        }
      default:
          return ERROR(GENERIC);   /* impossible */
      }
index 278339dd0c2d4da3110597133dd51ff2713bac19,c7951eeff5d43670f43c42de5045c005b1ada669..19a385b429db5c33fcc91bb550853485fd0bcd5a
@@@ -147,12 -147,11 +147,12 @@@ static int basicUnitTests(U32 seed, dou
      int testResult = 0;
      size_t CNBufferSize = COMPRESSIBLE_NOISE_LENGTH;
      void* CNBuffer = malloc(CNBufferSize);
 -    size_t const compressedBufferSize = ZSTD_compressBound(COMPRESSIBLE_NOISE_LENGTH);
 -    void* const compressedBuffer = malloc(compressedBufferSize);
 +    size_t const skippableFrameSize = 11;
 +    size_t const compressedBufferSize = (8 + skippableFrameSize) + ZSTD_compressBound(COMPRESSIBLE_NOISE_LENGTH);
 +    void* compressedBuffer = malloc(compressedBufferSize);
      size_t const decodedBufferSize = CNBufferSize;
 -    void* const decodedBuffer = malloc(decodedBufferSize);
 -    size_t cSize, readSize, genSize;
 +    void* decodedBuffer = malloc(decodedBufferSize);
-     size_t result, cSize, readSize, readSkipSize, genSize;
++    size_t cSize, readSize, readSkipSize, genSize;
      U32 testNb=0;
      ZBUFF_CCtx* zc = ZBUFF_createCCtx_advanced(customMem);
      ZBUFF_DCtx* zd = ZBUFF_createDCtx_advanced(customMem);
      ZBUFF_compressInitDictionary(zc, CNBuffer, 128 KB, 1);
      readSize = CNBufferSize;
      genSize = compressedBufferSize;
-     result = ZBUFF_compressContinue(zc, ((char*)compressedBuffer)+cSize, &genSize, CNBuffer, &readSize);
-     if (ZBUFF_isError(result)) goto _output_error;
 -    { size_t const r = ZBUFF_compressContinue(zc, compressedBuffer, &genSize, CNBuffer, &readSize);
++    { size_t const r = ZBUFF_compressContinue(zc, ((char*)compressedBuffer)+cSize, &genSize, CNBuffer, &readSize);
+       if (ZBUFF_isError(r)) goto _output_error; }
      if (readSize != CNBufferSize) goto _output_error;   /* entire input should be consumed */
 -    cSize = genSize;
 +    cSize += genSize;
      genSize = compressedBufferSize - cSize;
-     result = ZBUFF_compressEnd(zc, ((char*)compressedBuffer)+cSize, &genSize);
-     if (result != 0) goto _output_error;   /* error, or some data not flushed */
+     { size_t const r = ZBUFF_compressEnd(zc, ((char*)compressedBuffer)+cSize, &genSize);
+       if (r != 0) goto _output_error; }  /*< error, or some data not flushed */
      cSize += genSize;
      DISPLAYLEVEL(4, "OK (%u bytes : %.2f%%)\n", (U32)cSize, (double)cSize/COMPRESSIBLE_NOISE_LENGTH*100);
  
      /* Basic decompression test */
      DISPLAYLEVEL(4, "test%3i : decompress %u bytes : ", testNb++, COMPRESSIBLE_NOISE_LENGTH);
      ZBUFF_decompressInitDictionary(zd, CNBuffer, 128 KB);
 -    readSize = cSize;
 +    readSkipSize = cSize;
 +    genSize = CNBufferSize;
-     result = ZBUFF_decompressContinue(zd, decodedBuffer, &genSize, compressedBuffer, &readSkipSize);
-     if (genSize != 0) goto _output_error;   /* skippable frame */
++    { size_t const r = ZBUFF_decompressContinue(zd, decodedBuffer, &genSize, compressedBuffer, &readSkipSize);
++      if (r != 0) goto _output_error; }
++    if (genSize != 0) goto _output_error;   /* skippable frame len is 0 */
 +    ZBUFF_decompressInitDictionary(zd, CNBuffer, 128 KB);
 +    readSize = cSize - readSkipSize;
      genSize = CNBufferSize;
-     result = ZBUFF_decompressContinue(zd, decodedBuffer, &genSize, ((char*)compressedBuffer)+readSkipSize, &readSize);
-     if (result != 0) goto _output_error;  /* should reach end of frame == 0; otherwise, some data left, or an error */
 -    { size_t const r = ZBUFF_decompressContinue(zd, decodedBuffer, &genSize, compressedBuffer, &readSize);
++    { size_t const r = ZBUFF_decompressContinue(zd, decodedBuffer, &genSize, ((char*)compressedBuffer)+readSkipSize, &readSize);
+       if (r != 0) goto _output_error; }  /* should reach end of frame == 0; otherwise, some data left, or an error */
      if (genSize != CNBufferSize) goto _output_error;   /* should regenerate the same amount */
 -    if (readSize != cSize) goto _output_error;   /* should have read the entire frame */
 +    if (readSize+readSkipSize != cSize) goto _output_error;   /* should have read the entire frame */
      DISPLAYLEVEL(4, "OK \n");
  
      /* check regenerated data is byte exact */