From: dan Date: Sat, 17 Feb 2018 20:22:23 +0000 (+0000) Subject: Add support for "brotli" compression to the zonefile module. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a88b05361c325b2738eeb5eab41e520827bbe642;p=thirdparty%2Fsqlite.git Add support for "brotli" compression to the zonefile module. FossilOrigin-Name: 3eb25b3fa5733b4418e7e2633be34b763e2c70342bb9c418a07c9f7d4b196fac --- diff --git a/ext/zonefile/zonefile.c b/ext/zonefile/zonefile.c index e2c1bc467f..69e66fde0f 100644 --- a/ext/zonefile/zonefile.c +++ b/ext/zonefile/zonefile.c @@ -72,14 +72,21 @@ static u32 zonefileGet32(const u8 *aBuf){ #include #include -#ifdef SQLITE_HAVE_ZLIB -#include -static int zfZlibOpen(void **pp, u8 *aDict, int nDict){ +static int zfGenericOpen(void **pp, u8 *aDict, int nDict){ *pp = 0; return SQLITE_OK; } -static void zfZlibClose(void *p){ +static void zfGenericClose(void *p){ +} +static int zfGenericUncompressSize( + void *p, + const u8 *aSrc, int nSrc +){ + return (int)zonefileGet32(aSrc); } + +#ifdef SQLITE_HAVE_ZLIB +#include static int zfZlibCompressBound(void *p, int nSrc){ return (int)compressBound((uLong)nSrc) + 4; } @@ -94,12 +101,6 @@ static int zfZlibCompress( zonefilePut32(aDest, nSrc); return rc==Z_OK ? SQLITE_OK : SQLITE_ERROR; } -static int zfZlibUncompressSize( - void *p, - const u8 *aSrc, int nSrc -){ - return (int)zonefileGet32(aSrc); -} static int zfZlibUncompress( void *p, u8 *aDest, int nDest, @@ -112,12 +113,6 @@ static int zfZlibUncompress( #endif #ifdef SQLITE_HAVE_ZSTD #include -static int zfZstdOpen(void **pp, u8 *aDict, int nDict){ - *pp = 0; - return SQLITE_OK; -} -static void zfZstdClose(void *p){ -} static int zfZstdCompressBound(void *p, int nSrc){ return (int)ZSTD_compressBound((size_t)nSrc); } @@ -197,9 +192,6 @@ static int zfZstddictTrain( *pnDict = (int)sz; return SQLITE_OK; } -static int zfZstddictCompressBound(void *p, int nSrc){ - return (int)ZSTD_compressBound((size_t)nSrc); -} static int zfZstddictCompress( void *p, u8 *aDest, int *pnDest, @@ -216,9 +208,6 @@ static int zfZstddictCompress( *pnDest = (int)rc; return SQLITE_OK; } -static int zfZstddictUncompressSize(void *p, const u8 *aSrc, int nSrc){ - return (int)ZSTD_getFrameContentSize(aSrc, (size_t)nSrc); -} static int zfZstddictUncompress( void *p, u8 *aDest, int nDest, @@ -236,12 +225,6 @@ static int zfZstddictUncompress( #ifdef SQLITE_HAVE_LZ4 #include #include -static int zfLz4Open(void **pp, u8 *aDict, int nDict){ - *pp = 0; - return SQLITE_OK; -} -static void zfLz4Close(void *p){ -} static int zfLz4CompressBound(void *p, int nSrc){ return (int)LZ4_compressBound((uLong)nSrc) + 4; } @@ -267,9 +250,6 @@ static int zfLz4Compress( zonefilePut32(aDest, nSrc); return rc==0 ? SQLITE_ERROR : SQLITE_OK; } -static int zfLz4UncompressSize(void *p, const u8 *aSrc, int nSrc){ - return (int)zonefileGet32(aSrc); -} static int zfLz4hcCompress( void *p, u8 *aDest, int *pnDest, @@ -284,6 +264,38 @@ static int zfLz4hcCompress( } #endif +#ifdef SQLITE_HAVE_BROTLI +#include +#include + +static int zfBrotliCompressBound(void *p, int nSrc){ + return (int)BrotliEncoderMaxCompressedSize((size_t)nSrc) + 4; +} +static int zfBrotliCompress( + void *p, + u8 *aDest, int *pnDest, + const u8 *aSrc, int nSrc +){ + size_t nDest = (size_t)*pnDest - 4; + BROTLI_BOOL rc = BrotliEncoderCompress( + BROTLI_DEFAULT_QUALITY, BROTLI_DEFAULT_WINDOW, BROTLI_DEFAULT_MODE, + (size_t)nSrc, aSrc, &nDest, &aDest[4] + ); + *pnDest = (int)nDest + 4; + zonefilePut32(aDest, nSrc); + return rc==0 ? SQLITE_ERROR : SQLITE_OK; +} +static int zfBrotliUncompress( + void *p, + u8 *aDest, int nDest, + const u8 *aSrc, int nSrc +){ + size_t n = nDest; + BrotliDecoderResult rc = BrotliDecoderDecompress(nSrc-4, &aSrc[4], &n, aDest); + return rc==BROTLI_DECODER_RESULT_SUCCESS ? SQLITE_OK : SQLITE_ERROR; +} +#endif + typedef struct ZonefileCompress ZonefileCompress; static struct ZonefileCompress { int eType; @@ -301,7 +313,7 @@ static struct ZonefileCompress { }, #ifdef SQLITE_HAVE_ZSTD { ZONEFILE_COMPRESSION_ZSTD, "zstd", - zfZstdOpen, zfZstdClose, + zfGenericOpen, zfGenericClose, 0, zfZstdCompressBound, zfZstdCompress, zfZstdUncompressSize, zfZstdUncompress @@ -309,35 +321,38 @@ static struct ZonefileCompress { { ZONEFILE_COMPRESSION_ZSTD_GLOBAL_DICT, "zstd_global_dict", zfZstddictOpen, zfZstddictClose, zfZstddictTrain, - zfZstddictCompressBound, zfZstddictCompress, - zfZstddictUncompressSize, zfZstddictUncompress + zfZstdCompressBound, zfZstddictCompress, + zfZstdUncompressSize, zfZstddictUncompress }, #endif /* SQLITE_HAVE_ZSTD */ #ifdef SQLITE_HAVE_ZLIB { ZONEFILE_COMPRESSION_ZLIB, "zlib", - zfZlibOpen, zfZlibClose, + zfGenericOpen, zfGenericClose, 0, zfZlibCompressBound, zfZlibCompress, - zfZlibUncompressSize, zfZlibUncompress + zfGenericUncompressSize, zfZlibUncompress }, #endif /* SQLITE_HAVE_ZLIB */ #ifdef SQLITE_HAVE_BROTLI { ZONEFILE_COMPRESSION_BROTLI, "brotli", - 0, 0, 0, 0, 0, 0, 0 + zfGenericOpen, zfGenericClose, + 0, + zfBrotliCompressBound, zfBrotliCompress, + zfGenericUncompressSize, zfBrotliUncompress }, #endif /* SQLITE_HAVE_BROTLI */ #ifdef SQLITE_HAVE_LZ4 { ZONEFILE_COMPRESSION_LZ4, "lz4", - zfLz4Open, zfLz4Close, + zfGenericOpen, zfGenericClose, 0, zfLz4CompressBound, zfLz4Compress, - zfLz4UncompressSize, zfLz4Uncompress + zfGenericUncompressSize, zfLz4Uncompress }, { ZONEFILE_COMPRESSION_LZ4HC, "lz4hc", - zfLz4Open, zfLz4Close, + zfGenericOpen, zfGenericClose, 0, zfLz4CompressBound, zfLz4hcCompress, - zfLz4UncompressSize, zfLz4Uncompress + zfGenericUncompressSize, zfLz4Uncompress }, #endif /* SQLITE_HAVE_LZ4 */ }; diff --git a/manifest b/manifest index 20b7231d08..d5bc229376 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\ssupport\sfor\scompression\stypes\s"lz4"\sand\s"lz4hc"\sto\sthe\szonefile\smodule. -D 2018-02-17T19:38:02.757 +C Add\ssupport\sfor\s"brotli"\scompression\sto\sthe\szonefile\smodule. +D 2018-02-17T20:22:23.498 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7a3f714b4fcf793108042b7b0a5c720b0b310ec84314d61ba7f3f49f27e550ea @@ -409,7 +409,7 @@ F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3 F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04 F ext/userauth/userauth.c 3410be31283abba70255d71fd24734e017a4497f F ext/zonefile/README.md 387ad2b748e98eeea21fd4dbb609fefe313263fadb3fc6c01c512b4c95e55ae4 -F ext/zonefile/zonefile.c cb0e2d294bc064bd995e9df7737636395e3101b17de688b2cf0e2159e561482c +F ext/zonefile/zonefile.c 95233e917f4bdcc28fead61c4ad991b1ee18ea44fdba30a7e50e6484ea79fe31 F ext/zonefile/zonefile1.test 0f84e56cd4f7b2c05443d1a2632c20ef635cc7f92de2868d92a2a6c09a9258ad F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 @@ -1708,7 +1708,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P a993a50bb8d5a3bf7cf79e09204814e172ba0bf9b3949e81912ef83f0d4bb44e -R 446a2537d684855afb526eb1141b7e7d +P bbe5b21ffab3cd312680ca9f179c5847790c17fb91d4174985153c6c398d48e3 +R 4ceb71e701bfbb226e3bec90adf489aa U dan -Z 61481f5925196a4938887596830579d3 +Z 3bc85025f17818043a52cc73d7feb53a diff --git a/manifest.uuid b/manifest.uuid index cfb2a80aef..a0926326ba 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bbe5b21ffab3cd312680ca9f179c5847790c17fb91d4174985153c6c398d48e3 \ No newline at end of file +3eb25b3fa5733b4418e7e2633be34b763e2c70342bb9c418a07c9f7d4b196fac \ No newline at end of file