]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Added decoding of RLE blocks
authorYann Collet <yann.collet.73@gmail.com>
Mon, 6 Jun 2016 17:52:35 +0000 (19:52 +0200)
committerYann Collet <yann.collet.73@gmail.com>
Mon, 6 Jun 2016 17:52:35 +0000 (19:52 +0200)
lib/decompress/zstd_decompress.c

index 4630eb8a34acac58e327484e837d1d6a30daad68..9b7b1886b3be6d13f798296a5990f0b2fbb1bbc8 100644 (file)
@@ -53,7 +53,7 @@
 /*-*******************************************************
 *  Dependencies
 *********************************************************/
-#include <string.h>      /* memcpy, memmove */
+#include <string.h>      /* memcpy, memmove, memset */
 #include <stdio.h>       /* debug only : printf */
 #include "mem.h"         /* low level memory routines */
 #define XXH_STATIC_LINKING_ONLY   /* XXH64_state_t */
@@ -938,6 +938,14 @@ size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx,
 }
 
 
+size_t ZSTD_generateNxByte(void* dst, size_t dstCapacity, BYTE byte, size_t length)
+{
+    if (length > dstCapacity) return ERROR(dstSize_tooSmall);
+    memset(dst, byte, length);
+    return length;
+}
+
+
 /*! ZSTD_decompressFrame() :
 *   `dctx` must be properly initialized */
 static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx,
@@ -982,7 +990,7 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx,
             decodedSize = ZSTD_copyRawBlock(op, oend-op, ip, cBlockSize);
             break;
         case bt_rle :
-            return ERROR(GENERIC);   /* not yet supported */
+            decodedSize = ZSTD_generateNxByte(op, oend-op, *ip, blockProperties.origSize);
             break;
         case bt_end :
             /* end of frame */