Added decoding of RLE blocks

dev
Yann Collet 2016-06-06 19:52:35 +02:00
parent f72dc6091b
commit 9d504ae85b
1 changed files with 10 additions and 2 deletions

View File

@ -53,7 +53,7 @@
/*-******************************************************* /*-*******************************************************
* Dependencies * Dependencies
*********************************************************/ *********************************************************/
#include <string.h> /* memcpy, memmove */ #include <string.h> /* memcpy, memmove, memset */
#include <stdio.h> /* debug only : printf */ #include <stdio.h> /* debug only : printf */
#include "mem.h" /* low level memory routines */ #include "mem.h" /* low level memory routines */
#define XXH_STATIC_LINKING_ONLY /* XXH64_state_t */ #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() : /*! ZSTD_decompressFrame() :
* `dctx` must be properly initialized */ * `dctx` must be properly initialized */
static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx, 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); decodedSize = ZSTD_copyRawBlock(op, oend-op, ip, cBlockSize);
break; break;
case bt_rle : case bt_rle :
return ERROR(GENERIC); /* not yet supported */ decodedSize = ZSTD_generateNxByte(op, oend-op, *ip, blockProperties.origSize);
break; break;
case bt_end : case bt_end :
/* end of frame */ /* end of frame */