aboutsummaryrefslogtreecommitdiff
path: root/zlibWrapper
diff options
context:
space:
mode:
Diffstat (limited to 'zlibWrapper')
-rw-r--r--zlibWrapper/BUCK22
-rw-r--r--zlibWrapper/Makefile120
-rw-r--r--zlibWrapper/examples/example.c598
-rw-r--r--zlibWrapper/examples/example_original.c599
-rw-r--r--zlibWrapper/examples/fitblk.c254
-rw-r--r--zlibWrapper/examples/fitblk_original.c233
-rw-r--r--zlibWrapper/examples/minigzip.c605
-rw-r--r--zlibWrapper/examples/zwrapbench.c1018
8 files changed, 0 insertions, 3449 deletions
diff --git a/zlibWrapper/BUCK b/zlibWrapper/BUCK
deleted file mode 100644
index a0710e1cf4cd..000000000000
--- a/zlibWrapper/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-cxx_library(
- name='zlib_wrapper',
- visibility=['PUBLIC'],
- exported_linker_flags=['-lz'],
- header_namespace='',
- exported_headers=['zstd_zlibwrapper.h'],
- headers=[
- 'gzcompatibility.h',
- 'gzguts.h',
- ],
- srcs=glob(['*.c']),
- deps=[
- '//lib:zstd',
- '//lib:zstd_common',
- ],
-)
-
-cxx_binary(
- name='minigzip',
- srcs=['examples/minigzip.c'],
- deps=[':zlib_wrapper'],
-)
diff --git a/zlibWrapper/Makefile b/zlibWrapper/Makefile
deleted file mode 100644
index 830b294bb6f4..000000000000
--- a/zlibWrapper/Makefile
+++ /dev/null
@@ -1,120 +0,0 @@
-# Makefile for example of using zstd wrapper for zlib
-#
-# make - compiles examples
-# make MOREFLAGS=-DZWRAP_USE_ZSTD=1 - compiles examples with zstd compression turned on
-# make test - runs examples
-
-
-# Paths to static and dynamic zlib and zstd libraries
-# Use "make ZLIB_PATH=path/to/zlib ZLIB_LIBRARY=path/to/libz.so" to select a path to library
-ZLIB_LIBRARY ?= -lz
-ZLIB_PATH ?= .
-
-ZSTDLIBDIR = ../lib
-ZSTDLIBRARY = $(ZSTDLIBDIR)/libzstd.a
-ZLIBWRAPPER_PATH = .
-GZFILES = gzclose.o gzlib.o gzread.o gzwrite.o
-EXAMPLE_PATH = examples
-PROGRAMS_PATH = ../programs
-TEST_FILE = ../doc/zstd_compression_format.md
-
-vpath %.c $(PROGRAMS_PATH) $(EXAMPLE_PATH) $(ZLIBWRAPPER_PATH)
-
-
-CPPFLAGS += -DXXH_NAMESPACE=ZSTD_ -I$(ZLIB_PATH) -I$(PROGRAMS_PATH) \
- -I$(ZSTDLIBDIR) -I$(ZSTDLIBDIR)/common -I$(ZLIBWRAPPER_PATH)
-STDFLAGS = -std=c89 -pedantic -Wno-long-long -Wno-variadic-macros -Wc++-compat \
- -DNO_snprintf -DNO_vsnprintf # strict ANSI C89 is missing these prototypes
-DEBUGFLAGS= -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow -Wswitch-enum \
- -Wdeclaration-after-statement -Wstrict-prototypes -Wundef \
- -Wstrict-aliasing=1
-CFLAGS ?= -O3
-CFLAGS += $(STDFLAGS) $(DEBUGFLAGS)
-CPPFLAGS += $(MOREFLAGS)
-LDLIBS += $(ZLIB_LIBRARY)
-
-# Define *.exe as extension for Windows systems
-ifneq (,$(filter Windows%,$(OS)))
-EXT =.exe
-else
-EXT =
-endif
-
-default : release
-
-release : STDFLAGS =
-release : DEBUGFLAGS =
-release : all
-
-all: fitblk example zwrapbench minigzip
-
-test: example fitblk example_zstd fitblk_zstd zwrapbench minigzip minigzip_zstd
- ./example
- ./example_zstd
- ./fitblk 10240 <$(TEST_FILE)
- ./fitblk 40960 <$(TEST_FILE)
- ./fitblk_zstd 10240 <$(TEST_FILE)
- ./fitblk_zstd 40960 <$(TEST_FILE)
- @echo ---- minigzip start ----
- ./minigzip_zstd example$(EXT)
- #cp example$(EXT).gz example$(EXT)_zstd.gz
- ./minigzip_zstd -d example$(EXT).gz
- ./minigzip example$(EXT)
- #cp example$(EXT).gz example$(EXT)_gz.gz
- ./minigzip_zstd -d example$(EXT).gz
- @echo ---- minigzip end ----
- ./zwrapbench -qi1b3B1K $(TEST_FILE)
- ./zwrapbench -rqi1b1e3 ../lib
-
-.PHONY: test-valgrind
-#test-valgrind: ZSTDLIBRARY = $(ZSTDLIBDIR)/libzstd.so
-test-valgrind: VALGRIND = LD_LIBRARY_PATH=$(ZSTDLIBDIR) valgrind --track-origins=yes --leak-check=full --error-exitcode=1
-test-valgrind: clean example fitblk example_zstd fitblk_zstd zwrapbench
- @echo "\n ---- valgrind tests ----"
- $(VALGRIND) ./example
- $(VALGRIND) ./example_zstd
- $(VALGRIND) ./fitblk 10240 <$(TEST_FILE)
- $(VALGRIND) ./fitblk 40960 <$(TEST_FILE)
- $(VALGRIND) ./fitblk_zstd 10240 <$(TEST_FILE)
- $(VALGRIND) ./fitblk_zstd 40960 <$(TEST_FILE)
- $(VALGRIND) ./zwrapbench -qi1b3B1K $(TEST_FILE)
- $(VALGRIND) ./zwrapbench -rqi1b1e5 ../lib ../programs ../tests
-
-#.c.o:
-# $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
-
-minigzip: minigzip.o zstd_zlibwrapper.o $(GZFILES) $(ZSTDLIBRARY)
-
-minigzip_zstd: minigzip.o zstdTurnedOn_zlibwrapper.o $(GZFILES) $(ZSTDLIBRARY)
- $(LINK.o) $^ $(LDLIBS) $(OUTPUT_OPTION)
-
-example: example.o zstd_zlibwrapper.o $(GZFILES) $(ZSTDLIBRARY)
-
-example_zstd: example.o zstdTurnedOn_zlibwrapper.o $(GZFILES) $(ZSTDLIBRARY)
- $(LINK.o) $^ $(LDLIBS) $(OUTPUT_OPTION)
-
-fitblk: fitblk.o zstd_zlibwrapper.o $(ZSTDLIBRARY)
-
-fitblk_zstd: fitblk.o zstdTurnedOn_zlibwrapper.o $(ZSTDLIBRARY)
- $(LINK.o) $^ $(LDLIBS) $(OUTPUT_OPTION)
-
-zwrapbench: zwrapbench.o zstd_zlibwrapper.o util.o timefn.o datagen.o $(ZSTDLIBRARY)
-
-
-zstd_zlibwrapper.o: zstd_zlibwrapper.h
-
-zstdTurnedOn_zlibwrapper.o: CPPFLAGS += -DZWRAP_USE_ZSTD=1
-zstdTurnedOn_zlibwrapper.o: zstd_zlibwrapper.c zstd_zlibwrapper.h
- $(COMPILE.c) $< $(OUTPUT_OPTION)
-
-
-$(ZSTDLIBRARY):
- $(MAKE) -C $(ZSTDLIBDIR) libzstd.a
-
-$(ZSTDLIBDIR)/libzstd.so:
- $(MAKE) -C $(ZSTDLIBDIR) libzstd
-
-
-clean:
- -$(RM) $(ZLIBWRAPPER_PATH)/*.o $(EXAMPLE_PATH)/*.o *.o foo.gz example$(EXT) example_zstd$(EXT) fitblk$(EXT) fitblk_zstd$(EXT) zwrapbench$(EXT) minigzip$(EXT) minigzip_zstd$(EXT)
- @echo Cleaning completed
diff --git a/zlibWrapper/examples/example.c b/zlibWrapper/examples/example.c
deleted file mode 100644
index eaae69747b76..000000000000
--- a/zlibWrapper/examples/example.c
+++ /dev/null
@@ -1,598 +0,0 @@
-/* example.c contains minimal changes required to be compiled with zlibWrapper:
- * - #include "zlib.h" was changed to #include "zstd_zlibwrapper.h"
- * - test_flush() and test_sync() use functions not supported by zlibWrapper
- therefore they are disabled while zstd compression is turned on */
-
-/* example.c -- usage example of the zlib compression library
- */
-/*
- Copyright (c) 1995-2006, 2011 Jean-loup Gailly
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgement in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-/* @(#) $Id$ */
-
-#include "zstd_zlibwrapper.h"
-#include <stdio.h>
-
-#ifdef STDC
-# include <string.h>
-# include <stdlib.h>
-#endif
-
-#if defined(VMS) || defined(RISCOS)
-# define TESTFILE "foo-gz"
-#else
-# define TESTFILE "foo.gz"
-#endif
-
-#define CHECK_ERR(err, msg) { \
- if (err != Z_OK) { \
- fprintf(stderr, "%s error: %d\n", msg, err); \
- exit(1); \
- } \
-}
-
-z_const char hello[] = "hello, hello! I said hello, hello!";
-/* "hello world" would be more standard, but the repeated "hello"
- * stresses the compression code better, sorry...
- */
-
-const char dictionary[] = "hello, hello!";
-uLong dictId; /* Adler32 value of the dictionary */
-
-void test_deflate _Z_OF((Byte *compr, uLong comprLen));
-void test_inflate _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_large_deflate _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_large_inflate _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_flush _Z_OF((Byte *compr, uLong *comprLen));
-void test_sync _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_dict_deflate _Z_OF((Byte *compr, uLong comprLen));
-void test_dict_inflate _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-int main _Z_OF((int argc, char *argv[]));
-
-
-#ifdef Z_SOLO
-
-void *myalloc _Z_OF((void *, unsigned, unsigned));
-void myfree _Z_OF((void *, void *));
-
-void *myalloc(void *q, unsigned n, unsigned m)
-{
- void *buf = calloc(n, m);
- q = Z_NULL;
- /* printf("myalloc %p n=%d m=%d\n", buf, n, m); */
- return buf;
-}
-
-void myfree(void *q, void *p)
-{
- /* printf("myfree %p\n", p); */
- q = Z_NULL;
- free(p);
-}
-
-static alloc_func zalloc = myalloc;
-static free_func zfree = myfree;
-
-#else /* !Z_SOLO */
-
-static alloc_func zalloc = (alloc_func)0;
-static free_func zfree = (free_func)0;
-
-void test_compress _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_gzio _Z_OF((const char *fname,
- Byte *uncompr, uLong uncomprLen));
-
-/* ===========================================================================
- * Test compress() and uncompress()
- */
-void test_compress(Byte *compr, uLong comprLen, Byte *uncompr,
- uLong uncomprLen) {
- int err;
- uLong len = (uLong)strlen(hello)+1;
-
- err = compress(compr, &comprLen, (const Bytef*)hello, len);
- CHECK_ERR(err, "compress");
-
- strcpy((char*)uncompr, "garbage");
-
- err = uncompress(uncompr, &uncomprLen, compr, comprLen);
- CHECK_ERR(err, "uncompress");
-
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad uncompress\n");
- exit(1);
- } else {
- printf("uncompress(): %s\n", (char *)uncompr);
- }
-}
-
-/* ===========================================================================
- * Test read/write of .gz files
- */
-void test_gzio(const char *fname, Byte *uncompr, uLong uncomprLen) {
-#ifdef NO_GZCOMPRESS
- fprintf(stderr, "NO_GZCOMPRESS -- gz* functions cannot compress\n");
-#else
- int err;
- int len = (int)strlen(hello)+1;
- gzFile file;
- z_off_t pos;
-
- file = gzopen(fname, "wb");
- if (file == NULL) {
- fprintf(stderr, "gzopen error\n");
- exit(1);
- }
- gzputc(file, 'h');
- if (gzputs(file, "ello") != 4) {
- fprintf(stderr, "gzputs err: %s\n", gzerror(file, &err));
- exit(1);
- }
- if (gzprintf(file, ", %s! I said hello, hello!", "hello") != 8+21) {
- fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err));
- exit(1);
- }
- gzseek(file, 1L, SEEK_CUR); /* add one zero byte */
- gzclose(file);
-
- file = gzopen(fname, "rb");
- if (file == NULL) {
- fprintf(stderr, "gzopen error\n");
- exit(1);
- }
- strcpy((char*)uncompr, "garbage");
-
- if (gzread(file, uncompr, (unsigned)uncomprLen) != len) {
- fprintf(stderr, "gzread err: %s\n", gzerror(file, &err));
- exit(1);
- }
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad gzread: %s\n", (char*)uncompr);
- exit(1);
- } else {
- printf("gzread(): %s\n", (char*)uncompr);
- }
-
- pos = gzseek(file, -8L, SEEK_CUR);
- if (pos != 6+21 || gztell(file) != pos) {
- fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n",
- (long)pos, (long)gztell(file));
- exit(1);
- }
-
- if (gzgetc(file) != ' ') {
- fprintf(stderr, "gzgetc error\n");
- exit(1);
- }
-
- if (gzungetc(' ', file) != ' ') {
- fprintf(stderr, "gzungetc error\n");
- exit(1);
- }
-
- gzgets(file, (char*)uncompr, (int)uncomprLen);
- if (strlen((char*)uncompr) != 7) { /* " hello!" */
- fprintf(stderr, "gzgets err after gzseek: %s\n", gzerror(file, &err));
- exit(1);
- }
- if (strcmp((char*)uncompr, hello + 6+21)) {
- fprintf(stderr, "bad gzgets after gzseek\n");
- exit(1);
- } else {
- printf("gzgets() after gzseek: %s\n", (char*)uncompr);
- }
-
- gzclose(file);
-#endif
-}
-
-#endif /* Z_SOLO */
-
-/* ===========================================================================
- * Test deflate() with small buffers
- */
-void test_deflate(Byte *compr, uLong comprLen) {
- z_stream c_stream; /* compression stream */
- int err;
- uLong len = (uLong)strlen(hello)+1;
-
- c_stream.zalloc = zalloc;
- c_stream.zfree = zfree;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
- CHECK_ERR(err, "deflateInit");
-
- c_stream.next_in = (z_const unsigned char *)hello;
- c_stream.next_out = compr;
-
- while (c_stream.total_in != len && c_stream.total_out < comprLen) {
- c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
- }
- /* Finish the stream, still forcing small buffers: */
- for (;;) {
- c_stream.avail_out = 1;
- err = deflate(&c_stream, Z_FINISH);
- if (err == Z_STREAM_END) break;
- CHECK_ERR(err, "deflate");
- }
-
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-}
-
-/* ===========================================================================
- * Test inflate() with small buffers
- */
-void test_inflate(Byte *compr, uLong comprLen, Byte *uncompr,
- uLong uncomprLen) {
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = zalloc;
- d_stream.zfree = zfree;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = 0;
- d_stream.next_out = uncompr;
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) {
- d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */
- err = inflate(&d_stream, Z_NO_FLUSH);
- if (err == Z_STREAM_END) break;
- CHECK_ERR(err, "inflate");
- }
-
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad inflate\n");
- exit(1);
- } else {
- printf("inflate(): %s\n", (char *)uncompr);
- }
-}
-
-/* ===========================================================================
- * Test deflate() with large buffers and dynamic change of compression level
- */
-void test_large_deflate(Byte *compr, uLong comprLen, Byte *uncompr,
- uLong uncomprLen) {
- z_stream c_stream; /* compression stream */
- int err;
-
- c_stream.zalloc = zalloc;
- c_stream.zfree = zfree;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_BEST_SPEED);
- CHECK_ERR(err, "deflateInit");
-
- c_stream.next_out = compr;
- c_stream.avail_out = (uInt)comprLen;
-
- /* At this point, uncompr is still mostly zeroes, so it should compress
- * very well:
- */
- c_stream.next_in = uncompr;
- c_stream.avail_in = (uInt)uncomprLen;
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
- if (c_stream.avail_in != 0) {
- fprintf(stderr, "deflate not greedy\n");
- exit(1);
- }
-
- /* Feed in already compressed data and switch to no compression: */
- deflateParams(&c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY);
- c_stream.next_in = compr;
- c_stream.avail_in = (uInt)comprLen/2;
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
-
- /* Switch back to compressing mode: */
- deflateParams(&c_stream, Z_BEST_COMPRESSION, Z_FILTERED);
- c_stream.next_in = uncompr;
- c_stream.avail_in = (uInt)uncomprLen;
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- fprintf(stderr, "deflate should report Z_STREAM_END\n");
- exit(1);
- }
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-}
-
-/* ===========================================================================
- * Test inflate() with large buffers
- */
-void test_large_inflate(Byte *compr, uLong comprLen, Byte *uncompr,
- uLong uncomprLen) {
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = zalloc;
- d_stream.zfree = zfree;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = (uInt)comprLen;
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- for (;;) {
- d_stream.next_out = uncompr; /* discard the output */
- d_stream.avail_out = (uInt)uncomprLen;
- err = inflate(&d_stream, Z_NO_FLUSH);
- if (err == Z_STREAM_END) break;
- CHECK_ERR(err, "large inflate");
- }
-
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- if (d_stream.total_out != 2*uncomprLen + comprLen/2) {
- fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out);
- exit(1);
- } else {
- printf("large_inflate(): OK\n");
- }
-}
-
-/* ===========================================================================
- * Test deflate() with full flush
- */
-void test_flush(Byte *compr, uLong *comprLen) {
- z_stream c_stream; /* compression stream */
- int err;
- uInt len = (uInt)strlen(hello)+1;
-
- c_stream.zalloc = zalloc;
- c_stream.zfree = zfree;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
- CHECK_ERR(err, "deflateInit");
-
- c_stream.next_in = (z_const unsigned char *)hello;
- c_stream.next_out = compr;
- c_stream.avail_in = 3;
- c_stream.avail_out = (uInt)*comprLen;
- err = deflate(&c_stream, Z_FULL_FLUSH);
- CHECK_ERR(err, "deflate");
-
- compr[3]++; /* force an error in first compressed block */
- c_stream.avail_in = len - 3;
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- CHECK_ERR(err, "deflate");
- }
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-
- *comprLen = c_stream.total_out;
-}
-
-/* ===========================================================================
- * Test inflateSync()
- */
-void test_sync(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen) {
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = zalloc;
- d_stream.zfree = zfree;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = 2; /* just read the zlib header */
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- d_stream.next_out = uncompr;
- d_stream.avail_out = (uInt)uncomprLen;
-
- inflate(&d_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "inflate");
-
- d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */
- err = inflateSync(&d_stream); /* but skip the damaged part */
- CHECK_ERR(err, "inflateSync");
-
- err = inflate(&d_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- fprintf(stderr, "inflate reported %i != %i (Z_STREAM_END)\n", err, Z_STREAM_END);
- /* Because of incorrect adler32 */
- exit(1);
- }
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- printf("after inflateSync(): hel%s\n", (char *)uncompr);
-}
-
-/* ===========================================================================
- * Test deflate() with preset dictionary
- */
-void test_dict_deflate(Byte *compr, uLong comprLen) {
- z_stream c_stream; /* compression stream */
- int err;
-
- c_stream.zalloc = zalloc;
- c_stream.zfree = zfree;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_BEST_COMPRESSION);
- CHECK_ERR(err, "deflateInit");
-
- err = deflateSetDictionary(&c_stream,
- (const Bytef*)dictionary, (int)sizeof(dictionary));
- CHECK_ERR(err, "deflateSetDictionary");
-
- dictId = c_stream.adler;
- c_stream.next_out = compr;
- c_stream.avail_out = (uInt)comprLen;
-
- c_stream.next_in = (z_const unsigned char *)hello;
- c_stream.avail_in = (uInt)strlen(hello)+1;
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- fprintf(stderr, "deflate should report Z_STREAM_END\n");
- exit(1);
- }
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-}
-
-/* ===========================================================================
- * Test inflate() with a preset dictionary
- */
-void test_dict_inflate(Byte *compr, uLong comprLen, Byte *uncompr,
- uLong uncomprLen) {
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = zalloc;
- d_stream.zfree = zfree;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = (uInt)comprLen;
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- d_stream.next_out = uncompr;
- d_stream.avail_out = (uInt)uncomprLen;
-
- for (;;) {
- err = inflate(&d_stream, Z_NO_FLUSH);
- if (err == Z_STREAM_END) break;
- if (err == Z_NEED_DICT) {
- if (d_stream.adler != dictId) {
- fprintf(stderr, "unexpected dictionary");
- exit(1);
- }
- err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,
- (int)sizeof(dictionary));
- }
- CHECK_ERR(err, "inflate with dict");
- }
-
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad inflate with dict\n");
- exit(1);
- } else {
- printf("inflate with dictionary: %s\n", (char *)uncompr);
- }
-}
-
-/* ===========================================================================
- * Usage: example [output.gz [input.gz]]
- */
-
-int main(int argc, char *argv[]) {
- Byte *compr, *uncompr;
- uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */
- uLong uncomprLen = comprLen;
- static const char* myVersion = ZLIB_VERSION;
-
- if (zlibVersion()[0] != myVersion[0]) {
- fprintf(stderr, "incompatible zlib version\n");
- exit(1);
-
- } else if (strcmp(zlibVersion(), ZLIB_VERSION) != 0) {
- fprintf(stderr, "warning: different zlib version\n");
- }
-
- printf("zlib version %s = 0x%04x, compile flags = 0x%lx\n",
- ZLIB_VERSION, ZLIB_VERNUM, zlibCompileFlags());
- if (ZWRAP_isUsingZSTDcompression()) printf("zstd version %s\n", zstdVersion());
-
- compr = (Byte*)calloc((uInt)comprLen, 1);
- uncompr = (Byte*)calloc((uInt)uncomprLen, 1);
- /* compr and uncompr are cleared to avoid reading uninitialized
- * data and to ensure that uncompr compresses well.
- */
- if (compr == Z_NULL || uncompr == Z_NULL) {
- printf("out of memory\n");
- exit(1);
- }
-
-#ifdef Z_SOLO
- argc = strlen(argv[0]);
-#else
- test_compress(compr, comprLen, uncompr, uncomprLen);
-
- test_gzio((argc > 1 ? argv[1] : TESTFILE),
- uncompr, uncomprLen);
-#endif
-
- test_deflate(compr, comprLen);
- test_inflate(compr, comprLen, uncompr, uncomprLen);
-
- test_large_deflate(compr, comprLen, uncompr, uncomprLen);
- test_large_inflate(compr, comprLen, uncompr, uncomprLen);
-
- if (!ZWRAP_isUsingZSTDcompression()) {
- test_flush(compr, &comprLen);
- test_sync(compr, comprLen, uncompr, uncomprLen);
- }
- comprLen = uncomprLen;
-
- test_dict_deflate(compr, comprLen);
- test_dict_inflate(compr, comprLen, uncompr, uncomprLen);
-
- free(compr);
- free(uncompr);
-
- return 0;
-}
diff --git a/zlibWrapper/examples/example_original.c b/zlibWrapper/examples/example_original.c
deleted file mode 100644
index 828b06c881ca..000000000000
--- a/zlibWrapper/examples/example_original.c
+++ /dev/null
@@ -1,599 +0,0 @@
-/* example.c -- usage example of the zlib compression library
- */
-/*
- Copyright (c) 1995-2006, 2011 Jean-loup Gailly
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgement in the product documentation would be
- appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/* @(#) $Id$ */
-
-#include "zlib.h"
-#include <stdio.h>
-
-#ifdef STDC
-# include <string.h>
-# include <stdlib.h>
-#endif
-
-#if defined(VMS) || defined(RISCOS)
-# define TESTFILE "foo-gz"
-#else
-# define TESTFILE "foo.gz"
-#endif
-
-#define CHECK_ERR(err, msg) { \
- if (err != Z_OK) { \
- fprintf(stderr, "%s error: %d\n", msg, err); \
- exit(1); \
- } \
-}
-
-z_const char hello[] = "hello, hello!";
-/* "hello world" would be more standard, but the repeated "hello"
- * stresses the compression code better, sorry...
- */
-
-const char dictionary[] = "hello";
-uLong dictId; /* Adler32 value of the dictionary */
-
-void test_deflate _Z_OF((Byte *compr, uLong comprLen));
-void test_inflate _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_large_deflate _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_large_inflate _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_flush _Z_OF((Byte *compr, uLong *comprLen));
-void test_sync _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_dict_deflate _Z_OF((Byte *compr, uLong comprLen));
-void test_dict_inflate _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-int main _Z_OF((int argc, char *argv[]));
-
-
-#ifdef Z_SOLO
-
-void *myalloc _Z_OF((void *, unsigned, unsigned));
-void myfree _Z_OF((void *, void *));
-
-void *myalloc(q, n, m)
- void *q;
- unsigned n, m;
-{
- q = Z_NULL;
- return calloc(n, m);
-}
-
-void myfree(void *q, void *p)
-{
- q = Z_NULL;
- free(p);
-}
-
-static alloc_func zalloc = myalloc;
-static free_func zfree = myfree;
-
-#else /* !Z_SOLO */
-
-static alloc_func zalloc = (alloc_func)0;
-static free_func zfree = (free_func)0;
-
-void test_compress _Z_OF((Byte *compr, uLong comprLen,
- Byte *uncompr, uLong uncomprLen));
-void test_gzio _Z_OF((const char *fname,
- Byte *uncompr, uLong uncomprLen));
-
-/* ===========================================================================
- * Test compress() and uncompress()
- */
-void test_compress(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen)
-{
- int err;
- uLong len = (uLong)strlen(hello)+1;
-
- err = compress(compr, &comprLen, (const Bytef*)hello, len);
- CHECK_ERR(err, "compress");
-
- strcpy((char*)uncompr, "garbage");
-
- err = uncompress(uncompr, &uncomprLen, compr, comprLen);
- CHECK_ERR(err, "uncompress");
-
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad uncompress\n");
- exit(1);
- } else {
- printf("uncompress(): %s\n", (char *)uncompr);
- }
-}
-
-/* ===========================================================================
- * Test read/write of .gz files
- */
-void test_gzio(const char *fname /* compressed file name */, Byte *uncompr,
- uLong uncomprLen)
-{
-#ifdef NO_GZCOMPRESS
- fprintf(stderr, "NO_GZCOMPRESS -- gz* functions cannot compress\n");
-#else
- int err;
- int len = (int)strlen(hello)+1;
- gzFile file;
- z_off_t pos;
-
- file = gzopen(fname, "wb");
- if (file == NULL) {
- fprintf(stderr, "gzopen error\n");
- exit(1);
- }
- gzputc(file, 'h');
- if (gzputs(file, "ello") != 4) {
- fprintf(stderr, "gzputs err: %s\n", gzerror(file, &err));
- exit(1);
- }
- if (gzprintf(file, ", %s!", "hello") != 8) {
- fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err));
- exit(1);
- }
- gzseek(file, 1L, SEEK_CUR); /* add one zero byte */
- gzclose(file);
-
- file = gzopen(fname, "rb");
- if (file == NULL) {
- fprintf(stderr, "gzopen error\n");
- exit(1);
- }
- strcpy((char*)uncompr, "garbage");
-
- if (gzread(file, uncompr, (unsigned)uncomprLen) != len) {
- fprintf(stderr, "gzread err: %s\n", gzerror(file, &err));
- exit(1);
- }
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad gzread: %s\n", (char*)uncompr);
- exit(1);
- } else {
- printf("gzread(): %s\n", (char*)uncompr);
- }
-
- pos = gzseek(file, -8L, SEEK_CUR);
- if (pos != 6 || gztell(file) != pos) {
- fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n",
- (long)pos, (long)gztell(file));
- exit(1);
- }
-
- if (gzgetc(file) != ' ') {
- fprintf(stderr, "gzgetc error\n");
- exit(1);
- }
-
- if (gzungetc(' ', file) != ' ') {
- fprintf(stderr, "gzungetc error\n");
- exit(1);
- }
-
- gzgets(file, (char*)uncompr, (int)uncomprLen);
- if (strlen((char*)uncompr) != 7) { /* " hello!" */
- fprintf(stderr, "gzgets err after gzseek: %s\n", gzerror(file, &err));
- exit(1);
- }
- if (strcmp((char*)uncompr, hello + 6)) {
- fprintf(stderr, "bad gzgets after gzseek\n");
- exit(1);
- } else {
- printf("gzgets() after gzseek: %s\n", (char*)uncompr);
- }
-
- gzclose(file);
-#endif
-}
-
-#endif /* Z_SOLO */
-
-/* ===========================================================================
- * Test deflate() with small buffers
- */
-void test_deflate(Byte *compr, uLong comprLen)
-{
- z_stream c_stream; /* compression stream */
- int err;
- uLong len = (uLong)strlen(hello)+1;
-
- c_stream.zalloc = zalloc;
- c_stream.zfree = zfree;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
- CHECK_ERR(err, "deflateInit");
-
- c_stream.next_in = (z_const unsigned char *)hello;
- c_stream.next_out = compr;
-
- while (c_stream.total_in != len && c_stream.total_out < comprLen) {
- c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
- }
- /* Finish the stream, still forcing small buffers: */
- for (;;) {
- c_stream.avail_out = 1;
- err = deflate(&c_stream, Z_FINISH);
- if (err == Z_STREAM_END) break;
- CHECK_ERR(err, "deflate");
- }
-
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-}
-
-/* ===========================================================================
- * Test inflate() with small buffers
- */
-void test_inflate(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen)
-{
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = zalloc;
- d_stream.zfree = zfree;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = 0;
- d_stream.next_out = uncompr;
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) {
- d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */
- err = inflate(&d_stream, Z_NO_FLUSH);
- if (err == Z_STREAM_END) break;
- CHECK_ERR(err, "inflate");
- }
-
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad inflate\n");
- exit(1);
- } else {
- printf("inflate(): %s\n", (char *)uncompr);
- }
-}
-
-/* ===========================================================================
- * Test deflate() with large buffers and dynamic change of compression level
- */
-void test_large_deflate(Byte *compr, uLong comprLen, Byte *uncompr,
- uLong uncomprLen)
-{
- z_stream c_stream; /* compression stream */
- int err;
-
- c_stream.zalloc = zalloc;
- c_stream.zfree = zfree;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_BEST_SPEED);
- CHECK_ERR(err, "deflateInit");
-
- c_stream.next_out = compr;
- c_stream.avail_out = (uInt)comprLen;
-
- /* At this point, uncompr is still mostly zeroes, so it should compress
- * very well:
- */
- c_stream.next_in = uncompr;
- c_stream.avail_in = (uInt)uncomprLen;
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
- if (c_stream.avail_in != 0) {
- fprintf(stderr, "deflate not greedy\n");
- exit(1);
- }
-
- /* Feed in already compressed data and switch to no compression: */
- deflateParams(&c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY);
- c_stream.next_in = compr;
- c_stream.avail_in = (uInt)comprLen/2;
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
-
- /* Switch back to compressing mode: */
- deflateParams(&c_stream, Z_BEST_COMPRESSION, Z_FILTERED);
- c_stream.next_in = uncompr;
- c_stream.avail_in = (uInt)uncomprLen;
- err = deflate(&c_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "deflate");
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- fprintf(stderr, "deflate should report Z_STREAM_END\n");
- exit(1);
- }
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-}
-
-/* ===========================================================================
- * Test inflate() with large buffers
- */
-void test_large_inflate(Byte *compr, uLong comprLen, Byte *uncompr,
- uLong uncomprLen)
-{
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = zalloc;
- d_stream.zfree = zfree;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = (uInt)comprLen;
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- for (;;) {
- d_stream.next_out = uncompr; /* discard the output */
- d_stream.avail_out = (uInt)uncomprLen;
- err = inflate(&d_stream, Z_NO_FLUSH);
- if (err == Z_STREAM_END) break;
- CHECK_ERR(err, "large inflate");
- }
-
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- if (d_stream.total_out != 2*uncomprLen + comprLen/2) {
- fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out);
- exit(1);
- } else {
- printf("large_inflate(): OK\n");
- }
-}
-
-/* ===========================================================================
- * Test deflate() with full flush
- */
-void test_flush(Byte *compr, uLong comprLen)
-{
- z_stream c_stream; /* compression stream */
- int err;
- uInt len = (uInt)strlen(hello)+1;
-
- c_stream.zalloc = zalloc;
- c_stream.zfree = zfree;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION);
- CHECK_ERR(err, "deflateInit");
-
- c_stream.next_in = (z_const unsigned char *)hello;
- c_stream.next_out = compr;
- c_stream.avail_in = 3;
- c_stream.avail_out = (uInt)*comprLen;
- err = deflate(&c_stream, Z_FULL_FLUSH);
- CHECK_ERR(err, "deflate");
-
- compr[3]++; /* force an error in first compressed block */
- c_stream.avail_in = len - 3;
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- CHECK_ERR(err, "deflate");
- }
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-
- *comprLen = c_stream.total_out;
-}
-
-/* ===========================================================================
- * Test inflateSync()
- */
-void test_sync(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen)
-{
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = zalloc;
- d_stream.zfree = zfree;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = 2; /* just read the zlib header */
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- d_stream.next_out = uncompr;
- d_stream.avail_out = (uInt)uncomprLen;
-
- inflate(&d_stream, Z_NO_FLUSH);
- CHECK_ERR(err, "inflate");
-
- d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */
- err = inflateSync(&d_stream); /* but skip the damaged part */
- CHECK_ERR(err, "inflateSync");
-
- err = inflate(&d_stream, Z_FINISH);
- if (err != Z_DATA_ERROR) {
- fprintf(stderr, "inflate should report DATA_ERROR\n");
- /* Because of incorrect adler32 */
- exit(1);
- }
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- printf("after inflateSync(): hel%s\n", (char *)uncompr);
-}
-
-/* ===========================================================================
- * Test deflate() with preset dictionary
- */
-void test_dict_deflate(Byte *compr, uLong comprLen)
-{
- z_stream c_stream; /* compression stream */
- int err;
-
- c_stream.zalloc = zalloc;
- c_stream.zfree = zfree;
- c_stream.opaque = (voidpf)0;
-
- err = deflateInit(&c_stream, Z_BEST_COMPRESSION);
- CHECK_ERR(err, "deflateInit");
-
- err = deflateSetDictionary(&c_stream,
- (const Bytef*)dictionary, (int)sizeof(dictionary));
- CHECK_ERR(err, "deflateSetDictionary");
-
- dictId = c_stream.adler;
- c_stream.next_out = compr;
- c_stream.avail_out = (uInt)comprLen;
-
- c_stream.next_in = (z_const unsigned char *)hello;
- c_stream.avail_in = (uInt)strlen(hello)+1;
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- fprintf(stderr, "deflate should report Z_STREAM_END\n");
- exit(1);
- }
- err = deflateEnd(&c_stream);
- CHECK_ERR(err, "deflateEnd");
-}
-
-/* ===========================================================================
- * Test inflate() with a preset dictionary
- */
-void test_dict_inflate(Byte *compr, uLong comprLen, Byte *uncompr,
- uLong uncomprLen)
-{
- int err;
- z_stream d_stream; /* decompression stream */
-
- strcpy((char*)uncompr, "garbage");
-
- d_stream.zalloc = zalloc;
- d_stream.zfree = zfree;
- d_stream.opaque = (voidpf)0;
-
- d_stream.next_in = compr;
- d_stream.avail_in = (uInt)comprLen;
-
- err = inflateInit(&d_stream);
- CHECK_ERR(err, "inflateInit");
-
- d_stream.next_out = uncompr;
- d_stream.avail_out = (uInt)uncomprLen;
-
- for (;;) {
- err = inflate(&d_stream, Z_NO_FLUSH);
- if (err == Z_STREAM_END) break;
- if (err == Z_NEED_DICT) {
- if (d_stream.adler != dictId) {
- fprintf(stderr, "unexpected dictionary");
- exit(1);
- }
- err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,
- (int)sizeof(dictionary));
- }
- CHECK_ERR(err, "inflate with dict");
- }
-
- err = inflateEnd(&d_stream);
- CHECK_ERR(err, "inflateEnd");
-
- if (strcmp((char*)uncompr, hello)) {
- fprintf(stderr, "bad inflate with dict\n");
- exit(1);
- } else {
- printf("inflate with dictionary: %s\n", (char *)uncompr);
- }
-}
-
-/* ===========================================================================
- * Usage: example [output.gz [input.gz]]
- */
-
-int main(int argc, char *argv[])
-{
- Byte *compr, *uncompr;
- uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */
- uLong uncomprLen = comprLen;
- static const char* myVersion = ZLIB_VERSION;
-
- if (zlibVersion()[0] != myVersion[0]) {
- fprintf(stderr, "incompatible zlib version\n");
- exit(1);
-
- } else if (strcmp(zlibVersion(), ZLIB_VERSION) != 0) {
- fprintf(stderr, "warning: different zlib version\n");
- }
-
- printf("zlib version %s = 0x%04x, compile flags = 0x%lx\n",
- ZLIB_VERSION, ZLIB_VERNUM, zlibCompileFlags());
-
- compr = (Byte*)calloc((uInt)comprLen, 1);
- uncompr = (Byte*)calloc((uInt)uncomprLen, 1);
- /* compr and uncompr are cleared to avoid reading uninitialized
- * data and to ensure that uncompr compresses well.
- */
- if (compr == Z_NULL || uncompr == Z_NULL) {
- printf("out of memory\n");
- exit(1);
- }
-
-#ifdef Z_SOLO
- argc = strlen(argv[0]);
-#else
- test_compress(compr, comprLen, uncompr, uncomprLen);
-
- test_gzio((argc > 1 ? argv[1] : TESTFILE),
- uncompr, uncomprLen);
-#endif
-
- test_deflate(compr, comprLen);
- test_inflate(compr, comprLen, uncompr, uncomprLen);
-
- test_large_deflate(compr, comprLen, uncompr, uncomprLen);
- test_large_inflate(compr, comprLen, uncompr, uncomprLen);
-
- test_flush(compr, &comprLen);
- test_sync(compr, comprLen, uncompr, uncomprLen);
- comprLen = uncomprLen;
-
- test_dict_deflate(compr, comprLen);
- test_dict_inflate(compr, comprLen, uncompr, uncomprLen);
-
- free(compr);
- free(uncompr);
-
- return 0;
-}
diff --git a/zlibWrapper/examples/fitblk.c b/zlibWrapper/examples/fitblk.c
deleted file mode 100644
index 8dc7071ee96c..000000000000
--- a/zlibWrapper/examples/fitblk.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/* fitblk.c contains minimal changes required to be compiled with zlibWrapper:
- * - #include "zlib.h" was changed to #include "zstd_zlibwrapper.h"
- * - writing block to stdout was disabled */
-
-/* fitblk.c: example of fitting compressed output to a specified size
- Not copyrighted -- provided to the public domain
- Version 1.1 25 November 2004 Mark Adler */
-
-/* Version history:
- 1.0 24 Nov 2004 First version
- 1.1 25 Nov 2004 Change deflateInit2() to deflateInit()
- Use fixed-size, stack-allocated raw buffers
- Simplify code moving compression to subroutines
- Use assert() for internal errors
- Add detailed description of approach
- */
-
-/* Approach to just fitting a requested compressed size:
-
- fitblk performs three compression passes on a portion of the input
- data in order to determine how much of that input will compress to
- nearly the requested output block size. The first pass generates
- enough deflate blocks to produce output to fill the requested
- output size plus a specified excess amount (see the EXCESS define
- below). The last deflate block may go quite a bit past that, but
- is discarded. The second pass decompresses and recompresses just
- the compressed data that fit in the requested plus excess sized
- buffer. The deflate process is terminated after that amount of
- input, which is less than the amount consumed on the first pass.
- The last deflate block of the result will be of a comparable size
- to the final product, so that the header for that deflate block and
- the compression ratio for that block will be about the same as in
- the final product. The third compression pass decompresses the
- result of the second step, but only the compressed data up to the
- requested size minus an amount to allow the compressed stream to
- complete (see the MARGIN define below). That will result in a
- final compressed stream whose length is less than or equal to the
- requested size. Assuming sufficient input and a requested size
- greater than a few hundred bytes, the shortfall will typically be
- less than ten bytes.
-
- If the input is short enough that the first compression completes
- before filling the requested output size, then that compressed
- stream is return with no recompression.
-
- EXCESS is chosen to be just greater than the shortfall seen in a
- two pass approach similar to the above. That shortfall is due to
- the last deflate block compressing more efficiently with a smaller
- header on the second pass. EXCESS is set to be large enough so
- that there is enough uncompressed data for the second pass to fill
- out the requested size, and small enough so that the final deflate
- block of the second pass will be close in size to the final deflate
- block of the third and final pass. MARGIN is chosen to be just
- large enough to assure that the final compression has enough room
- to complete in all cases.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include "zstd_zlibwrapper.h"
-
-#define LOG_FITBLK(...) /*printf(__VA_ARGS__)*/
-#define local static
-
-/* print nastygram and leave */
-local void quit(char *why)
-{
- fprintf(stderr, "fitblk abort: %s\n", why);
- exit(1);
-}
-
-#define RAWLEN 4096 /* intermediate uncompressed buffer size */
-
-/* compress from file to def until provided buffer is full or end of
- input reached; return last deflate() return value, or Z_ERRNO if
- there was read error on the file */
-local int partcompress(FILE *in, z_streamp def)
-{
- int ret, flush;
- unsigned char raw[RAWLEN];
-
- flush = Z_SYNC_FLUSH;
- do {
- def->avail_in = (uInt)fread(raw, 1, RAWLEN, in);
- if (ferror(in))
- return Z_ERRNO;
- def->next_in = raw;
- if (feof(in))
- flush = Z_FINISH;
- LOG_FITBLK("partcompress1 avail_in=%d total_in=%d avail_out=%d total_out=%d\n", (int)def->avail_in, (int)def->total_in, (int)def->avail_out, (int)def->total_out);
- ret = deflate(def, flush);
- LOG_FITBLK("partcompress2 ret=%d avail_in=%d total_in=%d avail_out=%d total_out=%d\n", ret, (int)def->avail_in, (int)def->total_in, (int)def->avail_out, (int)def->total_out);
- assert(ret != Z_STREAM_ERROR);
- } while (def->avail_out != 0 && flush == Z_SYNC_FLUSH);
- return ret;
-}
-
-/* recompress from inf's input to def's output; the input for inf and
- the output for def are set in those structures before calling;
- return last deflate() return value, or Z_MEM_ERROR if inflate()
- was not able to allocate enough memory when it needed to */
-local int recompress(z_streamp inf, z_streamp def)
-{
- int ret, flush;
- unsigned char raw[RAWLEN];
-
- flush = Z_NO_FLUSH;
- LOG_FITBLK("recompress start\n");
- do {
- /* decompress */
- inf->avail_out = RAWLEN;
- inf->next_out = raw;
- LOG_FITBLK("recompress1inflate avail_in=%d total_in=%d avail_out=%d total_out=%d\n", (int)inf->avail_in, (int)inf->total_in, (int)inf->avail_out, (int)inf->total_out);
- ret = inflate(inf, Z_NO_FLUSH);
- LOG_FITBLK("recompress2inflate avail_in=%d total_in=%d avail_out=%d total_out=%d\n", (int)inf->avail_in, (int)inf->total_in, (int)inf->avail_out, (int)inf->total_out);
- assert(ret != Z_STREAM_ERROR && ret != Z_DATA_ERROR &&
- ret != Z_NEED_DICT);
- if (ret == Z_MEM_ERROR)
- return ret;
-
- /* compress what was decompressed until done or no room */
- def->avail_in = RAWLEN - inf->avail_out;
- def->next_in = raw;
- if (inf->avail_out != 0)
- flush = Z_FINISH;
- LOG_FITBLK("recompress1deflate avail_in=%d total_in=%d avail_out=%d total_out=%d\n", (int)def->avail_in, (int)def->total_in, (int)def->avail_out, (int)def->total_out);
- ret = deflate(def, flush);
- LOG_FITBLK("recompress2deflate ret=%d avail_in=%d total_in=%d avail_out=%d total_out=%d\n", ret, (int)def->avail_in, (int)def->total_in, (int)def->avail_out, (int)def->total_out);
- assert(ret != Z_STREAM_ERROR);
- } while (ret != Z_STREAM_END && def->avail_out != 0);
- return ret;
-}
-
-#define EXCESS 256 /* empirically determined stream overage */
-#define MARGIN 8 /* amount to back off for completion */
-
-/* compress from stdin to fixed-size block on stdout */
-int main(int argc, char **argv)
-{
- int ret; /* return code */
- unsigned size; /* requested fixed output block size */
- unsigned have; /* bytes written by deflate() call */
- unsigned char *blk; /* intermediate and final stream */
- unsigned char *tmp; /* close to desired size stream */
- z_stream def, inf; /* zlib deflate and inflate states */
-
- /* get requested output size */
- if (argc != 2)
- quit("need one argument: size of output block");
- ret = (int)strtol(argv[1], argv + 1, 10);
- if (argv[1][0] != 0)
- quit("argument must be a number");
- if (ret < 8) /* 8 is minimum zlib stream size */
- quit("need positive size of 8 or greater");
- size = (unsigned)ret;
-
- printf("zlib version %s\n", ZLIB_VERSION);
- if (ZWRAP_isUsingZSTDcompression()) printf("zstd version %s\n", zstdVersion());
-
- /* allocate memory for buffers and compression engine */
- blk = (unsigned char*)malloc(size + EXCESS);
- def.zalloc = Z_NULL;
- def.zfree = Z_NULL;
- def.opaque = Z_NULL;
- ret = deflateInit(&def, Z_DEFAULT_COMPRESSION);
- if (ret != Z_OK || blk == NULL)
- quit("out of memory");
-
- /* compress from stdin until output full, or no more input */
- def.avail_out = size + EXCESS;
- def.next_out = blk;
- LOG_FITBLK("partcompress1 total_in=%d total_out=%d\n", (int)def.total_in, (int)def.total_out);
- ret = partcompress(stdin, &def);
- printf("partcompress total_in=%d total_out=%d\n", (int)def.total_in, (int)def.total_out);
- if (ret == Z_ERRNO)
- quit("error reading input");
-
- /* if it all fit, then size was undersubscribed -- done! */
- if (ret == Z_STREAM_END && def.avail_out >= EXCESS) {
- /* write block to stdout */
- have = size + EXCESS - def.avail_out;
- /* if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))
- * quit("error writing output"); */
-
- /* clean up and print results to stderr */
- ret = deflateEnd(&def);
- assert(ret != Z_STREAM_ERROR);
- free(blk);
- fprintf(stderr,
- "%u bytes unused out of %u requested (all input)\n",
- size - have, size);
- return 0;
- }
-
- /* it didn't all fit -- set up for recompression */
- inf.zalloc = Z_NULL;
- inf.zfree = Z_NULL;
- inf.opaque = Z_NULL;
- inf.avail_in = 0;
- inf.next_in = Z_NULL;
- ret = inflateInit(&inf);
- tmp = (unsigned char*)malloc(size + EXCESS);
- if (ret != Z_OK || tmp == NULL)
- quit("out of memory");
- ret = deflateReset(&def);
- assert(ret != Z_STREAM_ERROR);
-
- /* do first recompression close to the right amount */
- inf.avail_in = size + EXCESS;
- inf.next_in = blk;
- def.avail_out = size + EXCESS;
- def.next_out = tmp;
- LOG_FITBLK("recompress1 inf.total_in=%d def.total_out=%d\n", (int)inf.total_in, (int)def.total_out);
- ret = recompress(&inf, &def);
- LOG_FITBLK("recompress1 inf.total_in=%d def.total_out=%d\n", (int)inf.total_in, (int)def.total_out);
- if (ret == Z_MEM_ERROR)
- quit("out of memory");
-
- /* set up for next recompression */
- ret = inflateReset(&inf);
- assert(ret != Z_STREAM_ERROR);
- ret = deflateReset(&def);
- assert(ret != Z_STREAM_ERROR);
-
- /* do second and final recompression (third compression) */
- inf.avail_in = size - MARGIN; /* assure stream will complete */
- inf.next_in = tmp;
- def.avail_out = size;
- def.next_out = blk;
- LOG_FITBLK("recompress2 inf.total_in=%d def.total_out=%d\n", (int)inf.total_in, (int)def.total_out);
- ret = recompress(&inf, &def);
- LOG_FITBLK("recompress2 inf.total_in=%d def.total_out=%d\n", (int)inf.total_in, (int)def.total_out);
- if (ret == Z_MEM_ERROR)
- quit("out of memory");
- assert(ret == Z_STREAM_END); /* otherwise MARGIN too small */
-
- /* done -- write block to stdout */
- have = size - def.avail_out;
- /* if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))
- * quit("error writing output"); */
-
- /* clean up and print results to stderr */
- free(tmp);
- ret = inflateEnd(&inf);
- assert(ret != Z_STREAM_ERROR);
- ret = deflateEnd(&def);
- assert(ret != Z_STREAM_ERROR);
- free(blk);
- fprintf(stderr,
- "%u bytes unused out of %u requested (%lu input)\n",
- size - have, size, def.total_in);
- return 0;
-}
diff --git a/zlibWrapper/examples/fitblk_original.c b/zlibWrapper/examples/fitblk_original.c
deleted file mode 100644
index 723dc0028127..000000000000
--- a/zlibWrapper/examples/fitblk_original.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/* fitblk.c: example of fitting compressed output to a specified size
- Not copyrighted -- provided to the public domain
- Version 1.1 25 November 2004 Mark Adler */
-
-/* Version history:
- 1.0 24 Nov 2004 First version
- 1.1 25 Nov 2004 Change deflateInit2() to deflateInit()
- Use fixed-size, stack-allocated raw buffers
- Simplify code moving compression to subroutines
- Use assert() for internal errors
- Add detailed description of approach
- */
-
-/* Approach to just fitting a requested compressed size:
-
- fitblk performs three compression passes on a portion of the input
- data in order to determine how much of that input will compress to
- nearly the requested output block size. The first pass generates
- enough deflate blocks to produce output to fill the requested
- output size plus a specified excess amount (see the EXCESS define
- below). The last deflate block may go quite a bit past that, but
- is discarded. The second pass decompresses and recompresses just
- the compressed data that fit in the requested plus excess sized
- buffer. The deflate process is terminated after that amount of
- input, which is less than the amount consumed on the first pass.
- The last deflate block of the result will be of a comparable size
- to the final product, so that the header for that deflate block and
- the compression ratio for that block will be about the same as in
- the final product. The third compression pass decompresses the
- result of the second step, but only the compressed data up to the
- requested size minus an amount to allow the compressed stream to
- complete (see the MARGIN define below). That will result in a
- final compressed stream whose length is less than or equal to the
- requested size. Assuming sufficient input and a requested size
- greater than a few hundred bytes, the shortfall will typically be
- less than ten bytes.
-
- If the input is short enough that the first compression completes
- before filling the requested output size, then that compressed
- stream is return with no recompression.
-
- EXCESS is chosen to be just greater than the shortfall seen in a
- two pass approach similar to the above. That shortfall is due to
- the last deflate block compressing more efficiently with a smaller
- header on the second pass. EXCESS is set to be large enough so
- that there is enough uncompressed data for the second pass to fill
- out the requested size, and small enough so that the final deflate
- block of the second pass will be close in size to the final deflate
- block of the third and final pass. MARGIN is chosen to be just
- large enough to assure that the final compression has enough room
- to complete in all cases.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include "zlib.h"
-
-#define local static
-
-/* print nastygram and leave */
-local void quit(char *why)
-{
- fprintf(stderr, "fitblk abort: %s\n", why);
- exit(1);
-}
-
-#define RAWLEN 4096 /* intermediate uncompressed buffer size */
-
-/* compress from file to def until provided buffer is full or end of
- input reached; return last deflate() return value, or Z_ERRNO if
- there was read error on the file */
-local int partcompress(FILE *in, z_streamp def)
-{
- int ret, flush;
- unsigned char raw[RAWLEN];
-
- flush = Z_NO_FLUSH;
- do {
- def->avail_in = fread(raw, 1, RAWLEN, in);
- if (ferror(in))
- return Z_ERRNO;
- def->next_in = raw;
- if (feof(in))
- flush = Z_FINISH;
- ret = deflate(def, flush);
- assert(ret != Z_STREAM_ERROR);
- } while (def->avail_out != 0 && flush == Z_NO_FLUSH);
- return ret;
-}
-
-/* recompress from inf's input to def's output; the input for inf and
- the output for def are set in those structures before calling;
- return last deflate() return value, or Z_MEM_ERROR if inflate()
- was not able to allocate enough memory when it needed to */
-local int recompress(z_streamp inf, z_streamp def)
-{
- int ret, flush;
- unsigned char raw[RAWLEN];
-
- flush = Z_NO_FLUSH;
- do {
- /* decompress */
- inf->avail_out = RAWLEN;
- inf->next_out = raw;
- ret = inflate(inf, Z_NO_FLUSH);
- assert(ret != Z_STREAM_ERROR && ret != Z_DATA_ERROR &&
- ret != Z_NEED_DICT);
- if (ret == Z_MEM_ERROR)
- return ret;
-
- /* compress what was decompressed until done or no room */
- def->avail_in = RAWLEN - inf->avail_out;
- def->next_in = raw;
- if (inf->avail_out != 0)
- flush = Z_FINISH;
- ret = deflate(def, flush);
- assert(ret != Z_STREAM_ERROR);
- } while (ret != Z_STREAM_END && def->avail_out != 0);
- return ret;
-}
-
-#define EXCESS 256 /* empirically determined stream overage */
-#define MARGIN 8 /* amount to back off for completion */
-
-/* compress from stdin to fixed-size block on stdout */
-int main(int argc, char **argv)
-{
- int ret; /* return code */
- unsigned size; /* requested fixed output block size */
- unsigned have; /* bytes written by deflate() call */
- unsigned char *blk; /* intermediate and final stream */
- unsigned char *tmp; /* close to desired size stream */
- z_stream def, inf; /* zlib deflate and inflate states */
-
- /* get requested output size */
- if (argc != 2)
- quit("need one argument: size of output block");
- ret = strtol(argv[1], argv + 1, 10);
- if (argv[1][0] != 0)
- quit("argument must be a number");
- if (ret < 8) /* 8 is minimum zlib stream size */
- quit("need positive size of 8 or greater");
- size = (unsigned)ret;
-
- /* allocate memory for buffers and compression engine */
- blk = malloc(size + EXCESS);
- def.zalloc = Z_NULL;
- def.zfree = Z_NULL;
- def.opaque = Z_NULL;
- ret = deflateInit(&def, Z_DEFAULT_COMPRESSION);
- if (ret != Z_OK || blk == NULL)
- quit("out of memory");
-
- /* compress from stdin until output full, or no more input */
- def.avail_out = size + EXCESS;
- def.next_out = blk;
- ret = partcompress(stdin, &def);
- if (ret == Z_ERRNO)
- quit("error reading input");
-
- /* if it all fit, then size was undersubscribed -- done! */
- if (ret == Z_STREAM_END && def.avail_out >= EXCESS) {
- /* write block to stdout */
- have = size + EXCESS - def.avail_out;
- if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))
- quit("error writing output");
-
- /* clean up and print results to stderr */
- ret = deflateEnd(&def);
- assert(ret != Z_STREAM_ERROR);
- free(blk);
- fprintf(stderr,
- "%u bytes unused out of %u requested (all input)\n",
- size - have, size);
- return 0;
- }
-
- /* it didn't all fit -- set up for recompression */
- inf.zalloc = Z_NULL;
- inf.zfree = Z_NULL;
- inf.opaque = Z_NULL;
- inf.avail_in = 0;
- inf.next_in = Z_NULL;
- ret = inflateInit(&inf);
- tmp = malloc(size + EXCESS);
- if (ret != Z_OK || tmp == NULL)
- quit("out of memory");
- ret = deflateReset(&def);
- assert(ret != Z_STREAM_ERROR);
-
- /* do first recompression close to the right amount */
- inf.avail_in = size + EXCESS;
- inf.next_in = blk;
- def.avail_out = size + EXCESS;
- def.next_out = tmp;
- ret = recompress(&inf, &def);
- if (ret == Z_MEM_ERROR)
- quit("out of memory");
-
- /* set up for next recompression */
- ret = inflateReset(&inf);
- assert(ret != Z_STREAM_ERROR);
- ret = deflateReset(&def);
- assert(ret != Z_STREAM_ERROR);
-
- /* do second and final recompression (third compression) */
- inf.avail_in = size - MARGIN; /* assure stream will complete */
- inf.next_in = tmp;
- def.avail_out = size;
- def.next_out = blk;
- ret = recompress(&inf, &def);
- if (ret == Z_MEM_ERROR)
- quit("out of memory");
- assert(ret == Z_STREAM_END); /* otherwise MARGIN too small */
-
- /* done -- write block to stdout */
- have = size - def.avail_out;
- if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))
- quit("error writing output");
-
- /* clean up and print results to stderr */
- free(tmp);
- ret = inflateEnd(&inf);
- assert(ret != Z_STREAM_ERROR);
- ret = deflateEnd(&def);
- assert(ret != Z_STREAM_ERROR);
- free(blk);
- fprintf(stderr,
- "%u bytes unused out of %u requested (%lu input)\n",
- size - have, size, def.total_in);
- return 0;
-}
diff --git a/zlibWrapper/examples/minigzip.c b/zlibWrapper/examples/minigzip.c
deleted file mode 100644
index ef48d74d2906..000000000000
--- a/zlibWrapper/examples/minigzip.c
+++ /dev/null
@@ -1,605 +0,0 @@
-/* minigzip.c contains minimal changes required to be compiled with zlibWrapper:
- * - #include "zlib.h" was changed to #include "zstd_zlibwrapper.h" */
-
-/* minigzip.c -- simulate gzip using the zlib compression library
- * Copyright (C) 1995-2006, 2010, 2011 Jean-loup Gailly.
- * For conditions of distribution and use, see https://www.zlib.net/zlib_license.html
- */
-
-/*
- * minigzip is a minimal implementation of the gzip utility. This is
- * only an example of using zlib and isn't meant to replace the
- * full-featured gzip. No attempt is made to deal with file systems
- * limiting names to 14 or 8+3 characters, etc... Error checking is
- * very limited. So use minigzip only for testing; use gzip for the
- * real thing. On MSDOS, use only on file names without extension
- * or in pipe mode.
- */
-
-/* @(#) $Id$ */
-
-#define _POSIX_SOURCE /* fileno */
-
-#include "zstd_zlibwrapper.h"
-#include <stdio.h>
-
-#ifdef STDC
-# include <string.h>
-# include <stdlib.h>
-#endif
-
-#ifdef USE_MMAP
-# include <sys/types.h>
-# include <sys/mman.h>
-# include <sys/stat.h>
-#endif
-
-#if defined(MSDOS) || defined(OS2) || defined(_WIN32) || defined(__CYGWIN__)
-# include <fcntl.h>
-# include <io.h>
-# ifdef UNDER_CE
-# include <stdlib.h>
-# endif
-# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
-#else
-# define SET_BINARY_MODE(file)
-#endif
-
-#ifdef _MSC_VER
-# define snprintf _snprintf
-#endif
-
-#ifdef VMS
-# define unlink delete
-# define GZ_SUFFIX "-gz"
-#endif
-#ifdef RISCOS
-# define unlink remove
-# define GZ_SUFFIX "-gz"
-# define fileno(file) file->__file
-#endif
-#if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
-# include <unix.h> /* for fileno */
-#endif
-
-#if !defined(Z_HAVE_UNISTD_H) && !defined(_LARGEFILE64_SOURCE)
-#ifndef _WIN32 /* unlink already in stdio.h for WIN32 */
- extern int unlink _Z_OF((const char *));
-#endif
-#endif
-
-#if defined(UNDER_CE)
-# include <windows.h>
-# define perror(s) pwinerror(s)
-
-/* Map the Windows error number in ERROR to a locale-dependent error
- message string and return a pointer to it. Typically, the values
- for ERROR come from GetLastError.
-
- The string pointed to shall not be modified by the application,
- but may be overwritten by a subsequent call to strwinerror
-
- The strwinerror function does not change the current setting
- of GetLastError. */
-
-static char *strwinerror(DWORD error)
-{
- static char buf[1024];
-
- wchar_t *msgbuf;
- DWORD lasterr = GetLastError();
- DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
- | FORMAT_MESSAGE_ALLOCATE_BUFFER,
- NULL,
- error,
- 0, /* Default language */
- (LPVOID)&msgbuf,
- 0,
- NULL);
- if (chars != 0) {
- /* If there is an \r\n appended, zap it. */
- if (chars >= 2
- && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') {
- chars -= 2;
- msgbuf[chars] = 0;
- }
-
- if (chars > sizeof (buf) - 1) {
- chars = sizeof (buf) - 1;
- msgbuf[chars] = 0;
- }
-
- wcstombs(buf, msgbuf, chars + 1);
- LocalFree(msgbuf);
- }
- else {
- sprintf(buf, "unknown win32 error (%ld)", error);
- }
-
- SetLastError(lasterr);
- return buf;
-}
-
-static void pwinerror (const char *s)
-{
- if (s && *s)
- fprintf(stderr, "%s: %s\n", s, strwinerror(GetLastError ()));
- else
- fprintf(stderr, "%s\n", strwinerror(GetLastError ()));
-}
-
-#endif /* UNDER_CE */
-
-#ifndef GZ_SUFFIX
-# define GZ_SUFFIX ".gz"
-#endif
-#define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1)
-
-#define BUFLEN 16384
-#define MAX_NAME_LEN 1024
-
-#ifdef MAXSEG_64K
-# define local static
- /* Needed for systems with limitation on stack size. */
-#else
-# define local
-#endif
-
-#ifdef Z_SOLO
-/* for Z_SOLO, create simplified gz* functions using deflate and inflate */
-
-#if defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE)
-# include <unistd.h> /* for unlink() */
-#endif
-
-void *myalloc _Z_OF((void *, unsigned, unsigned));
-void myfree _Z_OF((void *, void *));
-
-void *myalloc(q, n, m)
- void *q;
- unsigned n, m;
-{
- q = Z_NULL;
- return calloc(n, m);
-}
-
-void myfree(q, p)
- void *q, *p;
-{
- q = Z_NULL;
- free(p);
-}
-
-typedef struct gzFile_s {
- FILE *file;
- int write;
- int err;
- char *msg;
- z_stream strm;
-} *gzFile;
-
-gzFile gzopen _Z_OF((const char *, const char *));
-gzFile gzdopen _Z_OF((int, const char *));
-gzFile gz_open _Z_OF((const char *, int, const char *));
-
-gzFile gzopen(path, mode)
-const char *path;
-const char *mode;
-{
- return gz_open(path, -1, mode);
-}
-
-gzFile gzdopen(fd, mode)
-int fd;
-const char *mode;
-{
- return gz_open(NULL, fd, mode);
-}
-
-gzFile gz_open(const char *path, int fd, const char *mode) {
- gzFile gz;
- int ret;
-
- gz = malloc(sizeof(struct gzFile_s));
- if (gz == NULL)
- return NULL;
- gz->write = strchr(mode, 'w') != NULL;
- gz->strm.zalloc = myalloc;
- gz->strm.zfree = myfree;
- gz->strm.opaque = Z_NULL;
- if (gz->write)
- ret = deflateInit2(&(gz->strm), -1, 8, 15 + 16, 8, 0);
- else {
- gz->strm.next_in = 0;
- gz->strm.avail_in = Z_NULL;
- ret = inflateInit2(&(gz->strm), 15 + 16);
- }
- if (ret != Z_OK) {
- free(gz);
- return NULL;
- }
- gz->file = path == NULL ? fdopen(fd, gz->write ? "wb" : "rb") :
- fopen(path, gz->write ? "wb" : "rb");
- if (gz->file == NULL) {
- gz->write ? deflateEnd(&(gz->strm)) : inflateEnd(&(gz->strm));
- free(gz);
- return NULL;
- }
- gz->err = 0;
- gz->msg = "";
- return gz;
-}
-
-int gzwrite _Z_OF((gzFile, const void *, unsigned));
-
-int gzwrite(gzFile gz, const void *buf, unsigned len) {
- z_stream *strm;
- unsigned char out[BUFLEN] = { 0 };
-
- if (gz == NULL || !gz->write)
- return 0;
- strm = &(gz->strm);
- strm->next_in = (void *)buf;
- strm->avail_in = len;
- do {
- strm->next_out = out;
- strm->avail_out = BUFLEN;
- (void)deflate(strm, Z_NO_FLUSH);
- fwrite(out, 1, BUFLEN - strm->avail_out, gz->file);
- } while (strm->avail_out == 0);
- return len;
-}
-
-int gzread _Z_OF((gzFile, void *, unsigned));
-
-int gzread(gzFile gz, void *buf, unsigned len) {
- int ret;
- unsigned got;
- unsigned char in[1];
- z_stream *strm;
-
- if (gz == NULL || gz->write)
- return 0;
- if (gz->err)
- return 0;
- strm = &(gz->strm);
- strm->next_out = (void *)buf;
- strm->avail_out = len;
- do {
- got = fread(in, 1, 1, gz->file);
- if (got == 0)
- break;
- strm->next_in = in;
- strm->avail_in = 1;
- ret = inflate(strm, Z_NO_FLUSH);
- if (ret == Z_DATA_ERROR) {
- gz->err = Z_DATA_ERROR;
- gz->msg = strm->msg;
- return 0;
- }
- if (ret == Z_STREAM_END)
- inflateReset(strm);
- } while (strm->avail_out);
- return len - strm->avail_out;
-}
-
-int gzclose _Z_OF((gzFile));
-
-int gzclose(gzFile gz) {
- z_stream *strm;
- unsigned char out[BUFLEN] = { 0 };
-
- if (gz == NULL)
- return Z_STREAM_ERROR;
- strm = &(gz->strm);
- if (gz->write) {
- strm->next_in = Z_NULL;
- strm->avail_in = 0;
- do {
- strm->next_out = out;
- strm->avail_out = BUFLEN;
- (void)deflate(strm, Z_FINISH);
- fwrite(out, 1, BUFLEN - strm->avail_out, gz->file);
- } while (strm->avail_out == 0);
- deflateEnd(strm);
- }
- else
- inflateEnd(strm);
- fclose(gz->file);
- free(gz);
- return Z_OK;
-}
-
-const char *gzerror _Z_OF((gzFile, int *));
-
-const char *gzerror(gzFile gz, int *err)
-{
- *err = gz->err;
- return gz->msg;
-}
-
-#endif
-
-char *prog;
-
-void error _Z_OF((const char *msg));
-void gz_compress _Z_OF((FILE *in, gzFile out));
-#ifdef USE_MMAP
-int gz_compress_mmap _Z_OF((FILE *in, gzFile out));
-#endif
-void gz_uncompress _Z_OF((gzFile in, FILE *out));
-void file_compress _Z_OF((char *file, char *mode));
-void file_uncompress _Z_OF((char *file));
-int main _Z_OF((int argc, char *argv[]));
-
-/* ===========================================================================
- * Display error message and exit
- */
-void error(const char *msg)
-{
- fprintf(stderr, "%s: %s\n", prog, msg);
- exit(1);
-}
-
-/* ===========================================================================
- * Compress input to output then close both files.
- */
-
-void gz_compress(FILE *in, gzFile out)
-{
- local char buf[BUFLEN];
- int len;
- int err;
-
-#ifdef USE_MMAP
- /* Try first compressing with mmap. If mmap fails (minigzip used in a
- * pipe), use the normal fread loop.
- */
- if (gz_compress_mmap(in, out) == Z_OK) return;
-#endif
- for (;;) {
- len = (int)fread(buf, 1, sizeof(buf), in);
- if (ferror(in)) {
- perror("fread");
- exit(1);
- }
- if (len == 0) break;
-
- if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err));
- }
- fclose(in);
- if (gzclose(out) != Z_OK) error("failed gzclose");
-}
-
-#ifdef USE_MMAP /* MMAP version, Miguel Albrecht <malbrech@eso.org> */
-
-/* Try compressing the input file at once using mmap. Return Z_OK if
- * if success, Z_ERRNO otherwise.
- */
-int gz_compress_mmap(FILE *in, gzFile out) {
- int len;
- int err;
- int ifd = fileno(in);
- caddr_t buf; /* mmap'ed buffer for the entire input file */
- off_t buf_len; /* length of the input file */
- struct stat sb;
-
- /* Determine the size of the file, needed for mmap: */
- if (fstat(ifd, &sb) < 0) return Z_ERRNO;
- buf_len = sb.st_size;
- if (buf_len <= 0) return Z_ERRNO;
-
- /* Now do the actual mmap: */
- buf = mmap((caddr_t) 0, buf_len, PROT_READ, MAP_SHARED, ifd, (off_t)0);
- if (buf == (caddr_t)(-1)) return Z_ERRNO;
-
- /* Compress the whole file at once: */
- len = gzwrite(out, (char *)buf, (unsigned)buf_len);
-
- if (len != (int)buf_len) error(gzerror(out, &err));
-
- munmap(buf, buf_len);
- fclose(in);
- if (gzclose(out) != Z_OK) error("failed gzclose");
- return Z_OK;
-}
-#endif /* USE_MMAP */
-
-/* ===========================================================================
- * Uncompress input to output then close both files.
- */
-void gz_uncompress(gzFile in, FILE *out) {
- local char buf[BUFLEN];
- int len;
- int err;
-
- for (;;) {
- len = gzread(in, buf, sizeof(buf));
- if (len < 0) error (gzerror(in, &err));
- if (len == 0) break;
-
- if ((int)fwrite(buf, 1, (unsigned)len, out) != len) {
- error("failed fwrite");
- }
- }
- if (fclose(out)) error("failed fclose");
-
- if (gzclose(in) != Z_OK) error("failed gzclose");
-}
-
-
-/* ===========================================================================
- * Compress the given file: create a corresponding .gz file and remove the
- * original.
- */
-void file_compress(char *file, char *mode) {
- local char outfile[MAX_NAME_LEN];
- FILE *in;
- gzFile out;
-
- if (strlen(file) + strlen(GZ_SUFFIX) >= sizeof(outfile)) {
- fprintf(stderr, "%s: filename too long\n", prog);
- exit(1);
- }
-
- strcpy(outfile, file);
- strcat(outfile, GZ_SUFFIX);
-
- in = fopen(file, "rb");
- if (in == NULL) {
- perror(file);
- exit(1);
- }
- out = gzopen(outfile, mode);
- if (out == NULL) {
- fprintf(stderr, "%s: can't gzopen %s\n", prog, outfile);
- exit(1);
- }
- gz_compress(in, out);
-
- unlink(file);
-}
-
-
-/* ===========================================================================
- * Uncompress the given file and remove the original.
- */
-void file_uncompress(char *file) {
- local char buf[MAX_NAME_LEN];
- char *infile, *outfile;
- FILE *out;
- gzFile in;
- size_t len = strlen(file);
-
- if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) {
- fprintf(stderr, "%s: filename too long\n", prog);
- exit(1);
- }
-
- strcpy(buf, file);
-
- if (len > SUFFIX_LEN && strcmp(file+len-SUFFIX_LEN, GZ_SUFFIX) == 0) {
- infile = file;
- outfile = buf;
- outfile[len-3] = '\0';
- } else {
- outfile = file;
- infile = buf;
- strcat(infile, GZ_SUFFIX);
- }
- in = gzopen(infile, "rb");
- if (in == NULL) {
- fprintf(stderr, "%s: can't gzopen %s\n", prog, infile);
- exit(1);
- }
- out = fopen(outfile, "wb");
- if (out == NULL) {
- perror(file);
- exit(1);
- }
-
- gz_uncompress(in, out);
-
- unlink(infile);
-}
-
-
-/* ===========================================================================
- * Usage: minigzip [-c] [-d] [-f] [-h] [-r] [-1 to -9] [files...]
- * -c : write to standard output
- * -d : decompress
- * -f : compress with Z_FILTERED
- * -h : compress with Z_HUFFMAN_ONLY
- * -r : compress with Z_RLE
- * -1 to -9 : compression level
- */
-
-int main(int argc, char *argv[]) {
- int copyout = 0;
- int uncompr = 0;
- gzFile file;
- char *bname, outmode[20];
-
- strcpy(outmode, "wb6 ");
-
- prog = argv[0];
- bname = strrchr(argv[0], '/');
- if (bname)
- bname++;
- else
- bname = argv[0];
- argc--, argv++;
-
- if (!strcmp(bname, "gunzip"))
- uncompr = 1;
- else if (!strcmp(bname, "zcat"))
- copyout = uncompr = 1;
-
- while (argc > 0) {
- if (strcmp(*argv, "-c") == 0)
- copyout = 1;
- else if (strcmp(*argv, "-d") == 0)
- uncompr = 1;
- else if (strcmp(*argv, "-f") == 0)
- outmode[3] = 'f';
- else if (strcmp(*argv, "-h") == 0)
- outmode[3] = 'h';
- else if (strcmp(*argv, "-r") == 0)
- outmode[3] = 'R';
- else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' &&
- (*argv)[2] == 0)
- outmode[2] = (*argv)[1];
- else
- break;
- argc--, argv++;
- }
- if (outmode[3] == ' ')
- outmode[3] = 0;
- if (argc == 0) {
- SET_BINARY_MODE(stdin);
- SET_BINARY_MODE(stdout);
- if (uncompr) {
- file = gzdopen(fileno(stdin), "rb");
- if (file == NULL) error("can't gzdopen stdin");
- gz_uncompress(file, stdout);
- } else {
- file = gzdopen(fileno(stdout), outmode);
- if (file == NULL) error("can't gzdopen stdout");
- gz_compress(stdin, file);
- }
- } else {
- if (copyout) {
- SET_BINARY_MODE(stdout);
- }
- do {
- if (uncompr) {
- if (copyout) {
- file = gzopen(*argv, "rb");
- if (file == NULL)
- fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv);
- else
- gz_uncompress(file, stdout);
- } else {
- file_uncompress(*argv);
- }
- } else {
- if (copyout) {
- FILE * in = fopen(*argv, "rb");
-
- if (in == NULL) {
- perror(*argv);
- } else {
- file = gzdopen(fileno(stdout), outmode);
- if (file == NULL) error("can't gzdopen stdout");
-
- gz_compress(in, file);
- }
-
- } else {
- file_compress(*argv, outmode);
- }
- }
- } while (argv++, --argc);
- }
- return 0;
-}
diff --git a/zlibWrapper/examples/zwrapbench.c b/zlibWrapper/examples/zwrapbench.c
deleted file mode 100644
index 33dcb2a7339c..000000000000
--- a/zlibWrapper/examples/zwrapbench.c
+++ /dev/null
@@ -1,1018 +0,0 @@
-/*
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- * All rights reserved.
- *
- * This source code is licensed under both the BSD-style license (found in the
- * LICENSE file in the root directory of this source tree) and the GPLv2 (found
- * in the COPYING file in the root directory of this source tree).
- */
-
-
-/* *************************************
-* Includes
-***************************************/
-#include "util.h" /* Compiler options, UTIL_GetFileSize, UTIL_sleep */
-#include <stdlib.h> /* malloc, free */
-#include <string.h> /* memset */
-#include <stdio.h> /* fprintf, fopen, ftello64 */
-#include <time.h> /* clock_t, clock, CLOCKS_PER_SEC */
-#include <ctype.h> /* toupper */
-#include <errno.h> /* errno */
-
-#include "timefn.h" /* UTIL_time_t, UTIL_getTime, UTIL_clockSpanMicro, UTIL_waitForNextTick */
-#include "mem.h"
-#define ZSTD_STATIC_LINKING_ONLY
-#include "zstd.h"
-#include "datagen.h" /* RDG_genBuffer */
-#include "xxhash.h"
-
-#include "../zstd_zlibwrapper.h"
-
-
-
-/*-************************************
-* Tuning parameters
-**************************************/
-#ifndef ZSTDCLI_CLEVEL_DEFAULT
-# define ZSTDCLI_CLEVEL_DEFAULT 3
-#endif
-
-
-/*-************************************
-* Constants
-**************************************/
-#define COMPRESSOR_NAME "Zstandard wrapper for zlib command line interface"
-#ifndef ZSTD_VERSION
-# define ZSTD_VERSION "v" ZSTD_VERSION_STRING
-#endif
-#define AUTHOR "Yann Collet"
-#define WELCOME_MESSAGE "*** %s %i-bits %s, by %s ***\n", COMPRESSOR_NAME, (int)(sizeof(size_t)*8), ZSTD_VERSION, AUTHOR
-
-#ifndef ZSTD_GIT_COMMIT
-# define ZSTD_GIT_COMMIT_STRING ""
-#else
-# define ZSTD_GIT_COMMIT_STRING ZSTD_EXPAND_AND_QUOTE(ZSTD_GIT_COMMIT)
-#endif
-
-#define NBLOOPS 3
-#define TIMELOOP_MICROSEC 1*1000000ULL /* 1 second */
-#define ACTIVEPERIOD_MICROSEC 70*1000000ULL /* 70 seconds */
-#define COOLPERIOD_SEC 10
-
-#define KB *(1 <<10)
-#define MB *(1 <<20)
-#define GB *(1U<<30)
-
-static const size_t maxMemory = (sizeof(size_t)==4) ? (2 GB - 64 MB) : (size_t)(1ULL << ((sizeof(size_t)*8)-31));
-
-static U32 g_compressibilityDefault = 50;
-
-
-/* *************************************
-* console display
-***************************************/
-#define DEFAULT_DISPLAY_LEVEL 2
-#define DISPLAY(...) fprintf(displayOut, __VA_ARGS__)
-#define DISPLAYLEVEL(l, ...) if (g_displayLevel>=l) { DISPLAY(__VA_ARGS__); }
-static unsigned g_displayLevel = DEFAULT_DISPLAY_LEVEL; /* 0 : no display; 1: errors; 2 : + result + interaction + warnings; 3 : + progression; 4 : + information */
-static FILE* displayOut;
-
-#define DISPLAYUPDATE(l, ...) if (g_displayLevel>=l) { \
- if ((clock() - g_time > refreshRate) || (g_displayLevel>=4)) \
- { g_time = clock(); DISPLAY(__VA_ARGS__); \
- if (g_displayLevel>=4) fflush(displayOut); } }
-static const clock_t refreshRate = CLOCKS_PER_SEC * 15 / 100;
-static clock_t g_time = 0;
-
-
-/* *************************************
-* Exceptions
-***************************************/
-#ifndef DEBUG
-# define DEBUG 0
-#endif
-#define DEBUGOUTPUT(...) { if (DEBUG) DISPLAY(__VA_ARGS__); }
-#define EXM_THROW(error, ...) \
-{ \
- DEBUGOUTPUT("Error defined at %s, line %i : \n", __FILE__, __LINE__); \
- DISPLAYLEVEL(1, "Error %i : ", error); \
- DISPLAYLEVEL(1, __VA_ARGS__); \
- DISPLAYLEVEL(1, "\n"); \
- exit(error); \
-}
-
-
-/* *************************************
-* Benchmark Parameters
-***************************************/
-static unsigned g_nbIterations = NBLOOPS;
-static size_t g_blockSize = 0;
-int g_additionalParam = 0;
-
-static void BMK_setNotificationLevel(unsigned level) { g_displayLevel=level; }
-
-static void BMK_setAdditionalParam(int additionalParam) { g_additionalParam=additionalParam; }
-
-static void BMK_SetNbIterations(unsigned nbLoops)
-{
- g_nbIterations = nbLoops;
- DISPLAYLEVEL(3, "- test >= %u seconds per compression / decompression -\n", g_nbIterations);
-}
-
-static void BMK_SetBlockSize(size_t blockSize)
-{
- g_blockSize = blockSize;
- DISPLAYLEVEL(2, "using blocks of size %u KB \n", (unsigned)(blockSize>>10));
-}
-
-
-/* ********************************************************
-* Bench functions
-**********************************************************/
-#undef MIN
-#undef MAX
-#define MIN(a,b) ((a)<(b) ? (a) : (b))
-#define MAX(a,b) ((a)>(b) ? (a) : (b))
-
-typedef struct
-{
- z_const char* srcPtr;
- size_t srcSize;
- char* cPtr;
- size_t cRoom;
- size_t cSize;
- char* resPtr;
- size_t resSize;
-} blockParam_t;
-
-typedef enum { BMK_ZSTD, BMK_ZSTD_STREAM, BMK_ZLIB, BMK_ZWRAP_ZLIB, BMK_ZWRAP_ZSTD, BMK_ZLIB_REUSE, BMK_ZWRAP_ZLIB_REUSE, BMK_ZWRAP_ZSTD_REUSE } BMK_compressor;
-
-
-static int BMK_benchMem(z_const void* srcBuffer, size_t srcSize,
- const char* displayName, int cLevel,
- const size_t* fileSizes, U32 nbFiles,
- const void* dictBuffer, size_t dictBufferSize, BMK_compressor compressor)
-{
- size_t const blockSize = (g_blockSize>=32 ? g_blockSize : srcSize) + (!srcSize) /* avoid div by 0 */ ;
- size_t const avgSize = MIN(g_blockSize, (srcSize / nbFiles));
- U32 const maxNbBlocks = (U32) ((srcSize + (blockSize-1)) / blockSize) + nbFiles;
- blockParam_t* const blockTable = (blockParam_t*) malloc(maxNbBlocks * sizeof(blockParam_t));
- size_t const maxCompressedSize = ZSTD_compressBound(srcSize) + (maxNbBlocks * 1024); /* add some room for safety */
- void* const compressedBuffer = malloc(maxCompressedSize);
- void* const resultBuffer = malloc(srcSize);
- ZSTD_CCtx* const ctx = ZSTD_createCCtx();
- ZSTD_DCtx* const dctx = ZSTD_createDCtx();
- U32 nbBlocks;
-
- /* checks */
- if (!compressedBuffer || !resultBuffer || !blockTable || !ctx || !dctx)
- EXM_THROW(31, "allocation error : not enough memory");
-
- /* init */
- if (strlen(displayName)>17) displayName += strlen(displayName)-17; /* can only display 17 characters */
-
- /* Init blockTable data */
- { z_const char* srcPtr = (z_const char*)srcBuffer;
- char* cPtr = (char*)compressedBuffer;
- char* resPtr = (char*)resultBuffer;
- U32 fileNb;
- for (nbBlocks=0, fileNb=0; fileNb<nbFiles; fileNb++) {
- size_t remaining = fileSizes[fileNb];
- U32 const nbBlocksforThisFile = (U32)((remaining + (blockSize-1)) / blockSize);
- U32 const blockEnd = nbBlocks + nbBlocksforThisFile;
- for ( ; nbBlocks<blockEnd; nbBlocks++) {
- size_t const thisBlockSize = MIN(remaining, blockSize);
- blockTable[nbBlocks].srcPtr = srcPtr;
- blockTable[nbBlocks].cPtr = cPtr;
- blockTable[nbBlocks].resPtr = resPtr;
- blockTable[nbBlocks].srcSize = thisBlockSize;
- blockTable[nbBlocks].cRoom = ZSTD_compressBound(thisBlockSize);
- srcPtr += thisBlockSize;
- cPtr += blockTable[nbBlocks].cRoom;
- resPtr += thisBlockSize;
- remaining -= thisBlockSize;
- } } }
-
- /* warming up memory */
- RDG_genBuffer(compressedBuffer, maxCompressedSize, 0.10, 0.50, 1);
-
- /* Bench */
- { U64 fastestC = (U64)(-1LL), fastestD = (U64)(-1LL);
- U64 const crcOrig = XXH64(srcBuffer, srcSize, 0);
- UTIL_time_t coolTime;
- U64 const maxTime = (g_nbIterations * TIMELOOP_MICROSEC) + 100;
- U64 totalCTime=0, totalDTime=0;
- U32 cCompleted=0, dCompleted=0;
-# define NB_MARKS 4
- const char* const marks[NB_MARKS] = { " |", " /", " =", "\\" };
- U32 markNb = 0;
- size_t cSize = 0;
- double ratio = 0.;
-
- coolTime = UTIL_getTime();
- DISPLAYLEVEL(2, "\r%79s\r", "");
- while (!cCompleted | !dCompleted) {
- UTIL_time_t clockStart;
- U64 clockLoop = g_nbIterations ? TIMELOOP_MICROSEC : 1;
-
- /* overheat protection */
- if (UTIL_clockSpanMicro(coolTime) > ACTIVEPERIOD_MICROSEC) {
- DISPLAYLEVEL(2, "\rcooling down ... \r");
- UTIL_sleep(COOLPERIOD_SEC);
- coolTime = UTIL_getTime();
- }
-
- /* Compression */
- DISPLAYLEVEL(2, "%2s-%-17.17s :%10u ->\r", marks[markNb], displayName, (unsigned)srcSize);
- if (!cCompleted) memset(compressedBuffer, 0xE5, maxCompressedSize); /* warm up and erase result buffer */
-
- UTIL_sleepMilli(1); /* give processor time to other processes */
- UTIL_waitForNextTick();
- clockStart = UTIL_getTime();
-
- if (!cCompleted) { /* still some time to do compression tests */
- U32 nbLoops = 0;
- if (compressor == BMK_ZSTD) {
- ZSTD_parameters const zparams = ZSTD_getParams(cLevel, avgSize, dictBufferSize);
- ZSTD_customMem const cmem = { NULL, NULL, NULL };
- ZSTD_CDict* const cdict = ZSTD_createCDict_advanced(dictBuffer, dictBufferSize, ZSTD_dlm_byRef, ZSTD_dct_auto, zparams.cParams, cmem);
- if (cdict==NULL) EXM_THROW(1, "ZSTD_createCDict_advanced() allocation failure");
-
- do {
- U32 blockNb;
- size_t rSize;
- for (blockNb=0; blockNb<nbBlocks; blockNb++) {
- if (dictBufferSize) {
- rSize = ZSTD_compress_usingCDict(ctx,
- blockTable[blockNb].cPtr, blockTable[blockNb].cRoom,
- blockTable[blockNb].srcPtr,blockTable[blockNb].srcSize,
- cdict);
- } else {
- rSize = ZSTD_compressCCtx (ctx,
- blockTable[blockNb].cPtr, blockTable[blockNb].cRoom,
- blockTable[blockNb].srcPtr,blockTable[blockNb].srcSize, cLevel);
- }
- if (ZSTD_isError(rSize)) EXM_THROW(1, "ZSTD_compress_usingCDict() failed : %s", ZSTD_getErrorName(rSize));
- blockTable[blockNb].cSize = rSize;
- }
- nbLoops++;
- } while (UTIL_clockSpanMicro(clockStart) < clockLoop);
- ZSTD_freeCDict(cdict);
- } else if (compressor == BMK_ZSTD_STREAM) {
- ZSTD_parameters const zparams = ZSTD_getParams(cLevel, avgSize, dictBufferSize);
- ZSTD_inBuffer inBuffer;
- ZSTD_outBuffer outBuffer;
- ZSTD_CStream* zbc = ZSTD_createCStream();
- size_t rSize;
- ZSTD_CCtx_params* cctxParams = ZSTD_createCCtxParams();
-
- if (!cctxParams) EXM_THROW(1, "ZSTD_createCCtxParams() allocation failure");
- if (zbc == NULL) EXM_THROW(1, "ZSTD_createCStream() allocation failure");
-
- { int initErr = 0;
- initErr |= ZSTD_isError(ZSTD_CCtx_reset(zbc, ZSTD_reset_session_only));
- initErr |= ZSTD_isError(ZSTD_CCtxParams_init_advanced(cctxParams, zparams));
- initErr |= ZSTD_isError(ZSTD_CCtx_setParametersUsingCCtxParams(zbc, cctxParams));
- initErr |= ZSTD_isError(ZSTD_CCtx_setPledgedSrcSize(zbc, avgSize));
- initErr |= ZSTD_isError(ZSTD_CCtx_loadDictionary(zbc, dictBuffer, dictBufferSize));
-
- ZSTD_freeCCtxParams(cctxParams);
- if (initErr) EXM_THROW(1, "CCtx init failed!");
- }
-
- do {
- U32 blockNb;
- for (blockNb=0; blockNb<nbBlocks; blockNb++) {
- rSize = ZSTD_CCtx_reset(zbc, ZSTD_reset_session_only);
- if (ZSTD_isError(rSize)) EXM_THROW(1, "ZSTD_CCtx_reset() failed : %s", ZSTD_getErrorName(rSize));
- rSize = ZSTD_CCtx_setPledgedSrcSize(zbc, blockTable[blockNb].srcSize);
- if (ZSTD_isError(rSize)) EXM_THROW(1, "ZSTD_CCtx_setPledgedSrcSize() failed : %s", ZSTD_getErrorName(rSize));
- inBuffer.src = blockTable[blockNb].srcPtr;
- inBuffer.size = blockTable[blockNb].srcSize;
- inBuffer.pos = 0;
- outBuffer.dst = blockTable[blockNb].cPtr;
- outBuffer.size = blockTable[blockNb].cRoom;
- outBuffer.pos = 0;
- rSize = ZSTD_compressStream(zbc, &outBuffer, &inBuffer);
- if (ZSTD_isError(rSize)) EXM_THROW(1, "ZSTD_compressStream() failed : %s", ZSTD_getErrorName(rSize));
- rSize = ZSTD_endStream(zbc, &outBuffer);
- if (ZSTD_isError(rSize)) EXM_THROW(1, "ZSTD_endStream() failed : %s", ZSTD_getErrorName(rSize));
- blockTable[blockNb].cSize = outBuffer.pos;
- }
- nbLoops++;
- } while (UTIL_clockSpanMicro(clockStart) < clockLoop);
- ZSTD_freeCStream(zbc);
- } else if (compressor == BMK_ZWRAP_ZLIB_REUSE || compressor == BMK_ZWRAP_ZSTD_REUSE || compressor == BMK_ZLIB_REUSE) {
- z_stream def;
- int ret;
- int useSetDict = (dictBuffer != NULL);
- if (compressor == BMK_ZLIB_REUSE || compressor == BMK_ZWRAP_ZLIB_REUSE) ZWRAP_useZSTDcompression(0);
- else ZWRAP_useZSTDcompression(1);
- def.zalloc = Z_NULL;
- def.zfree = Z_NULL;
- def.opaque = Z_NULL;
- ret = deflateInit(&def, cLevel);
- if (ret != Z_OK) EXM_THROW(1, "deflateInit failure");
- /* if (ZWRAP_isUsingZSTDcompression()) {
- ret = ZWRAP_setPledgedSrcSize(&def, avgSize);
- if (ret != Z_OK) EXM_THROW(1, "ZWRAP_setPledgedSrcSize failure");
- } */
- do {
- U32 blockNb;
- for (blockNb=0; blockNb<nbBlocks; blockNb++) {
- if (ZWRAP_isUsingZSTDcompression())
- ret = ZWRAP_deflateReset_keepDict(&def); /* reuse dictionary to make compression faster */
- else
- ret = deflateReset(&def);
- if (ret != Z_OK) EXM_THROW(1, "deflateReset failure");
- if (useSetDict) {
- ret = deflateSetDictionary(&def, (const z_Bytef*)dictBuffer, dictBufferSize);
- if (ret != Z_OK) EXM_THROW(1, "deflateSetDictionary failure");
- if (ZWRAP_isUsingZSTDcompression()) useSetDict = 0; /* zstd doesn't require deflateSetDictionary after ZWRAP_deflateReset_keepDict */
- }
- def.next_in = (z_const z_Bytef*) blockTable[blockNb].srcPtr;
- def.avail_in = (uInt)blockTable[blockNb].srcSize;
- def.total_in = 0;
- def.next_out = (z_Bytef*) blockTable[blockNb].cPtr;
- def.avail_out = (uInt)blockTable[blockNb].cRoom;
- def.total_out = 0;
- ret = deflate(&def, Z_FINISH);
- if (ret != Z_STREAM_END) EXM_THROW(1, "deflate failure ret=%d srcSize=%d" , ret, (int)blockTable[blockNb].srcSize);
- blockTable[blockNb].cSize = def.total_out;
- }
- nbLoops++;
- } while (UTIL_clockSpanMicro(clockStart) < clockLoop);
- ret = deflateEnd(&def);
- if (ret != Z_OK) EXM_THROW(1, "deflateEnd failure");
- } else {
- z_stream def;
- if (compressor == BMK_ZLIB || compressor == BMK_ZWRAP_ZLIB) ZWRAP_useZSTDcompression(0);
- else ZWRAP_useZSTDcompression(1);
- do {
- U32 blockNb;
- for (blockNb=0; blockNb<nbBlocks; blockNb++) {
- int ret;
- def.zalloc = Z_NULL;
- def.zfree = Z_NULL;
- def.opaque = Z_NULL;
- ret = deflateInit(&def, cLevel);
- if (ret != Z_OK) EXM_THROW(1, "deflateInit failure");
- if (dictBuffer) {
- ret = deflateSetDictionary(&def, (const z_Bytef*)dictBuffer, dictBufferSize);
- if (ret != Z_OK) EXM_THROW(1, "deflateSetDictionary failure");
- }
- def.next_in = (z_const z_Bytef*) blockTable[blockNb].srcPtr;
- def.avail_in = (uInt)blockTable[blockNb].srcSize;
- def.total_in = 0;
- def.next_out = (z_Bytef*) blockTable[blockNb].cPtr;
- def.avail_out = (uInt)blockTable[blockNb].cRoom;
- def.total_out = 0;
- ret = deflate(&def, Z_FINISH);
- if (ret != Z_STREAM_END) EXM_THROW(1, "deflate failure");
- ret = deflateEnd(&def);
- if (ret != Z_OK) EXM_THROW(1, "deflateEnd failure");
- blockTable[blockNb].cSize = def.total_out;
- }
- nbLoops++;
- } while (UTIL_clockSpanMicro(clockStart) < clockLoop);
- }
- { U64 const clockSpan = UTIL_clockSpanMicro(clockStart);
- if (clockSpan < fastestC*nbLoops) fastestC = clockSpan / nbLoops;
- totalCTime += clockSpan;
- cCompleted = totalCTime>maxTime;
- } }
-
- cSize = 0;
- { U32 blockNb; for (blockNb=0; blockNb<nbBlocks; blockNb++) cSize += blockTable[blockNb].cSize; }
- ratio = (double)srcSize / (double)cSize;
- markNb = (markNb+1) % NB_MARKS;
- DISPLAYLEVEL(2, "%2s-%-17.17s :%10u ->%10u (%5.3f),%6.1f MB/s\r",
- marks[markNb], displayName, (unsigned)srcSize, (unsigned)cSize, ratio,
- (double)srcSize / (double)fastestC );
-
- (void)fastestD; (void)crcOrig; /* unused when decompression disabled */
-#if 1
- /* Decompression */
- if (!dCompleted) memset(resultBuffer, 0xD6, srcSize); /* warm result buffer */
-
- UTIL_sleepMilli(1); /* give processor time to other processes */
- UTIL_waitForNextTick();
- clockStart = UTIL_getTime();
-
- if (!dCompleted) {
- U32 nbLoops = 0;
- if (compressor == BMK_ZSTD) {
- ZSTD_DDict* ddict = ZSTD_createDDict(dictBuffer, dictBufferSize);
- if (!ddict) EXM_THROW(2, "ZSTD_createDDict() allocation failure");
- do {
- unsigned blockNb;
- for (blockNb=0; blockNb<nbBlocks; blockNb++) {
- size_t const regenSize = ZSTD_decompress_usingDDict(dctx,
- blockTable[blockNb].resPtr, blockTable[blockNb].srcSize,
- blockTable[blockNb].cPtr, blockTable[blockNb].cSize,
- ddict);
- if (ZSTD_isError(regenSize)) {
- DISPLAY("ZSTD_decompress_usingDDict() failed on block %u : %s \n",
- blockNb, ZSTD_getErrorName(regenSize));
- clockLoop = 0; /* force immediate test end */
- break;
- }
- blockTable[blockNb].resSize = regenSize;
- }
- nbLoops++;
- } while (UTIL_clockSpanMicro(clockStart) < clockLoop);
- ZSTD_freeDDict(ddict);
- } else if (compressor == BMK_ZSTD_STREAM) {
- ZSTD_inBuffer inBuffer;
- ZSTD_outBuffer outBuffer;
- ZSTD_DStream* zbd = ZSTD_createDStream();
- size_t rSize;
- if (zbd == NULL) EXM_THROW(1, "ZSTD_createDStream() allocation failure");
- rSize = ZSTD_DCtx_reset(zbd, ZSTD_reset_session_only);
- if (ZSTD_isError(rSize)) EXM_THROW(1, "ZSTD_DCtx_reset() failed : %s", ZSTD_getErrorName(rSize));
- rSize = ZSTD_DCtx_loadDictionary(zbd, dictBuffer, dictBufferSize);
- if (ZSTD_isError(rSize)) EXM_THROW(1, "ZSTD_DCtx_loadDictionary() failed : %s", ZSTD_getErrorName(rSize));
- do {
- U32 blockNb;
- for (blockNb=0; blockNb<nbBlocks; blockNb++) {
- rSize = ZSTD_DCtx_reset(zbd, ZSTD_reset_session_only);
- if (ZSTD_isError(rSize)) EXM_THROW(1, "ZSTD_DCtx_reset() failed : %s", ZSTD_getErrorName(rSize));
- inBuffer.src = blockTable[blockNb].cPtr;
- inBuffer.size = blockTable[blockNb].cSize;
- inBuffer.pos = 0;
- outBuffer.dst = blockTable[blockNb].resPtr;
- outBuffer.size = blockTable[blockNb].srcSize;
- outBuffer.pos = 0;
- rSize = ZSTD_decompressStream(zbd, &outBuffer, &inBuffer);
- if (ZSTD_isError(rSize)) EXM_THROW(1, "ZSTD_decompressStream() failed : %s", ZSTD_getErrorName(rSize));
- blockTable[blockNb].resSize = outBuffer.pos;
- }
- nbLoops++;
- } while (UTIL_clockSpanMicro(clockStart) < clockLoop);
- ZSTD_freeDStream(zbd);
- } else if (compressor == BMK_ZWRAP_ZLIB_REUSE || compressor == BMK_ZWRAP_ZSTD_REUSE || compressor == BMK_ZLIB_REUSE) {
- z_stream inf;
- int ret;
- if (compressor == BMK_ZLIB_REUSE) ZWRAP_setDecompressionType(ZWRAP_FORCE_ZLIB);
- else ZWRAP_setDecompressionType(ZWRAP_AUTO);
- inf.zalloc = Z_NULL;
- inf.zfree = Z_NULL;
- inf.opaque = Z_NULL;
- ret = inflateInit(&inf);
- if (ret != Z_OK) EXM_THROW(1, "inflateInit failure");
- do {
- U32 blockNb;
- for (blockNb=0; blockNb<nbBlocks; blockNb++) {
- if (ZWRAP_isUsingZSTDdecompression(&inf))
- ret = ZWRAP_inflateReset_keepDict(&inf); /* reuse dictionary to make decompression faster; inflate will return Z_NEED_DICT only for the first time */
- else
- ret = inflateReset(&inf);
- if (ret != Z_OK) EXM_THROW(1, "inflateReset failure");
- inf.next_in = (z_const z_Bytef*) blockTable[blockNb].cPtr;
- inf.avail_in = (uInt)blockTable[blockNb].cSize;
- inf.total_in = 0;
- inf.next_out = (z_Bytef*) blockTable[blockNb].resPtr;
- inf.avail_out = (uInt)blockTable[blockNb].srcSize;
- inf.total_out = 0;
- ret = inflate(&inf, Z_FINISH);
- if (ret == Z_NEED_DICT) {
- ret = inflateSetDictionary(&inf, (const z_Bytef*)dictBuffer, dictBufferSize);
- if (ret != Z_OK) EXM_THROW(1, "inflateSetDictionary failure");
- ret = inflate(&inf, Z_FINISH);
- }
- if (ret != Z_STREAM_END) EXM_THROW(1, "inflate failure");
- blockTable[blockNb].resSize = inf.total_out;
- }
- nbLoops++;
- } while (UTIL_clockSpanMicro(clockStart) < clockLoop);
- ret = inflateEnd(&inf);
- if (ret != Z_OK) EXM_THROW(1, "inflateEnd failure");
- } else {
- z_stream inf;
- if (compressor == BMK_ZLIB) ZWRAP_setDecompressionType(ZWRAP_FORCE_ZLIB);
- else ZWRAP_setDecompressionType(ZWRAP_AUTO);
- do {
- U32 blockNb;
- for (blockNb=0; blockNb<nbBlocks; blockNb++) {
- int ret;
- inf.zalloc = Z_NULL;
- inf.zfree = Z_NULL;
- inf.opaque = Z_NULL;
- ret = inflateInit(&inf);
- if (ret != Z_OK) EXM_THROW(1, "inflateInit failure");
- inf.next_in = (z_const z_Bytef*) blockTable[blockNb].cPtr;
- inf.avail_in = (uInt)blockTable[blockNb].cSize;
- inf.total_in = 0;
- inf.next_out = (z_Bytef*) blockTable[blockNb].resPtr;
- inf.avail_out = (uInt)blockTable[blockNb].srcSize;
- inf.total_out = 0;
- ret = inflate(&inf, Z_FINISH);
- if (ret == Z_NEED_DICT) {
- ret = inflateSetDictionary(&inf, (const z_Bytef*) dictBuffer, dictBufferSize);
- if (ret != Z_OK) EXM_THROW(1, "inflateSetDictionary failure");
- ret = inflate(&inf, Z_FINISH);
- }
- if (ret != Z_STREAM_END) EXM_THROW(1, "inflate failure");
- ret = inflateEnd(&inf);
- if (ret != Z_OK) EXM_THROW(1, "inflateEnd failure");
- blockTable[blockNb].resSize = inf.total_out;
- }
- nbLoops++;
- } while (UTIL_clockSpanMicro(clockStart) < clockLoop);
- }
- { U64 const clockSpan = UTIL_clockSpanMicro(clockStart);
- if (clockSpan < fastestD*nbLoops) fastestD = clockSpan / nbLoops;
- totalDTime += clockSpan;
- dCompleted = totalDTime>maxTime;
- } }
-
- markNb = (markNb+1) % NB_MARKS;
- DISPLAYLEVEL(2, "%2s-%-17.17s :%10u ->%10u (%5.3f),%6.1f MB/s ,%6.1f MB/s\r",
- marks[markNb], displayName, (unsigned)srcSize, (unsigned)cSize, ratio,
- (double)srcSize / (double)fastestC,
- (double)srcSize / (double)fastestD );
-
- /* CRC Checking */
- { U64 const crcCheck = XXH64(resultBuffer, srcSize, 0);
- if (crcOrig!=crcCheck) {
- size_t u;
- DISPLAY("!!! WARNING !!! %14s : Invalid Checksum : %x != %x \n", displayName, (unsigned)crcOrig, (unsigned)crcCheck);
- for (u=0; u<srcSize; u++) {
- if (((const BYTE*)srcBuffer)[u] != ((const BYTE*)resultBuffer)[u]) {
- unsigned segNb, bNb, pos;
- size_t bacc = 0;
- DISPLAY("Decoding error at pos %u ", (unsigned)u);
- for (segNb = 0; segNb < nbBlocks; segNb++) {
- if (bacc + blockTable[segNb].srcSize > u) break;
- bacc += blockTable[segNb].srcSize;
- }
- pos = (U32)(u - bacc);
- bNb = pos / (128 KB);
- DISPLAY("(block %u, sub %u, pos %u) \n", segNb, bNb, pos);
- break;
- }
- if (u==srcSize-1) { /* should never happen */
- DISPLAY("no difference detected\n");
- } }
- break;
- } } /* CRC Checking */
-#endif
- } /* for (testNb = 1; testNb <= (g_nbIterations + !g_nbIterations); testNb++) */
-
- if (g_displayLevel == 1) {
- double cSpeed = (double)srcSize / (double)fastestC;
- double dSpeed = (double)srcSize / (double)fastestD;
- if (g_additionalParam)
- DISPLAY("-%-3i%11i (%5.3f) %6.2f MB/s %6.1f MB/s %s (param=%d)\n", cLevel, (int)cSize, ratio, cSpeed, dSpeed, displayName, g_additionalParam);
- else
- DISPLAY("-%-3i%11i (%5.3f) %6.2f MB/s %6.1f MB/s %s\n", cLevel, (int)cSize, ratio, cSpeed, dSpeed, displayName);
- }
- DISPLAYLEVEL(2, "%2i#\n", cLevel);
- } /* Bench */
-
- /* clean up */
- free(blockTable);
- free(compressedBuffer);
- free(resultBuffer);
- ZSTD_freeCCtx(ctx);
- ZSTD_freeDCtx(dctx);
- return 0;
-}
-
-
-static size_t BMK_findMaxMem(U64 requiredMem)
-{
- size_t const step = 64 MB;
- BYTE* testmem = NULL;
-
- requiredMem = (((requiredMem >> 26) + 1) << 26);
- requiredMem += step;
- if (requiredMem > maxMemory) requiredMem = maxMemory;
-
- do {
- testmem = (BYTE*)malloc((size_t)requiredMem);
- requiredMem -= step;
- } while (!testmem && requiredMem); /* do not allocate zero bytes */
-
- free(testmem);
- return (size_t)(requiredMem+1); /* avoid zero */
-}
-
-static void BMK_benchCLevel(void* srcBuffer, size_t benchedSize,
- const char* displayName, int cLevel, int cLevelLast,
- const size_t* fileSizes, unsigned nbFiles,
- const void* dictBuffer, size_t dictBufferSize)
-{
- int l;
-
- const char* pch = strrchr(displayName, '\\'); /* Windows */
- if (!pch) pch = strrchr(displayName, '/'); /* Linux */
- if (pch) displayName = pch+1;
-
- SET_REALTIME_PRIORITY;
-
- if (g_displayLevel == 1 && !g_additionalParam)
- DISPLAY("bench %s %s: input %u bytes, %u seconds, %u KB blocks\n",
- ZSTD_VERSION_STRING, ZSTD_GIT_COMMIT_STRING,
- (unsigned)benchedSize, g_nbIterations, (unsigned)(g_blockSize>>10));
-
- if (cLevelLast < cLevel) cLevelLast = cLevel;
-
- DISPLAY("benchmarking zstd %s (using ZSTD_CStream)\n", ZSTD_VERSION_STRING);
- for (l=cLevel; l <= cLevelLast; l++) {
- BMK_benchMem(srcBuffer, benchedSize,
- displayName, l,
- fileSizes, nbFiles,
- dictBuffer, dictBufferSize, BMK_ZSTD_STREAM);
- }
-
- DISPLAY("benchmarking zstd %s (using ZSTD_CCtx)\n", ZSTD_VERSION_STRING);
- for (l=cLevel; l <= cLevelLast; l++) {
- BMK_benchMem(srcBuffer, benchedSize,
- displayName, l,
- fileSizes, nbFiles,
- dictBuffer, dictBufferSize, BMK_ZSTD);
- }
-
- DISPLAY("benchmarking zstd %s (using zlibWrapper)\n", ZSTD_VERSION_STRING);
- for (l=cLevel; l <= cLevelLast; l++) {
- BMK_benchMem(srcBuffer, benchedSize,
- displayName, l,
- fileSizes, nbFiles,
- dictBuffer, dictBufferSize, BMK_ZWRAP_ZSTD_REUSE);
- }
-
- DISPLAY("benchmarking zstd %s (zlibWrapper not reusing a context)\n", ZSTD_VERSION_STRING);
- for (l=cLevel; l <= cLevelLast; l++) {
- BMK_benchMem(srcBuffer, benchedSize,
- displayName, l,
- fileSizes, nbFiles,
- dictBuffer, dictBufferSize, BMK_ZWRAP_ZSTD);
- }
-
-
- if (cLevelLast > Z_BEST_COMPRESSION) cLevelLast = Z_BEST_COMPRESSION;
-
- DISPLAY("\n");
- DISPLAY("benchmarking zlib %s\n", ZLIB_VERSION);
- for (l=cLevel; l <= cLevelLast; l++) {
- BMK_benchMem(srcBuffer, benchedSize,
- displayName, l,
- fileSizes, nbFiles,
- dictBuffer, dictBufferSize, BMK_ZLIB_REUSE);
- }
-
- DISPLAY("benchmarking zlib %s (zlib not reusing a context)\n", ZLIB_VERSION);
- for (l=cLevel; l <= cLevelLast; l++) {
- BMK_benchMem(srcBuffer, benchedSize,
- displayName, l,
- fileSizes, nbFiles,
- dictBuffer, dictBufferSize, BMK_ZLIB);
- }
-
- DISPLAY("benchmarking zlib %s (using zlibWrapper)\n", ZLIB_VERSION);
- for (l=cLevel; l <= cLevelLast; l++) {
- BMK_benchMem(srcBuffer, benchedSize,
- displayName, l,
- fileSizes, nbFiles,
- dictBuffer, dictBufferSize, BMK_ZWRAP_ZLIB_REUSE);
- }
-
- DISPLAY("benchmarking zlib %s (zlibWrapper not reusing a context)\n", ZLIB_VERSION);
- for (l=cLevel; l <= cLevelLast; l++) {
- BMK_benchMem(srcBuffer, benchedSize,
- displayName, l,
- fileSizes, nbFiles,
- dictBuffer, dictBufferSize, BMK_ZWRAP_ZLIB);
- }
-}
-
-
-/*! BMK_loadFiles() :
- Loads `buffer` with content of files listed within `fileNamesTable`.
- At most, fills `buffer` entirely */
-static void BMK_loadFiles(void* buffer, size_t bufferSize,
- size_t* fileSizes,
- const char** fileNamesTable, unsigned nbFiles)
-{
- size_t pos = 0, totalSize = 0;
- unsigned n;
- for (n=0; n<nbFiles; n++) {
- FILE* f;
- U64 fileSize = UTIL_getFileSize(fileNamesTable[n]);
- if (UTIL_isDirectory(fileNamesTable[n])) {
- DISPLAYLEVEL(2, "Ignoring %s directory... \n", fileNamesTable[n]);
- fileSizes[n] = 0;
- continue;
- }
- if (fileSize == UTIL_FILESIZE_UNKNOWN) {
- DISPLAYLEVEL(2, "Cannot determine size of %s ... \n", fileNamesTable[n]);
- fileSizes[n] = 0;
- continue;
- }
- f = fopen(fileNamesTable[n], "rb");
- if (f==NULL) EXM_THROW(10, "impossible to open file %s", fileNamesTable[n]);
- DISPLAYUPDATE(2, "Loading %s... \r", fileNamesTable[n]);
- if (fileSize > bufferSize-pos) fileSize = bufferSize-pos, nbFiles=n; /* buffer too small - stop after this file */
- { size_t const readSize = fread(((char*)buffer)+pos, 1, (size_t)fileSize, f);
- if (readSize != (size_t)fileSize) EXM_THROW(11, "could not read %s", fileNamesTable[n]);
- pos += readSize; }
- fileSizes[n] = (size_t)fileSize;
- totalSize += (size_t)fileSize;
- fclose(f);
- }
-
- if (totalSize == 0) EXM_THROW(12, "no data to bench");
-}
-
-static void BMK_benchFileTable(const char** fileNamesTable, unsigned nbFiles,
- const char* dictFileName, int cLevel, int cLevelLast)
-{
- void* srcBuffer;
- size_t benchedSize;
- void* dictBuffer = NULL;
- size_t dictBufferSize = 0;
- size_t* fileSizes = (size_t*)malloc(nbFiles * sizeof(size_t));
- U64 const totalSizeToLoad = UTIL_getTotalFileSize(fileNamesTable, nbFiles);
- char mfName[20] = {0};
-
- if (!fileSizes) EXM_THROW(12, "not enough memory for fileSizes");
-
- /* Load dictionary */
- if (dictFileName != NULL) {
- U64 const dictFileSize = UTIL_getFileSize(dictFileName);
- if (dictFileSize > 64 MB)
- EXM_THROW(10, "dictionary file %s too large", dictFileName);
- dictBufferSize = (size_t)dictFileSize;
- dictBuffer = malloc(dictBufferSize);
- if (dictBuffer==NULL)
- EXM_THROW(11, "not enough memory for dictionary (%u bytes)", (unsigned)dictBufferSize);
- BMK_loadFiles(dictBuffer, dictBufferSize, fileSizes, &dictFileName, 1);
- }
-
- /* Memory allocation & restrictions */
- benchedSize = BMK_findMaxMem(totalSizeToLoad * 3) / 3;
- if ((U64)benchedSize > totalSizeToLoad) benchedSize = (size_t)totalSizeToLoad;
- if (benchedSize < totalSizeToLoad)
- DISPLAY("Not enough memory; testing %u MB only...\n", (unsigned)(benchedSize >> 20));
- srcBuffer = malloc(benchedSize + !benchedSize);
- if (!srcBuffer) EXM_THROW(12, "not enough memory");
-
- /* Load input buffer */
- BMK_loadFiles(srcBuffer, benchedSize, fileSizes, fileNamesTable, nbFiles);
-
- /* Bench */
- snprintf (mfName, sizeof(mfName), " %u files", nbFiles);
- { const char* displayName = (nbFiles > 1) ? mfName : fileNamesTable[0];
- BMK_benchCLevel(srcBuffer, benchedSize,
- displayName, cLevel, cLevelLast,
- fileSizes, nbFiles,
- dictBuffer, dictBufferSize);
- }
-
- /* clean up */
- free(srcBuffer);
- free(dictBuffer);
- free(fileSizes);
-}
-
-
-static void BMK_syntheticTest(int cLevel, int cLevelLast, double compressibility)
-{
- char name[20] = {0};
- size_t benchedSize = 10000000;
- void* const srcBuffer = malloc(benchedSize);
-
- /* Memory allocation */
- if (!srcBuffer) EXM_THROW(21, "not enough memory");
-
- /* Fill input buffer */
- RDG_genBuffer(srcBuffer, benchedSize, compressibility, 0.0, 0);
-
- /* Bench */
- snprintf (name, sizeof(name), "Synthetic %2u%%", (unsigned)(compressibility*100));
- BMK_benchCLevel(srcBuffer, benchedSize, name, cLevel, cLevelLast, &benchedSize, 1, NULL, 0);
-
- /* clean up */
- free(srcBuffer);
-}
-
-
-static int BMK_benchFiles(const char** fileNamesTable, unsigned nbFiles,
- const char* dictFileName, int cLevel, int cLevelLast)
-{
- double const compressibility = (double)g_compressibilityDefault / 100;
-
- if (nbFiles == 0)
- BMK_syntheticTest(cLevel, cLevelLast, compressibility);
- else
- BMK_benchFileTable(fileNamesTable, nbFiles, dictFileName, cLevel, cLevelLast);
- return 0;
-}
-
-
-
-
-/*-************************************
-* Command Line
-**************************************/
-static int usage(const char* programName)
-{
- DISPLAY(WELCOME_MESSAGE);
- DISPLAY( "Usage :\n");
- DISPLAY( " %s [args] [FILE(s)] [-o file]\n", programName);
- DISPLAY( "\n");
- DISPLAY( "FILE : a filename\n");
- DISPLAY( " with no FILE, or when FILE is - , read standard input\n");
- DISPLAY( "Arguments :\n");
- DISPLAY( " -D file: use `file` as Dictionary \n");
- DISPLAY( " -h/-H : display help/long help and exit\n");
- DISPLAY( " -V : display Version number and exit\n");
- DISPLAY( " -v : verbose mode; specify multiple times to increase log level (default:%d)\n", DEFAULT_DISPLAY_LEVEL);
- DISPLAY( " -q : suppress warnings; specify twice to suppress errors too\n");
-#ifdef UTIL_HAS_CREATEFILELIST
- DISPLAY( " -r : operate recursively on directories\n");
-#endif
- DISPLAY( "\n");
- DISPLAY( "Benchmark arguments :\n");
- DISPLAY( " -b# : benchmark file(s), using # compression level (default : %d) \n", ZSTDCLI_CLEVEL_DEFAULT);
- DISPLAY( " -e# : test all compression levels from -bX to # (default: %d)\n", ZSTDCLI_CLEVEL_DEFAULT);
- DISPLAY( " -i# : minimum evaluation time in seconds (default : 3s)\n");
- DISPLAY( " -B# : cut file into independent chunks of size # (default: no chunking)\n");
- return 0;
-}
-
-static int badusage(const char* programName)
-{
- DISPLAYLEVEL(1, "Incorrect parameters\n");
- if (g_displayLevel >= 1) usage(programName);
- return 1;
-}
-
-static void waitEnter(void)
-{
- int unused;
- DISPLAY("Press enter to continue...\n");
- unused = getchar();
- (void)unused;
-}
-
-/*! readU32FromChar() :
- @return : unsigned integer value reach from input in `char` format
- Will also modify `*stringPtr`, advancing it to position where it stopped reading.
- Note : this function can overflow if digit string > MAX_UINT */
-static unsigned readU32FromChar(const char** stringPtr)
-{
- unsigned result = 0;
- while ((**stringPtr >='0') && (**stringPtr <='9'))
- result *= 10, result += (unsigned)(**stringPtr - '0'), (*stringPtr)++ ;
- return result;
-}
-
-
-#define CLEAN_RETURN(i) { operationResult = (i); goto _end; }
-
-int main(int argCount, char** argv)
-{
- int argNb,
- main_pause=0,
- nextEntryIsDictionary=0,
- operationResult=0,
- nextArgumentIsFile=0;
- int cLevel = ZSTDCLI_CLEVEL_DEFAULT;
- int cLevelLast = 1;
- unsigned recursive = 0;
- FileNamesTable* filenames = UTIL_allocateFileNamesTable((size_t)argCount);
- const char* programName = argv[0];
- const char* dictFileName = NULL;
- char* dynNameSpace = NULL;
-
- /* init */
- if (filenames==NULL) { DISPLAY("zstd: %s \n", strerror(errno)); exit(1); }
- displayOut = stderr;
-
- /* Pick out program name from path. Don't rely on stdlib because of conflicting behavior */
- { size_t pos;
- for (pos = strlen(programName); pos > 0; pos--) { if (programName[pos] == '/') { pos++; break; } }
- programName += pos;
- }
-
- /* command switches */
- for(argNb=1; argNb<argCount; argNb++) {
- const char* argument = argv[argNb];
- if(!argument) continue; /* Protection if argument empty */
-
- if (nextArgumentIsFile==0) {
-
- /* long commands (--long-word) */
- if (!strcmp(argument, "--")) { nextArgumentIsFile=1; continue; }
- if (!strcmp(argument, "--version")) { displayOut=stdout; DISPLAY(WELCOME_MESSAGE); CLEAN_RETURN(0); }
- if (!strcmp(argument, "--help")) { displayOut=stdout; CLEAN_RETURN(usage(programName)); }
- if (!strcmp(argument, "--verbose")) { g_displayLevel++; continue; }
- if (!strcmp(argument, "--quiet")) { g_displayLevel--; continue; }
-
- /* Decode commands (note : aggregated commands are allowed) */
- if (argument[0]=='-') {
- argument++;
-
- while (argument[0]!=0) {
- switch(argument[0])
- {
- /* Display help */
- case 'V': displayOut=stdout; DISPLAY(WELCOME_MESSAGE); CLEAN_RETURN(0); /* Version Only */
- case 'H':
- case 'h': displayOut=stdout; CLEAN_RETURN(usage(programName));
-
- /* Use file content as dictionary */
- case 'D': nextEntryIsDictionary = 1; argument++; break;
-
- /* Verbose mode */
- case 'v': g_displayLevel++; argument++; break;
-
- /* Quiet mode */
- case 'q': g_displayLevel--; argument++; break;
-
-#ifdef UTIL_HAS_CREATEFILELIST
- /* recursive */
- case 'r': recursive=1; argument++; break;
-#endif
-
- /* Benchmark */
- case 'b':
- /* first compression Level */
- argument++;
- cLevel = (int)readU32FromChar(&argument);
- break;
-
- /* range bench (benchmark only) */
- case 'e':
- /* last compression Level */
- argument++;
- cLevelLast = (int)readU32FromChar(&argument);
- break;
-
- /* Modify Nb Iterations (benchmark only) */
- case 'i':
- argument++;
- { U32 const iters = readU32FromChar(&argument);
- BMK_setNotificationLevel(g_displayLevel);
- BMK_SetNbIterations(iters);
- }
- break;
-
- /* cut input into blocks (benchmark only) */
- case 'B':
- argument++;
- { size_t bSize = readU32FromChar(&argument);
- if (toupper(*argument)=='K') bSize<<=10, argument++; /* allows using KB notation */
- if (toupper(*argument)=='M') bSize<<=20, argument++;
- if (toupper(*argument)=='B') argument++;
- BMK_setNotificationLevel(g_displayLevel);
- BMK_SetBlockSize(bSize);
- }
- break;
-
- /* Pause at the end (-p) or set an additional param (-p#) (hidden option) */
- case 'p': argument++;
- if ((*argument>='0') && (*argument<='9')) {
- BMK_setAdditionalParam((int)readU32FromChar(&argument));
- } else
- main_pause=1;
- break;
- /* unknown command */
- default : CLEAN_RETURN(badusage(programName));
- }
- }
- continue;
- } /* if (argument[0]=='-') */
-
- } /* if (nextArgumentIsAFile==0) */
-
- if (nextEntryIsDictionary) {
- nextEntryIsDictionary = 0;
- dictFileName = argument;
- continue;
- }
-
- /* add filename to list */
- UTIL_refFilename(filenames, argument);
- }
-
- /* Welcome message (if verbose) */
- DISPLAYLEVEL(3, WELCOME_MESSAGE);
-
-#ifdef UTIL_HAS_CREATEFILELIST
- if (recursive) {
- UTIL_expandFNT(&filenames, 1);
- }
-#endif
-
- BMK_setNotificationLevel(g_displayLevel);
- BMK_benchFiles(filenames->fileNames, (unsigned)filenames->tableSize, dictFileName, cLevel, cLevelLast);
-
-_end:
- if (main_pause) waitEnter();
- free(dynNameSpace);
- UTIL_freeFileNamesTable(filenames);
- return operationResult;
-}