]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Add ZDICT_getHeaderSize()
authorSen Huang <senhuang96@fb.com>
Tue, 29 Oct 2019 20:45:11 +0000 (16:45 -0400)
committerSen Huang <senhuang96@fb.com>
Fri, 8 Nov 2019 18:57:08 +0000 (13:57 -0500)
lib/dictBuilder/zdict.c
lib/dictBuilder/zdict.h

index 1e7f8343209fe56bd618b61d4c77d7345fdb30e0..863a8edf77a26f836495fdc0206fdd188d5b33e4 100644 (file)
@@ -48,6 +48,7 @@
 #  define ZDICT_STATIC_LINKING_ONLY
 #endif
 #include "zdict.h"
+#include "decompress/zstd_decompress_internal.h" /* ZSTD_entropyDTables_t */
 
 
 /*-*************************************
@@ -99,6 +100,17 @@ unsigned ZDICT_getDictID(const void* dictBuffer, size_t dictSize)
     return MEM_readLE32((const char*)dictBuffer + 4);
 }
 
+size_t ZDICT_getDictHeaderSize(const void* dictBuffer, size_t dictSize)
+{
+    if (dictSize <= 8 || MEM_readLE32(dictBuffer) != ZSTD_MAGIC_DICTIONARY) return 0;
+
+    {   ZSTD_entropyDTables_t dummyEntropyTables;
+        size_t headerSize;
+        dummyEntropyTables.hufTable[0] = (HUF_DTable)((HufLog)*0x1000001);
+        headerSize = ZSTD_loadDEntropy(&dummyEntropyTables, dictBuffer, dictSize);
+        return ZSTD_isError(headerSize) ? 0 : headerSize;
+    }
+}
 
 /*-********************************************************
 *  Dictionary training functions
index 37978ecdfb818be65a11f34c90a66483da7af700..f16d573a916106ff9beec3aba847387880da0694 100644 (file)
@@ -64,6 +64,7 @@ ZDICTLIB_API size_t ZDICT_trainFromBuffer(void* dictBuffer, size_t dictBufferCap
 
 /*======   Helper functions   ======*/
 ZDICTLIB_API unsigned ZDICT_getDictID(const void* dictBuffer, size_t dictSize);  /**< extracts dictID; @return zero if error (not a valid dictionary) */
+ZDICTLIB_API size_t ZDICT_getDictHeaderSize(const void* dictBuffer, size_t dictSize);  /* returns dict header size; returns zero if error (not a valid dictionary) */
 ZDICTLIB_API unsigned ZDICT_isError(size_t errorCode);
 ZDICTLIB_API const char* ZDICT_getErrorName(size_t errorCode);