summaryrefslogtreecommitdiffstats
path: root/lz4frame.c
diff options
context:
space:
mode:
authorYann Collet <yann.collet.73@gmail.com>2014-09-13 13:40:35 (GMT)
committerYann Collet <yann.collet.73@gmail.com>2014-09-13 13:40:35 (GMT)
commit6bede08aa42acd3391bb3a2bee4a0fded9363be5 (patch)
tree12dd71323e362c576fd6a792d3a38ec4457c182c /lz4frame.c
parent658ab6cfca598b65b017e1ab784703add927ae0d (diff)
downloadlz4-6bede08aa42acd3391bb3a2bee4a0fded9363be5.zip
lz4-6bede08aa42acd3391bb3a2bee4a0fded9363be5.tar.gz
lz4-6bede08aa42acd3391bb3a2bee4a0fded9363be5.tar.bz2
LZ4F_getFrameInfo() : provides srcSize hint like LZ4F_decompress()
Diffstat (limited to 'lz4frame.c')
-rw-r--r--lz4frame.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/lz4frame.c b/lz4frame.c
index 1be6cff..4996d28 100644
--- a/lz4frame.c
+++ b/lz4frame.c
@@ -733,7 +733,9 @@ typedef enum { dstage_getHeader=0, dstage_storeHeader, dstage_decodeHeader,
* The objective is to extract header information without starting decompression, typically for allocation purposes.
* LZ4F_getFrameInfo() can also be used *after* starting decompression, on a valid LZ4F_decompressionContext_t.
* The number of bytes read from srcBuffer will be provided within *srcSizePtr (necessarily <= original value).
- * The function result is an error code which can be tested using LZ4F_isError().
+ * You are expected to resume decompression from where it stopped (srcBuffer + *srcSizePtr)
+ * The function result is an hint of the better srcSize to use for next call to LZ4F_decompress.
+ * or an error code which can be tested using LZ4F_isError().
*/
LZ4F_errorCode_t LZ4F_getFrameInfo(LZ4F_decompressionContext_t decompressionContext, LZ4F_frameInfo_t* frameInfoPtr, const void* srcBuffer, size_t* srcSizePtr)
{
@@ -745,14 +747,15 @@ LZ4F_errorCode_t LZ4F_getFrameInfo(LZ4F_decompressionContext_t decompressionCont
if (LZ4F_isError(errorCode)) return errorCode;
*srcSizePtr = errorCode;
*frameInfoPtr = dctxPtr->frameInfo;
+ dctxPtr->srcExpect = (BYTE*)srcBuffer + errorCode;
dctxPtr->dStage = dstage_getCBlockSize;
- return OK_NoError;
+ return 4;
}
/* frameInfo already decoded */
*srcSizePtr = 0;
*frameInfoPtr = dctxPtr->frameInfo;
- return OK_NoError;
+ return 0;
}