summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Collet <cyan@fb.com>2016-11-07 18:31:43 (GMT)
committerYann Collet <cyan@fb.com>2016-11-07 18:31:43 (GMT)
commitf6a7c6b578ea2bdfbd19e30ac7cadf4b97fcc84c (patch)
treee11a162b4e0975fab5a0776838e7a2afa03992de
parent207f478babe676fc000e6e655c150a03a79570b0 (diff)
parent301c4e94eef421f28265e5cf79c804ab54907967 (diff)
downloadlz4-f6a7c6b578ea2bdfbd19e30ac7cadf4b97fcc84c.zip
lz4-f6a7c6b578ea2bdfbd19e30ac7cadf4b97fcc84c.tar.gz
lz4-f6a7c6b578ea2bdfbd19e30ac7cadf4b97fcc84c.tar.bz2
Merge branch 'dev' of github.com:Cyan4973/lz4 into dev
-rw-r--r--.travis.yml106
-rw-r--r--Makefile24
-rw-r--r--appveyor.yml15
-rw-r--r--lib/lz4.c2
-rw-r--r--lib/lz4frame.h4
-rw-r--r--programs/lz4cli.c8
-rw-r--r--programs/lz4io.c55
-rw-r--r--programs/lz4io.h2
-rw-r--r--tests/Makefile10
-rw-r--r--tests/fasttest.c138
-rw-r--r--visual/VS2010/datagen/datagen.vcxproj4
-rw-r--r--visual/VS2010/frametest/frametest.vcxproj4
-rw-r--r--visual/VS2010/fullbench/fullbench.vcxproj4
-rw-r--r--visual/VS2010/fuzzer/fuzzer.vcxproj4
-rw-r--r--visual/VS2010/liblz4/liblz4.vcxproj4
-rw-r--r--visual/VS2010/lz4/lz4.vcxproj18
16 files changed, 244 insertions, 158 deletions
diff --git a/.travis.yml b/.travis.yml
index ef8732c..4d6bdc4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,57 +4,29 @@ matrix:
include:
# OS X Mavericks
- os: osx
- env: Ubu="OS X Mavericks" PARAMS='-C tests test-lz4 CC=clang MOREFLAGS="-Werror -Wconversion -Wno-sign-conversion"' COMPILER=clang
+ env: Ubu=OS_X_Mavericks Cmd='make -C tests test-lz4 CC=clang MOREFLAGS="-Werror -Wconversion -Wno-sign-conversion"' COMPILER=clang
+
# Container-based 12.04 LTS Server Edition 64 bit (doesn't support 32-bit includes)
- os: linux
sudo: false
- env: Ubu="12.04cont" PARAMS="install PREFIX=~/install_test_dir" COMPILER=cc
+ env: Ubu=12.04cont Cmd="make gpptest && make clean && make examples && make clean && make cmake && make clean && make travis-install" COMPILER=cc
- os: linux
sudo: false
- env: Ubu="12.04cont" PARAMS="examples" COMPILER=cc
+ env: Ubu=12.04cont Cmd='make test' COMPILER=cc
- os: linux
sudo: false
- env: Ubu="12.04cont" PARAMS="cmake" COMPILER=cc
- - os: linux
- sudo: false
- env: Ubu="12.04cont" PARAMS=clangtest COMPILER=clang
- - os: linux
- sudo: false
- env: Ubu="12.04cont" PARAMS=gpptest COMPILER=cc
- - os: linux
- sudo: false
- env: Ubu="12.04cont" PARAMS='-C tests test-lz4' COMPILER=cc
- - os: linux
- sudo: false
- env: Ubu="12.04cont" PARAMS='-C tests test-lz4 MOREFLAGS="-std=c99"' COMPILER=cc
- - os: linux
- sudo: false
- env: Ubu="12.04cont" PARAMS='-C tests test-lz4c' COMPILER=cc
- - os: linux
- sudo: false
- env: Ubu="12.04cont" PARAMS='-C tests test-fullbench' COMPILER=cc
- - os: linux
- sudo: false
- env: Ubu="12.04cont" PARAMS='-C tests test-fuzzer' COMPILER=cc
- - os: linux
- sudo: false
- env: Ubu="12.04cont" PARAMS='-C tests test-frametest' COMPILER=cc
+ env: Ubu=12.04cont Cmd='make clangtest' COMPILER=clang
+
# 14.04 LTS Server Edition 64 bit
- - env: Ubu="14.04" PARAMS=sanitize COMPILER=clang
+ - env: Ubu=14.04 Cmd='make staticAnalyze sanitize' COMPILER=clang
dist: trusty
sudo: required
addons:
apt:
packages:
- valgrind
- - env: Ubu="14.04" PARAMS=staticAnalyze COMPILER=clang
- dist: trusty
- sudo: required
- addons:
- apt:
- packages:
- clang
- - env: Ubu="14.04" PARAMS=armtest COMPILER=arm-linux-gnueabi-gcc
+ - env: Ubu=14.04 Cmd='make armtest' COMPILER=arm-linux-gnueabi-gcc
dist: trusty
sudo: required
addons:
@@ -63,36 +35,23 @@ matrix:
- gcc-arm-linux-gnueabi
- libc6-dev-armel-cross
- linux-libc-dev-armel-cross
- - env: Ubu="14.04" PARAMS=versionsTest COMPILER=cc
+ - env: Ubu=14.04 Cmd='make c_standards && make -C tests test-lz4 test-mem' COMPILER=cc
dist: trusty
sudo: required
addons:
apt:
packages:
- - python3
- - libc6-dev-i386
- - gcc-multilib
- - env: Ubu="14.04" PARAMS='-C tests test-lz4' COMPILER=cc
- dist: trusty
- sudo: required
- - env: Ubu="14.04" PARAMS='-C tests test-lz4c32' COMPILER=cc
+ - valgrind
+ - env: Ubu=14.04 Cmd='make -C tests test32 versionsTest' COMPILER=cc
dist: trusty
sudo: required
addons:
apt:
packages:
+ - python3
- libc6-dev-i386
- gcc-multilib
- - env: Ubu="14.04" PARAMS='-C tests test-lz4 CC=gcc-5' COMPILER=gcc-5
- dist: trusty
- sudo: required
- addons:
- apt:
- sources:
- - ubuntu-toolchain-r-test
- packages:
- - gcc-5
- - env: Ubu="14.04" PARAMS='-C tests test-lz4c32 CC=gcc-5' COMPILER=gcc-5
+ - env: Ubu=14.04 Cmd='make -C tests test-lz4 test-lz4c32 CC=gcc-5 MOREFLAGS="-Werror"' COMPILER=gcc-5
dist: trusty
sudo: required
addons:
@@ -104,7 +63,7 @@ matrix:
- gcc-multilib
- gcc-5
- gcc-5-multilib
- - env: Ubu="14.04" PARAMS='-C tests test-lz4 CC=gcc-6' COMPILER=gcc-6
+ - env: Ubu=14.04 Cmd='make c_standards CC=gcc-6 && make -C tests test-lz4 CC=gcc-6 MOREFLAGS="-Werror"' COMPILER=gcc-6
dist: trusty
sudo: required
addons:
@@ -113,7 +72,7 @@ matrix:
- ubuntu-toolchain-r-test
packages:
- gcc-6
- - env: Ubu="14.04" PARAMS='-C tests test-lz4 CC=clang-3.8' COMPILER=clang-3.8
+ - env: Ubu=14.04 Cmd='make -C tests test-lz4 CC=clang-3.8' COMPILER=clang-3.8
dist: trusty
sudo: required
addons:
@@ -123,39 +82,8 @@ matrix:
- llvm-toolchain-precise-3.8
packages:
- clang-3.8
- - env: Ubu="14.04" PARAMS='-C tests test-fullbench32' COMPILER=cc
- dist: trusty
- sudo: required
- addons:
- apt:
- packages:
- - libc6-dev-i386
- - gcc-multilib
- - env: Ubu="14.04" PARAMS='-C tests test-fuzzer32' COMPILER=cc
- dist: trusty
- sudo: required
- addons:
- apt:
- packages:
- - libc6-dev-i386
- - gcc-multilib
- - env: Ubu="14.04" PARAMS='-C tests test-frametest32' COMPILER=cc
- dist: trusty
- sudo: required
- addons:
- apt:
- packages:
- - libc6-dev-i386
- - gcc-multilib
- - env: Ubu="14.04" PARAMS='-C tests test-mem' COMPILER=cc
- dist: trusty
- sudo: required
- addons:
- apt:
- packages:
- - valgrind
script:
- - echo PARAMS=$PARAMS
+ - echo Cmd=$Cmd
- $COMPILER -v
- - sh -c "make $PARAMS"
+ - sh -c "$Cmd"
diff --git a/Makefile b/Makefile
index e98aafd..aeb2f4b 100644
--- a/Makefile
+++ b/Makefile
@@ -85,7 +85,7 @@ uninstall:
@$(MAKE) -C $(PRGDIR) $@
travis-install:
- sudo $(MAKE) install
+ $(MAKE) install PREFIX=~/install_test_dir
test:
$(MAKE) -C $(TESTDIR) test
@@ -96,19 +96,29 @@ cmake:
gpptest: clean
$(MAKE) all CC=g++ CFLAGS="-O3 -I../lib -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror"
+c_standards: clean
+ $(MAKE) all CFLAGS="-std=gnu90"
+ $(MAKE) clean
+ $(MAKE) all CFLAGS="-std=c99"
+ $(MAKE) clean
+ $(MAKE) all CFLAGS="-std=gnu99"
+ $(MAKE) clean
+ $(MAKE) all CFLAGS="-std=c11"
+ $(MAKE) clean
+
clangtest: clean
- CFLAGS="-O3 -Werror -Wconversion -Wno-sign-conversion" $(MAKE) all CC=clang
+ $(MAKE) all CC=clang CFLAGS="-O3 -Werror -Wconversion -Wno-sign-conversion"
sanitize: clean
- CFLAGS="-O3 -g -fsanitize=undefined" $(MAKE) test CC=clang FUZZER_TIME="-T1mn" NB_LOOPS=-i1
+ $(MAKE) test CC=clang FUZZER_TIME="-T1mn" NB_LOOPS=-i1 CFLAGS="-O3 -g -fsanitize=undefined"
staticAnalyze: clean
- CFLAGS=-g scan-build --status-bugs -v $(MAKE) all
+ scan-build --status-bugs -v $(MAKE) all CFLAGS=-g
armtest: clean
- CFLAGS="-O3 -Werror" $(MAKE) -C $(LZ4DIR) all CC=arm-linux-gnueabi-gcc
- CFLAGS="-O3 -Werror" $(MAKE) -C $(PRGDIR) bins CC=arm-linux-gnueabi-gcc
- CFLAGS="-O3 -Werror" $(MAKE) -C $(TESTDIR) bins CC=arm-linux-gnueabi-gcc
+ $(MAKE) -C $(LZ4DIR) all CC=arm-linux-gnueabi-gcc CFLAGS="-O3 -Werror"
+ $(MAKE) -C $(PRGDIR) bins CC=arm-linux-gnueabi-gcc CFLAGS="-O3 -Werror"
+ $(MAKE) -C $(TESTDIR) bins CC=arm-linux-gnueabi-gcc CFLAGS="-O3 -Werror"
versionsTest: clean
$(MAKE) -C $(TESTDIR) $@
diff --git a/appveyor.yml b/appveyor.yml
index e941a7e..85d8ea2 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -14,13 +14,10 @@ environment:
CONFIGURATION: "Release"
PLATFORM: "Win32"
- COMPILER: "gcc"
- MAKE_PARAMS: "-C programs lz4 fullbench"
PLATFORM: "mingw64"
- COMPILER: "gcc"
- MAKE_PARAMS: "-C programs lz4 fullbench"
PLATFORM: "mingw32"
- COMPILER: "gcc"
- MAKE_PARAMS: '-C programs lz4 fullbench CC=clang MOREFLAGS="--target=x86_64-w64-mingw32 -Werror -Wconversion -Wno-sign-conversion"'
PLATFORM: "clang"
install:
@@ -48,9 +45,15 @@ build_script:
echo ----- &&
make -v &&
echo ----- &&
- ECHO make -%MAKE_PARAMS%- &&
- make %MAKE_PARAMS%
- ) ELSE (
+ if not [%PLATFORM%]==[clang] (
+ make -C programs lz4 && make -C tests fullbench
+ ) ELSE (
+ make -C programs lz4 CC=clang MOREFLAGS="--target=x86_64-w64-mingw32 -Werror -Wconversion -Wno-sign-conversion" &&
+ make -C tests fullbench CC=clang MOREFLAGS="--target=x86_64-w64-mingw32 -Werror -Wconversion -Wno-sign-conversion"
+ )
+ )
+ - if [%COMPILER%]==[gcc] (COPY tests\fullbench.exe programs\)
+ - if [%COMPILER%]==[visual] (
ECHO *** &&
ECHO *** Building Visual Studio 2010 %PLATFORM%\%CONFIGURATION% &&
ECHO *** &&
diff --git a/lib/lz4.c b/lib/lz4.c
index 39a7de9..85999ae 100644
--- a/lib/lz4.c
+++ b/lib/lz4.c
@@ -1366,7 +1366,7 @@ int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const ch
lz4sd->prefixEnd += originalSize;
} else {
lz4sd->extDictSize = lz4sd->prefixSize;
- lz4sd->externalDict = (BYTE*)dest - lz4sd->extDictSize;
+ lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize;
result = LZ4_decompress_generic(source, dest, 0, originalSize,
endOnOutputSize, full, 0,
usingExtDict, (BYTE*)dest, lz4sd->externalDict, lz4sd->extDictSize);
diff --git a/lib/lz4frame.h b/lib/lz4frame.h
index 63d61ad..43bc23c 100644
--- a/lib/lz4frame.h
+++ b/lib/lz4frame.h
@@ -66,7 +66,7 @@ extern "C" {
#endif
#if defined(_MSC_VER)
-# define LZ4F_DEPRECATE(x) __declspec(deprecated) x
+# define LZ4F_DEPRECATE(x) x /* __declspec(deprecated) x - only works with C++ */
#elif defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 6))
# define LZ4F_DEPRECATE(x) x __attribute__((deprecated))
#else
@@ -274,7 +274,7 @@ typedef struct {
* That is, it should be == 0 if decompression has been completed fully and correctly.
*/
LZ4FLIB_API LZ4F_errorCode_t LZ4F_createDecompressionContext(LZ4F_dctx** dctxPtr, unsigned version);
-LZ4FLIB_API LZ4F_errorCode_t LZ4F_freeDecompressionContext(LZ4F_dctx* dctx);
+LZ4FLIB_API LZ4F_errorCode_t LZ4F_freeDecompressionContext(LZ4F_dctx* const dctx);
/*====== Decompression ======*/
diff --git a/programs/lz4cli.c b/programs/lz4cli.c
index e49bbcb..f091d3a 100644
--- a/programs/lz4cli.c
+++ b/programs/lz4cli.c
@@ -149,6 +149,7 @@ static int usage(void)
DISPLAY( " -d : decompression (default for %s extension)\n", LZ4_EXTENSION);
DISPLAY( " -z : force compression\n");
DISPLAY( " -f : overwrite output without prompting \n");
+ DISPLAY( "--rm : remove source file(s) after successful de/compression \n");
DISPLAY( " -h/-H : display help/long help and exit\n");
return 0;
}
@@ -326,7 +327,7 @@ int main(int argc, const char** argv)
if ((!strcmp(argument, "--decompress"))
|| (!strcmp(argument, "--uncompress"))) { decode = 1; continue; }
if (!strcmp(argument, "--multiple")) { multiple_inputs = 1; if (inFileNames==NULL) inFileNames = (const char**)malloc(argc * sizeof(char*)); continue; }
- if (!strcmp(argument, "--test")) { decode = 1; LZ4IO_setOverwrite(1); output_filename=nulmark; continue; }
+ if (!strcmp(argument, "--test")) { decode = 1; LZ4IO_setTestMode(1); output_filename=nulmark; continue; }
if (!strcmp(argument, "--force")) { LZ4IO_setOverwrite(1); continue; }
if (!strcmp(argument, "--no-force")) { LZ4IO_setOverwrite(0); continue; }
if ((!strcmp(argument, "--stdout"))
@@ -340,7 +341,8 @@ int main(int argc, const char** argv)
if (!strcmp(argument, "--verbose")) { displayLevel=4; continue; }
if (!strcmp(argument, "--quiet")) { if (displayLevel) displayLevel--; continue; }
if (!strcmp(argument, "--version")) { DISPLAY(WELCOME_MESSAGE); return 0; }
- if (!strcmp(argument, "--keep")) { continue; } /* keep source file (default anyway; just for xz/lzma compatibility) */
+ if (!strcmp(argument, "--keep")) { LZ4IO_setRemoveSrcFile(0); continue; } /* keep source file (default anyway; just for xz/lzma compatibility) */
+ if (!strcmp(argument, "--rm")) { LZ4IO_setRemoveSrcFile(1); continue; }
/* Short commands (note : aggregated short commands are allowed) */
if (argument[0]=='-') {
@@ -406,7 +408,7 @@ int main(int argc, const char** argv)
case 'q': if (displayLevel) displayLevel--; break;
/* keep source file (default anyway, so useless) (for xz/lzma compatibility) */
- case 'k': break;
+ case 'k': LZ4IO_setRemoveSrcFile(0); break;
/* Modify Block Properties */
case 'B':
diff --git a/programs/lz4io.c b/programs/lz4io.c
index 2f64561..02f4c2b 100644
--- a/programs/lz4io.c
+++ b/programs/lz4io.c
@@ -33,14 +33,7 @@
/**************************************
* Compiler Options
**************************************/
-#ifdef _MSC_VER /* Visual Studio */
-# define _CRT_SECURE_NO_WARNINGS
-# define _CRT_SECURE_NO_DEPRECATE /* VS2005 */
-# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
-#endif
-
#define _LARGE_FILES /* Large file support on 32-bits AIX */
-#define _FILE_OFFSET_BITS 64 /* Large file support on 32-bits unix */
#if defined(__MINGW32__) && !defined(_POSIX_SOURCE)
# define _POSIX_SOURCE 1 /* disable %llu warnings with MinGW on Windows */
@@ -49,6 +42,7 @@
/*****************************
* Includes
*****************************/
+#include "util.h" /* Compiler options, UTIL_getFileStat */
#include <stdio.h> /* fprintf, fopen, fread, stdin, stdout, fflush, getchar */
#include <stdlib.h> /* malloc, free */
#include <string.h> /* strcmp, strlen */
@@ -84,10 +78,6 @@
# define SET_SPARSE_FILE_MODE(file)
#endif
-#if !defined(S_ISREG)
-# define S_ISREG(x) (((x) & S_IFMT) == S_IFREG)
-#endif
-
/*****************************
* Constants
@@ -242,19 +232,9 @@ int LZ4IO_setContentSize(int enable)
return g_contentSizeFlag;
}
-static unsigned long long LZ4IO_GetFileSize(const char* infilename)
-{
- int r;
-#if defined(_MSC_VER)
- struct _stat64 statbuf;
- r = _stat64(infilename, &statbuf);
-#else
- struct stat statbuf;
- r = stat(infilename, &statbuf);
-#endif
- if (r || !S_ISREG(statbuf.st_mode)) return 0; /* failure, or is not a regular file */
- return (unsigned long long)statbuf.st_size;
-}
+static U32 g_removeSrcFile = 0;
+void LZ4IO_setRemoveSrcFile(unsigned flag) { g_removeSrcFile = (flag>0); }
+
/* ************************************************************************ **
@@ -465,7 +445,6 @@ static int LZ4IO_compressFilename_extRess(cRess_t ress, const char* srcFileName,
LZ4F_compressionContext_t ctx = ress.ctx; /* just a pointer */
LZ4F_preferences_t prefs;
-
/* Init */
memset(&prefs, 0, sizeof(prefs));
@@ -479,7 +458,7 @@ static int LZ4IO_compressFilename_extRess(cRess_t ress, const char* srcFileName,
prefs.frameInfo.blockSizeID = (LZ4F_blockSizeID_t)g_blockSizeId;
prefs.frameInfo.contentChecksumFlag = (LZ4F_contentChecksum_t)g_streamChecksum;
if (g_contentSizeFlag) {
- unsigned long long const fileSize = LZ4IO_GetFileSize(srcFileName);
+ U64 const fileSize = UTIL_getFileSize(srcFileName);
prefs.frameInfo.contentSize = fileSize; /* == 0 if input == stdin */
if (fileSize==0)
DISPLAYLEVEL(3, "Warning : cannot determine input content size \n");
@@ -547,6 +526,14 @@ static int LZ4IO_compressFilename_extRess(cRess_t ress, const char* srcFileName,
fclose (srcFile);
fclose (dstFile);
+ /* Copy owner, file permissions and modification time */
+ { stat_t statbuf;
+ if (strcmp (srcFileName, stdinmark) && strcmp (dstFileName, stdoutmark) && UTIL_getFileStat(srcFileName, &statbuf))
+ UTIL_setFileStat(dstFileName, &statbuf);
+ }
+
+ if (g_removeSrcFile) { if (remove(srcFileName)) EXM_THROW(39, "Remove error : %s: %s", srcFileName, strerror(errno)); } /* remove source file : --rm */
+
/* Final Status */
DISPLAYLEVEL(2, "\r%79s\r", "");
DISPLAYLEVEL(2, "Compressed %llu bytes into %llu bytes ==> %.2f%%\n",
@@ -946,14 +933,22 @@ static int LZ4IO_decompressFile_extRess(dRess_t ress, const char* input_filename
filesize += decodedSize;
} while (decodedSize != ENDOFSTREAM);
- /* Final Status */
- DISPLAYLEVEL(2, "\r%79s\r", "");
- DISPLAYLEVEL(2, "Successfully decoded %llu bytes \n", filesize);
-
/* Close */
fclose(finput);
fclose(foutput);
+ /* Copy owner, file permissions and modification time */
+ { stat_t statbuf;
+ if (strcmp (input_filename, stdinmark) && strcmp (output_filename, stdoutmark) && UTIL_getFileStat(input_filename, &statbuf))
+ UTIL_setFileStat(output_filename, &statbuf);
+ }
+
+ if (g_removeSrcFile) { if (remove(input_filename)) EXM_THROW(45, "Remove error : %s: %s", input_filename, strerror(errno)); } /* remove source file : --rm */
+
+ /* Final Status */
+ DISPLAYLEVEL(2, "\r%79s\r", "");
+ DISPLAYLEVEL(2, "Successfully decoded %llu bytes \n", filesize);
+
return 0;
}
diff --git a/programs/lz4io.h b/programs/lz4io.h
index bf076ee..45ae78d 100644
--- a/programs/lz4io.h
+++ b/programs/lz4io.h
@@ -89,3 +89,5 @@ int LZ4IO_setSparseFile(int enable);
/* Default setting : 0 (disabled) */
int LZ4IO_setContentSize(int enable);
+
+void LZ4IO_setRemoveSrcFile(unsigned flag);
diff --git a/tests/Makefile b/tests/Makefile
index 0dd8a59..d5aad60 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -97,6 +97,9 @@ frametest: $(LZ4DIR)/lz4frame.o $(LZ4DIR)/lz4.o $(LZ4DIR)/lz4hc.o $(LZ4DIR)/xxha
frametest32: $(LZ4DIR)/lz4frame.c $(LZ4DIR)/lz4.c $(LZ4DIR)/lz4hc.c $(LZ4DIR)/xxhash.c frametest.c
$(CC) -m32 $(FLAGS) $^ -o $@$(EXT)
+fasttest: $(LZ4DIR)/lz4.o fasttest.c
+ $(CC) $(FLAGS) $^ -o $@$(EXT)
+
datagen : $(PRGDIR)/datagen.c datagencli.c
$(CC) $(FLAGS) -I$(PRGDIR) $^ -o $@$(EXT)
@@ -119,9 +122,9 @@ versionsTest:
#FreeBSD targets
ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU FreeBSD))
-test: test-lz4 test-lz4c test-frametest test-fullbench test-fuzzer test-mem
+test: test-lz4 test-lz4c test-fasttest test-frametest test-fullbench test-fuzzer
-test32: test-lz4c32 test-frametest32 test-fullbench32 test-fuzzer32 test-mem32
+test32: test-lz4c32 test-frametest32 test-fullbench32 test-fuzzer32
test-all: test test32
@@ -267,6 +270,9 @@ test-frametest: frametest
test-frametest32: frametest32
./frametest32 $(FUZZER_TIME)
+test-fasttest: fasttest
+ ./fasttest
+
test-mem: lz4 datagen fuzzer frametest fullbench
@echo "\n ---- valgrind tests : memory analyzer ----"
valgrind --leak-check=yes --error-exitcode=1 ./datagen -g50M > $(VOID)
diff --git a/tests/fasttest.c b/tests/fasttest.c
new file mode 100644
index 0000000..a405542
--- /dev/null
+++ b/tests/fasttest.c
@@ -0,0 +1,138 @@
+/**************************************
+ * Compiler Options
+ **************************************/
+#ifdef _MSC_VER /* Visual Studio */
+# define _CRT_SECURE_NO_WARNINGS // for MSVC
+# define snprintf sprintf_s
+#endif
+#ifdef __GNUC__
+# pragma GCC diagnostic ignored "-Wmissing-braces" /* GCC bug 53119 : doesn't accept { 0 } as initializer (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119) */
+#endif
+
+
+/**************************************
+ * Includes
+ **************************************/
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include "lz4.h"
+
+
+/* Returns non-zero on failure. */
+int test_compress(const char *input, int inSize, char *output, int outSize)
+{
+ LZ4_stream_t lz4Stream_body = { 0 };
+ LZ4_stream_t* lz4Stream = &lz4Stream_body;
+
+ int inOffset = 0;
+ int outOffset = 0;
+
+ if (inSize & 3) return -1;
+
+ while (inOffset < inSize) {
+ const int length = inSize >> 2;
+ if (inSize > 1024) return -2;
+ if (outSize - (outOffset + 8) < LZ4_compressBound(length)) return -3;
+ {
+ const int outBytes = LZ4_compress_continue(
+ lz4Stream, input + inOffset, output + outOffset + 8, length);
+ if(outBytes <= 0) return -4;
+ memcpy(output + outOffset, &length, 4); /* input length */
+ memcpy(output + outOffset + 4, &outBytes, 4); /* output length */
+ inOffset += length;
+ outOffset += outBytes + 8;
+ }
+ }
+ if (outOffset + 8 > outSize) return -5;
+ memset(output + outOffset, 0, 4);
+ memset(output + outOffset + 4, 0, 4);
+ return 0;
+}
+
+void swap(void **a, void **b) {
+ void *tmp = *a;
+ *a = *b;
+ *b = tmp;
+}
+
+/* Returns non-zero on failure. Not a safe function. */
+int test_decompress(const char *uncompressed, const char *compressed)
+{
+ char outBufferA[1024];
+ char spacing; /* So prefixEnd != dest */
+ char outBufferB[1024];
+ char *output = outBufferA;
+ char *lastOutput = outBufferB;
+ LZ4_streamDecode_t lz4StreamDecode_body = { 0 };
+ LZ4_streamDecode_t* lz4StreamDecode = &lz4StreamDecode_body;
+ int offset = 0;
+ int unOffset = 0;
+ int lastBytes = 0;
+
+ (void)spacing;
+
+ for(;;) {
+ int32_t bytes;
+ int32_t unBytes;
+ /* Read uncompressed size and compressed size */
+ memcpy(&unBytes, compressed + offset, 4);
+ memcpy(&bytes, compressed + offset + 4, 4);
+ offset += 8;
+ /* Check if we reached end of stream or error */
+ if(bytes == 0 && unBytes == 0) return 0;
+ if(bytes <= 0 || unBytes <= 0 || unBytes > 1024) return 1;
+
+ /* Put the last output in the dictionary */
+ LZ4_setStreamDecode(lz4StreamDecode, lastOutput, lastBytes);
+ /* Decompress */
+ bytes = LZ4_decompress_fast_continue(
+ lz4StreamDecode, compressed + offset, output, unBytes);
+ if(bytes <= 0) return 2;
+ /* Check result */
+ {
+ int r = memcmp(uncompressed + unOffset, output, unBytes);
+ if (r) return 3;
+ }
+ swap((void**)&output, (void**)&lastOutput);
+ offset += bytes;
+ unOffset += unBytes;
+ lastBytes = unBytes;
+ }
+}
+
+
+int main(int argc, char **argv)
+{
+ char input[] =
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello!"
+ "Hello Hello Hello Hello Hello Hello Hello Hello";
+ char output[LZ4_COMPRESSBOUND(4096)];
+ int r;
+
+ (void)argc;
+ (void)argv;
+
+ if ((r = test_compress(input, sizeof(input), output, sizeof(output)))) {
+ return r;
+ }
+ if ((r = test_decompress(input, output))) {
+ return r;
+ }
+ return 0;
+}
diff --git a/visual/VS2010/datagen/datagen.vcxproj b/visual/VS2010/datagen/datagen.vcxproj
index 4d7516e..587e457 100644
--- a/visual/VS2010/datagen/datagen.vcxproj
+++ b/visual/VS2010/datagen/datagen.vcxproj
@@ -121,7 +121,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
<Link>
@@ -140,7 +140,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>true</EnablePREfast>
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
diff --git a/visual/VS2010/frametest/frametest.vcxproj b/visual/VS2010/frametest/frametest.vcxproj
index 5def90e..7ac7e33 100644
--- a/visual/VS2010/frametest/frametest.vcxproj
+++ b/visual/VS2010/frametest/frametest.vcxproj
@@ -121,7 +121,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
<Link>
@@ -140,7 +140,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>true</EnablePREfast>
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
diff --git a/visual/VS2010/fullbench/fullbench.vcxproj b/visual/VS2010/fullbench/fullbench.vcxproj
index 3d858a3..6e2488c 100644
--- a/visual/VS2010/fullbench/fullbench.vcxproj
+++ b/visual/VS2010/fullbench/fullbench.vcxproj
@@ -121,7 +121,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
<Link>
@@ -140,7 +140,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>true</EnablePREfast>
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
diff --git a/visual/VS2010/fuzzer/fuzzer.vcxproj b/visual/VS2010/fuzzer/fuzzer.vcxproj
index 2b2d58d..8469c7b 100644
--- a/visual/VS2010/fuzzer/fuzzer.vcxproj
+++ b/visual/VS2010/fuzzer/fuzzer.vcxproj
@@ -121,7 +121,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
<Link>
@@ -140,7 +140,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>true</EnablePREfast>
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
diff --git a/visual/VS2010/liblz4/liblz4.vcxproj b/visual/VS2010/liblz4/liblz4.vcxproj
index cbc2173..cbe93bb 100644
--- a/visual/VS2010/liblz4/liblz4.vcxproj
+++ b/visual/VS2010/liblz4/liblz4.vcxproj
@@ -119,7 +119,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
<Link>
@@ -137,7 +137,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>true</EnablePREfast>
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
diff --git a/visual/VS2010/lz4/lz4.vcxproj b/visual/VS2010/lz4/lz4.vcxproj
index 7513d8c..d12ae65 100644
--- a/visual/VS2010/lz4/lz4.vcxproj
+++ b/visual/VS2010/lz4/lz4.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
@@ -28,24 +28,24 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
+ <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
+ <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
- <CharacterSet>Unicode</CharacterSet>
+ <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
- <CharacterSet>Unicode</CharacterSet>
+ <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -121,7 +121,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
<Link>
@@ -140,7 +140,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LZ4_DLL_EXPORT=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <TreatWarningAsError>true</TreatWarningAsError>
+ <TreatWarningAsError>false</TreatWarningAsError>
<EnablePREfast>true</EnablePREfast>
<AdditionalOptions>/analyze:stacksize295252 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
@@ -157,6 +157,7 @@
<ClInclude Include="..\..\..\lib\lz4frame_static.h" />
<ClInclude Include="..\..\..\lib\lz4hc.h" />
<ClInclude Include="..\..\..\lib\xxhash.h" />
+ <ClInclude Include="..\..\..\programs\datagen.h" />
<ClInclude Include="..\..\..\programs\bench.h" />
<ClInclude Include="..\..\..\programs\lz4io.h" />
</ItemGroup>
@@ -165,6 +166,7 @@
<ClCompile Include="..\..\..\lib\lz4frame.c" />
<ClCompile Include="..\..\..\lib\lz4hc.c" />
<ClCompile Include="..\..\..\lib\xxhash.c" />
+ <ClCompile Include="..\..\..\programs\datagen.c" />
<ClCompile Include="..\..\..\programs\bench.c" />
<ClCompile Include="..\..\..\programs\lz4cli.c" />
<ClCompile Include="..\..\..\programs\lz4io.c" />
@@ -172,4 +174,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
+</Project> \ No newline at end of file