From 8f844fe70068d2a632e7f0e24ecfa05a1d3e1302 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Sat, 13 Dec 2014 11:49:55 +0100 Subject: Fixed : minor warnings under Visual --- examples/HCStreaming_ringBuffer.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) mode change 100644 => 100755 examples/HCStreaming_ringBuffer.c diff --git a/examples/HCStreaming_ringBuffer.c b/examples/HCStreaming_ringBuffer.c old mode 100644 new mode 100755 index dfa2670..cfae9d7 --- a/examples/HCStreaming_ringBuffer.c +++ b/examples/HCStreaming_ringBuffer.c @@ -58,7 +58,6 @@ void test_compress(FILE* outFp, FILE* inpFp) static char inpBuf[RING_BUFFER_BYTES]; int inpOffset = 0; - unsigned done = 0; for(;;) { @@ -77,7 +76,6 @@ void test_compress(FILE* outFp, FILE* inpFp) write_bin(outFp, cmpBuf, cmpBytes); inpOffset += inpBytes; - done += inpBytes; // Wraparound the ringbuffer offset if(inpOffset >= RING_BUFFER_BYTES - MESSAGE_MAX_BYTES) @@ -95,7 +93,6 @@ void test_decompress(FILE* outFp, FILE* inpFp) int decOffset = 0; LZ4_streamDecode_t lz4StreamDecode_body = { 0 }; LZ4_streamDecode_t* lz4StreamDecode = &lz4StreamDecode_body; - unsigned done = 0; for(;;) { @@ -120,7 +117,6 @@ void test_decompress(FILE* outFp, FILE* inpFp) if(decBytes <= 0) break; - done += decBytes; decOffset += decBytes; write_bin(outFp, decPtr, decBytes); @@ -153,7 +149,7 @@ size_t compare(FILE* f0, FILE* f1) size_t smallest = r0; if (r1 Date: Sat, 13 Dec 2014 15:05:46 +0100 Subject: New : lz4frame integrated into liblz4 (v1.5.0) --- Makefile | 26 +++++++-------- NEWS | 3 ++ cmake_unofficial/CMakeLists.txt | 4 +-- lib/Makefile | 13 ++++---- lib/lz4.h | 6 ++-- lib/lz4frame.c | 4 +-- lib/lz4frame.h | 18 ++--------- lib/lz4frame_static.h | 72 +++++++++++++++++++++++++++++++++++++++++ programs/Makefile | 6 ++-- programs/frametest.c | 6 ++-- programs/lz4cli.c | 16 ++++----- 11 files changed, 117 insertions(+), 57 deletions(-) create mode 100644 lib/lz4frame_static.h diff --git a/Makefile b/Makefile index 3b1e51f..1d190fd 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # ################################################################ -# LZ4 library - Makefile -# Copyright (C) Yann Collet 2011-2014 +# LZ4 - Makefile +# Copyright (C) Yann Collet 2011-2015 # All rights reserved. # # BSD license @@ -30,24 +30,22 @@ # - LZ4 forum froup : https://groups.google.com/forum/#!forum/lz4c # ################################################################ -# Version numbers -export VERSION=125 +# Version number +export VERSION=126 export RELEASE=r$(VERSION) DESTDIR?= PREFIX ?= /usr -CC := $(CC) -CFLAGS ?= -O3 -CFLAGS += -I. -std=c99 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -DLZ4_VERSION=\"$(RELEASE)\" -LIBDIR?= $(PREFIX)/lib +LIBDIR ?= $(PREFIX)/lib INCLUDEDIR=$(PREFIX)/include -PRGDIR = programs -LZ4DIR = lib +PRGDIR = programs +LZ4DIR = lib DISTRIBNAME=lz4-$(RELEASE).tar.gz TEXT = $(LZ4DIR)/lz4.c $(LZ4DIR)/lz4.h $(LZ4DIR)/lz4hc.c $(LZ4DIR)/lz4hc.h \ - $(LZ4DIR)/lz4frame.c $(LZ4DIR)/lz4frame.h $(LZ4DIR)/xxhash.c $(LZ4DIR)/xxhash.h \ + $(LZ4DIR)/lz4frame.c $(LZ4DIR)/lz4frame.h $(LZ4DIR)/lz4frame_static.h \ + $(LZ4DIR)/xxhash.c $(LZ4DIR)/xxhash.h \ $(LZ4DIR)/liblz4.pc.in $(LZ4DIR)/Makefile $(LZ4DIR)/LICENSE \ Makefile lz4_block_format.txt LZ4_Frame_Format.html NEWS README.md \ cmake_unofficial/CMakeLists.txt \ @@ -93,8 +91,8 @@ clean: ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU)) install: - @cd $(LZ4DIR); sudo $(MAKE) -e install - @cd $(PRGDIR); sudo $(MAKE) -e install + @cd $(LZ4DIR); $(MAKE) -e install + @cd $(PRGDIR); $(MAKE) -e install uninstall: @cd $(LZ4DIR); $(MAKE) uninstall @@ -119,7 +117,7 @@ dist: clean @echo Distribution $(DISTRIBNAME) built test: - @cd $(PRGDIR); $(MAKE) -e $@ + @cd $(PRGDIR); $(MAKE) -e test test-travis: $(TRAVIS_TARGET) diff --git a/NEWS b/NEWS index 5259573..36fde86 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,6 @@ +r126: +New : lz4frame API is now integrated into liblz4 + r125: Changed : endian and alignment code Changed : directory structure : new "lib" directory diff --git a/cmake_unofficial/CMakeLists.txt b/cmake_unofficial/CMakeLists.txt index cacaca1..bb7ab5f 100644 --- a/cmake_unofficial/CMakeLists.txt +++ b/cmake_unofficial/CMakeLists.txt @@ -1,8 +1,8 @@ PROJECT(LZ4 C) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LZ4 compression library") set(CPACK_PACKAGE_VERSION_MAJOR 1) -set(CPACK_PACKAGE_VERSION_MINOR 4) -set(CPACK_PACKAGE_VERSION_PATCH r125) +set(CPACK_PACKAGE_VERSION_MINOR 5) +set(CPACK_PACKAGE_VERSION_PATCH r126) set(VERSION_STRING " \"${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}\" ") include(CPack) diff --git a/lib/Makefile b/lib/Makefile index c59cc82..2c85ed8 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -1,6 +1,6 @@ # ################################################################ # LZ4 library - Makefile -# Copyright (C) Yann Collet 2011-2014 +# Copyright (C) Yann Collet 2011-2015 # All rights reserved. # # BSD license @@ -32,8 +32,7 @@ # ################################################################ # Version numbers -VERSION=125 -RELEASE=r$(VERSION) +VERSION ?= 126 LIBVER_MAJOR=`sed -n '/define LZ4_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < lz4.h` LIBVER_MINOR=`sed -n '/define LZ4_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < lz4.h` LIBVER_PATCH=`sed -n '/define LZ4_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < lz4.h` @@ -41,9 +40,8 @@ LIBVER=$(LIBVER_MAJOR).$(LIBVER_MINOR).$(LIBVER_PATCH) DESTDIR?= PREFIX ?= /usr -CC := $(CC) CFLAGS ?= -O3 -CFLAGS += -I. -std=c99 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -DLZ4_VERSION=\"$(RELEASE)\" +CFLAGS += -I. -std=c99 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Wstrict-prototypes LIBDIR?= $(PREFIX)/lib INCLUDEDIR=$(PREFIX)/include @@ -67,10 +65,10 @@ default: liblz4 all: liblz4 -liblz4: lz4.c lz4hc.c +liblz4: lz4.c lz4hc.c lz4frame.c xxhash.c @echo compiling static library @$(CC) $(CPPFLAGS) $(CFLAGS) -c $^ - @$(AR) rcs liblz4.a lz4.o lz4hc.o + @$(AR) rcs liblz4.a lz4.o lz4hc.o lz4frame.o xxhash.o @echo compiling dynamic library $(LIBVER) @$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared $^ -fPIC $(SONAME_FLAGS) -o $@.$(SHARED_EXT_VER) @echo creating versioned links @@ -103,6 +101,7 @@ install: liblz4 liblz4.pc @install -m 644 liblz4.a $(DESTDIR)$(LIBDIR)/liblz4.a @install -m 644 lz4.h $(DESTDIR)$(INCLUDEDIR)/lz4.h @install -m 644 lz4hc.h $(DESTDIR)$(INCLUDEDIR)/lz4hc.h + @install -m 644 lz4frame.h $(DESTDIR)$(INCLUDEDIR)/lz4frame.h @echo lz4 static and shared library installed uninstall: diff --git a/lib/lz4.h b/lib/lz4.h index 7392320..7778caa 100644 --- a/lib/lz4.h +++ b/lib/lz4.h @@ -46,9 +46,9 @@ extern "C" { /************************************** Version **************************************/ -#define LZ4_VERSION_MAJOR 1 /* for major interface/format changes */ -#define LZ4_VERSION_MINOR 4 /* for minor interface/format changes */ -#define LZ4_VERSION_RELEASE 1 /* for tweaks, bug-fixes, or development */ +#define LZ4_VERSION_MAJOR 1 /* for breaking interface changes */ +#define LZ4_VERSION_MINOR 5 /* for new (non-breaking) interface capabilities */ +#define LZ4_VERSION_RELEASE 0 /* for tweaks, bug-fixes, or development */ #define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE) int LZ4_versionNumber (void); diff --git a/lib/lz4frame.c b/lib/lz4frame.c index aa46152..5183f22 100644 --- a/lib/lz4frame.c +++ b/lib/lz4frame.c @@ -64,7 +64,7 @@ Memory routines /************************************** Includes **************************************/ -#include "lz4frame.h" +#include "lz4frame_static.h" #include "lz4.h" #include "lz4hc.h" #include "xxhash.h" @@ -161,7 +161,7 @@ Error management static const char* LZ4F_errorStrings[] = { LZ4F_LIST_ERRORS(LZ4F_GENERATE_STRING) }; -int LZ4F_isError(LZ4F_errorCode_t code) +U32 LZ4F_isError(LZ4F_errorCode_t code) { return (code > (LZ4F_errorCode_t)(-ERROR_maxCode)); } diff --git a/lib/lz4frame.h b/lib/lz4frame.h index 48fbf80..b2a7f40 100644 --- a/lib/lz4frame.h +++ b/lib/lz4frame.h @@ -60,20 +60,8 @@ extern "C" { * Error management * ************************************/ typedef size_t LZ4F_errorCode_t; -#define LZ4F_LIST_ERRORS(ITEM) \ - ITEM(OK_NoError) ITEM(ERROR_GENERIC) \ - ITEM(ERROR_maxBlockSize_invalid) ITEM(ERROR_blockMode_invalid) ITEM(ERROR_contentChecksumFlag_invalid) \ - ITEM(ERROR_compressionLevel_invalid) \ - ITEM(ERROR_allocation_failed) \ - ITEM(ERROR_srcSize_tooLarge) ITEM(ERROR_dstMaxSize_tooSmall) \ - ITEM(ERROR_decompressionFailed) \ - ITEM(ERROR_checksum_invalid) \ - ITEM(ERROR_maxCode) - -#define LZ4F_GENERATE_ENUM(ENUM) ENUM, -typedef enum { LZ4F_LIST_ERRORS(LZ4F_GENERATE_ENUM) } LZ4F_errorCodes; /* enum is exposed, to detect & handle specific errors; compare function result to -enum value */ - -int LZ4F_isError(LZ4F_errorCode_t code); /* Basically : code > -ERROR_maxCode */ + +unsigned LZ4F_isError(LZ4F_errorCode_t code); const char* LZ4F_getErrorName(LZ4F_errorCode_t code); /* return error code string; useful for debugging */ @@ -108,7 +96,7 @@ size_t LZ4F_compressFrameBound(size_t srcSize, const LZ4F_preferences_t* prefere size_t LZ4F_compressFrame(void* dstBuffer, size_t dstMaxSize, const void* srcBuffer, size_t srcSize, const LZ4F_preferences_t* preferencesPtr); /* LZ4F_compressFrame() - * Compress an entire srcBuffer into a valid LZ4 frame, as defined by specification v1.4.1, in a single step. + * Compress an entire srcBuffer into a valid LZ4 frame, as defined by specification v1.4.1. * The most important rule is that dstBuffer MUST be large enough (dstMaxSize) to ensure compression completion even in worst case. * You can get the minimum value of dstMaxSize by using LZ4F_compressFrameBound() * If this condition is not respected, LZ4F_compressFrame() will fail (result is an errorCode) diff --git a/lib/lz4frame_static.h b/lib/lz4frame_static.h new file mode 100644 index 0000000..cde8186 --- /dev/null +++ b/lib/lz4frame_static.h @@ -0,0 +1,72 @@ +/* + LZ4 auto-framing library + Header File for static linking only + Copyright (C) 2011-2015, Yann Collet. + + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - LZ4 source repository : http://code.google.com/p/lz4/ + - LZ4 source mirror : https://github.com/Cyan4973/lz4 + - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c +*/ + +#pragma once + +#if defined (__cplusplus) +extern "C" { +#endif + +/* lz4frame_static.h should be used solely in the context of static linking. + * */ + + +/************************************** + * Error management + * ************************************/ +#define LZ4F_LIST_ERRORS(ITEM) \ + ITEM(OK_NoError) ITEM(ERROR_GENERIC) \ + ITEM(ERROR_maxBlockSize_invalid) ITEM(ERROR_blockMode_invalid) ITEM(ERROR_contentChecksumFlag_invalid) \ + ITEM(ERROR_compressionLevel_invalid) \ + ITEM(ERROR_allocation_failed) \ + ITEM(ERROR_srcSize_tooLarge) ITEM(ERROR_dstMaxSize_tooSmall) \ + ITEM(ERROR_decompressionFailed) \ + ITEM(ERROR_checksum_invalid) \ + ITEM(ERROR_maxCode) + +#define LZ4F_GENERATE_ENUM(ENUM) ENUM, +typedef enum { LZ4F_LIST_ERRORS(LZ4F_GENERATE_ENUM) } LZ4F_errorCodes; /* enum is exposed, to handle specific errors; compare function result to -enum value */ + + +/************************************** + Includes +**************************************/ +#include "lz4frame.h" + + +#if defined (__cplusplus) +} +#endif diff --git a/programs/Makefile b/programs/Makefile index aaaa00e..f097d06 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -1,6 +1,7 @@ # ########################################################################## # LZ4 programs - Makefile -# Copyright (C) Yann Collet 2011-2014 +# Copyright (C) Yann Collet 2011-2015 +# # GPL v2 License # # This program is free software; you can redistribute it and/or modify @@ -30,11 +31,10 @@ # fullbench32: Same as fullbench, but forced to compile in 32-bits mode # ########################################################################## -RELEASE=r125 +RELEASE?= r126 DESTDIR?= PREFIX ?= /usr -CC := $(CC) CFLAGS ?= -O3 CFLAGS += -std=c99 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -DLZ4_VERSION=\"$(RELEASE)\" FLAGS = -I../lib $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) diff --git a/programs/frametest.c b/programs/frametest.c index 2a0c603..71490a6 100644 --- a/programs/frametest.c +++ b/programs/frametest.c @@ -38,13 +38,13 @@ /************************************** - Includes + Includes **************************************/ -#include +#include // free #include // fgets, sscanf #include // timeb #include // strcmp -#include "lz4frame.h" +#include "lz4frame_static.h" #include "xxhash.h" // XXH64 diff --git a/programs/lz4cli.c b/programs/lz4cli.c index 6f62095..b755ab8 100644 --- a/programs/lz4cli.c +++ b/programs/lz4cli.c @@ -55,7 +55,7 @@ //**************************** // Includes //**************************** -#include // fprintf, fopen, fread, _fileno, stdin, stdout +#include // fprintf, getchar #include // exit, calloc, free #include // strcmp, strlen #include "bench.h" // BMK_benchFile, BMK_SetNbIterations, BMK_SetBlocksize, BMK_SetPause @@ -85,7 +85,7 @@ //**************************** #define COMPRESSOR_NAME "LZ4 command line interface" #ifndef LZ4_VERSION -# define LZ4_VERSION "r125" +# define LZ4_VERSION "r126" #endif #define AUTHOR "Yann Collet" #define WELCOME_MESSAGE "*** %s %i-bits %s, by %s (%s) ***\n", COMPRESSOR_NAME, (int)(sizeof(void*)*8), LZ4_VERSION, AUTHOR, __DATE__ @@ -136,13 +136,13 @@ static char* programName; #define EXTENDED_FORMAT #define DEFAULT_COMPRESSOR LZ4IO_compressFilename #define DEFAULT_DECOMPRESSOR LZ4IO_decompressFilename -int LZ4IO_compressFilename_Legacy(char* input_filename, char* output_filename, int compressionlevel); +int LZ4IO_compressFilename_Legacy(char* input_filename, char* output_filename, int compressionlevel); // hidden function //**************************** // Functions //**************************** -int usage(void) +static int usage(void) { DISPLAY( "Usage :\n"); DISPLAY( " %s [arg] [input] [output]\n", programName); @@ -159,7 +159,7 @@ int usage(void) return 0; } -int usage_advanced(void) +static int usage_advanced(void) { DISPLAY(WELCOME_MESSAGE); usage(); @@ -190,7 +190,7 @@ int usage_advanced(void) return 0; } -int usage_longhelp(void) +static int usage_longhelp(void) { DISPLAY( "\n"); DISPLAY( "Which values can get [output] ? \n"); @@ -240,7 +240,7 @@ int usage_longhelp(void) return 0; } -int badusage(void) +static int badusage(void) { DISPLAYLEVEL(1, "Incorrect parameters\n"); if (displayLevel >= 1) usage(); @@ -248,7 +248,7 @@ int badusage(void) } -void waitEnter(void) +static void waitEnter(void) { DISPLAY("Press enter to continue...\n"); getchar(); -- cgit v0.12 From cbefc2bf7d52ff7ee0d60a84c7c7e5122a7c0919 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Sat, 13 Dec 2014 15:38:15 +0100 Subject: Fixed : install test on travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a8866a1..896aa81 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: c compiler: gcc -script: make test-travis +script: sudo make test-travis before_install: - sudo apt-get update -qq - sudo apt-get install -qq gcc-multilib -- cgit v0.12 From b6788b004d8cd9000ca135f9bc0f55b72332928f Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Sat, 13 Dec 2014 16:41:05 +0100 Subject: fixed travis tests --- .travis.yml | 4 ++-- Makefile | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 896aa81..9eff075 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,13 @@ language: c compiler: gcc -script: sudo make test-travis +script: make test-travis before_install: - sudo apt-get update -qq - sudo apt-get install -qq gcc-multilib - sudo apt-get install -qq valgrind env: - - LZ4_TRAVIS_CI_ENV=install + - LZ4_TRAVIS_CI_ENV=travis-install - LZ4_TRAVIS_CI_ENV=streaming-examples - LZ4_TRAVIS_CI_ENV=cmake - LZ4_TRAVIS_CI_ENV=dist diff --git a/Makefile b/Makefile index 1d190fd..c486239 100644 --- a/Makefile +++ b/Makefile @@ -98,6 +98,9 @@ uninstall: @cd $(LZ4DIR); $(MAKE) uninstall @cd $(PRGDIR); $(MAKE) uninstall +travis-install: + sudo $(MAKE) install + dist: clean @install -dD -m 700 lz4-$(RELEASE)/lib/ @install -dD -m 700 lz4-$(RELEASE)/programs/ -- cgit v0.12 From 12adbcaebcde55a1d29a7bca948c10de32aa8678 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Sat, 13 Dec 2014 17:08:51 +0100 Subject: Updated comments --- lib/lz4frame.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lib/lz4frame.h b/lib/lz4frame.h index b2a7f40..d73e3e2 100644 --- a/lib/lz4frame.h +++ b/lib/lz4frame.h @@ -45,11 +45,6 @@ extern "C" { #endif -/**************************************** - Note : experimental API. - Not yet integrated within liblz4 -****************************************/ - /************************************** Includes **************************************/ @@ -68,7 +63,6 @@ const char* LZ4F_getErrorName(LZ4F_errorCode_t code); /* return error code str /************************************** * Frame compression types * ************************************/ - typedef enum { LZ4F_default=0, max64KB=4, max256KB=5, max1MB=6, max4MB=7 } blockSizeID_t; typedef enum { blockLinked=0, blockIndependent} blockMode_t; typedef enum { noContentChecksum=0, contentChecksumEnabled } contentChecksum_t; @@ -88,7 +82,6 @@ typedef struct { } LZ4F_preferences_t; - /*********************************** * Simple compression function * *********************************/ @@ -110,7 +103,6 @@ size_t LZ4F_compressFrame(void* dstBuffer, size_t dstMaxSize, const void* srcBuf /********************************** * Advanced compression functions * ********************************/ - typedef void* LZ4F_compressionContext_t; typedef struct { -- cgit v0.12 From 7a8cd6996072f53f83ded52a325a4c4a4aed5a35 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Sun, 14 Dec 2014 14:29:15 +0100 Subject: Fixed : GCC 4.9 bug on highest performance settings, reported by Greg Slazinski --- NEWS | 1 + lib/lz4.c | 26 ++++++++++++-------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/NEWS b/NEWS index 36fde86..67f63a4 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,6 @@ r126: New : lz4frame API is now integrated into liblz4 +Fixed : GCC 4.9 bug on highest performance settings, reported by Greg Slazinski r125: Changed : endian and alignment code diff --git a/lib/lz4.c b/lib/lz4.c index 2ed686b..d622584 100644 --- a/lib/lz4.c +++ b/lib/lz4.c @@ -264,6 +264,7 @@ static void LZ4_copy4(void* dstPtr, const void* srcPtr) static void LZ4_copy8(void* dstPtr, const void* srcPtr) { +#if GCC_VERSION!=409 // disabled on GCC 4.9, as it generates invalid opcode that crashes if (LZ4_UNALIGNED_ACCESS) { if (LZ4_64bits()) @@ -273,6 +274,7 @@ static void LZ4_copy8(void* dstPtr, const void* srcPtr) ((U32*)dstPtr)[1] = ((U32*)srcPtr)[1]; return; } +#endif memcpy(dstPtr, srcPtr, 8); } @@ -410,13 +412,10 @@ static unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLi **************************************/ #define LZ4_HASHLOG (LZ4_MEMORY_USAGE-2) #define HASHTABLESIZE (1 << LZ4_MEMORY_USAGE) -#define HASH_SIZE_U32 (1 << LZ4_HASHLOG) - -#define LZ4_64KLIMIT ((64 KB) + (MFLIMIT-1)) -#define SKIPSTRENGTH 6 /* Increasing this value will make the compression run slower on incompressible data */ +#define HASH_SIZE_U32 (1 << LZ4_HASHLOG) /* required as macro for static allocation */ -#define MAXD_LOG 16 -#define MAX_DISTANCE ((1 << MAXD_LOG) - 1) +static const int LZ4_64Klimit = ((64 KB) + (MFLIMIT-1)); +static const U32 LZ4_skipTrigger = 6; /* Increase this value ==> compression run slower on incompressible data */ /************************************** @@ -520,7 +519,6 @@ static int LZ4_compress_generic( BYTE* op = (BYTE*) dest; BYTE* const olimit = op + maxOutputSize; - const int skipStrength = SKIPSTRENGTH; U32 forwardH; size_t refDelta=0; @@ -542,7 +540,7 @@ static int LZ4_compress_generic( lowLimit = (const BYTE*)source; break; } - if ((tableType == byU16) && (inputSize>=(int)LZ4_64KLIMIT)) return 0; /* Size too large (not within 64K limit) */ + if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */ if (inputSize> skipStrength; + step = searchMatchNb++ >> LZ4_skipTrigger; if (unlikely(forwardIp > mflimit)) goto _last_literals; @@ -714,7 +712,7 @@ int LZ4_compress(const char* source, char* dest, int inputSize) #endif int result; - if (inputSize < (int)LZ4_64KLIMIT) + if (inputSize < LZ4_64Klimit) result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, 0, notLimited, byU16, noDict, noDictIssue); else result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, 0, notLimited, LZ4_64bits() ? byU32 : byPtr, noDict, noDictIssue); @@ -734,7 +732,7 @@ int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, in #endif int result; - if (inputSize < (int)LZ4_64KLIMIT) + if (inputSize < LZ4_64Klimit) result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue); else result = LZ4_compress_generic((void*)ctx, source, dest, inputSize, maxOutputSize, limitedOutput, LZ4_64bits() ? byU32 : byPtr, noDict, noDictIssue); @@ -1332,7 +1330,7 @@ int LZ4_compress_withState (void* state, const char* source, char* dest, int inp if (((size_t)(state)&3) != 0) return 0; /* Error : state is not aligned on 4-bytes boundary */ MEM_INIT(state, 0, LZ4_STREAMSIZE); - if (inputSize < (int)LZ4_64KLIMIT) + if (inputSize < LZ4_64Klimit) return LZ4_compress_generic(state, source, dest, inputSize, 0, notLimited, byU16, noDict, noDictIssue); else return LZ4_compress_generic(state, source, dest, inputSize, 0, notLimited, LZ4_64bits() ? byU32 : byPtr, noDict, noDictIssue); @@ -1343,7 +1341,7 @@ int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* if (((size_t)(state)&3) != 0) return 0; /* Error : state is not aligned on 4-bytes boundary */ MEM_INIT(state, 0, LZ4_STREAMSIZE); - if (inputSize < (int)LZ4_64KLIMIT) + if (inputSize < LZ4_64Klimit) return LZ4_compress_generic(state, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue); else return LZ4_compress_generic(state, source, dest, inputSize, maxOutputSize, limitedOutput, LZ4_64bits() ? byU32 : byPtr, noDict, noDictIssue); -- cgit v0.12 From 95cc6cef6444b202a93ba414b7a9996eb2c72ca3 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Tue, 16 Dec 2014 02:13:19 +0100 Subject: Fixed : bug within LZ4 HC streaming mode, reported by James Boyle --- NEWS | 3 ++- lib/lz4.c | 2 +- lib/lz4hc.c | 1 + programs/Makefile | 1 + programs/datagen.c | 41 ++++++++++++++++++++++------------------- 5 files changed, 27 insertions(+), 21 deletions(-) diff --git a/NEWS b/NEWS index 67f63a4..21c54dc 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,7 @@ r126: New : lz4frame API is now integrated into liblz4 -Fixed : GCC 4.9 bug on highest performance settings, reported by Greg Slazinski +Fixed : GCC 4.9 bug on highest performance settings, reported by Greg Slazinski +Fixed : bug within LZ4 HC streaming mode, reported by James Boyle r125: Changed : endian and alignment code diff --git a/lib/lz4.c b/lib/lz4.c index d622584..a365375 100644 --- a/lib/lz4.c +++ b/lib/lz4.c @@ -541,7 +541,7 @@ static int LZ4_compress_generic( break; } if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */ - if (inputSizebase = streamPtr->end - endIndex; streamPtr->dictLimit = endIndex - dictSize; streamPtr->lowLimit = endIndex - dictSize; + if (streamPtr->nextToUpdate < streamPtr->dictLimit) streamPtr->nextToUpdate = streamPtr->dictLimit; } return dictSize; } diff --git a/programs/Makefile b/programs/Makefile index f097d06..67218c1 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -142,6 +142,7 @@ test-travis: $(TRAVIS_TARGET) test-lz4: lz4 datagen ./datagen -g16KB | ./lz4 -9 | ./lz4 -vdq > $(VOID) ./datagen | ./lz4 | ./lz4 -vdq > $(VOID) + ./datagen -g6M -p100 | ./lz4 -9BD | ./lz4 -vdq > $(VOID) ./datagen -g256MB | ./lz4 -vqB4D | ./lz4 -vdq > $(VOID) ./datagen -g6GB | ./lz4 -vqB5D | ./lz4 -vdq > $(VOID) # test frame concatenation with null-length frame diff --git a/programs/datagen.c b/programs/datagen.c index 706c30f..0f07477 100644 --- a/programs/datagen.c +++ b/programs/datagen.c @@ -1,6 +1,7 @@ /* datagen.c - compressible data generator test tool - Copyright (C) Yann Collet 2012-2014 + Copyright (C) Yann Collet 2012-2015 + GPL v2 License This program is free software; you can redistribute it and/or modify @@ -18,8 +19,9 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. You can contact the author at : - - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - - LZ4 source repository : http://code.google.com/p/lz4/ + - LZ4 source repository : http://code.google.com/p/lz4 + - LZ4 source mirror : https://github.com/Cyan4973/lz4 + - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c */ /************************************** @@ -31,7 +33,6 @@ /************************************** Includes **************************************/ -//#include #include // fgets, sscanf #include // strcmp @@ -59,11 +60,11 @@ Constants **************************************/ #ifndef LZ4_VERSION -# define LZ4_VERSION "rc118" +# define LZ4_VERSION "r125" #endif -#define KB *(1U<<10) -#define MB *(1U<<20) +#define KB *(1 <<10) +#define MB *(1 <<20) #define GB *(1U<<30) #define CDG_SIZE_DEFAULT (64 KB) @@ -83,13 +84,13 @@ /************************************** Local Parameters **************************************/ -static int no_prompt = 0; -static char* programName; -static int displayLevel = 2; +static unsigned no_prompt = 0; +static char* programName; +static unsigned displayLevel = 2; /********************************************************* - Fuzzer functions + functions *********************************************************/ #define CDG_rotl32(x,r) ((x << r) | (x >> (32 - r))) @@ -113,10 +114,11 @@ static void CDG_generate(U64 size, U32* seed, double proba) BYTE* buff = fullbuff + 32 KB; U64 total=0; U32 P32 = (U32)(32768 * proba); - U32 pos=0; + U32 pos=1; U32 genBlockSize = 128 KB; // Build initial prefix + fullbuff[0] = CDG_RANDCHAR; while (pos<32 KB) { // Select : Literal (char) or Match (within 32K) @@ -135,9 +137,7 @@ static void CDG_generate(U64 size, U32* seed, double proba) else { // Literal (noise) - U32 d; - int length = CDG_RANDLENGTH; - d = pos + length; + U32 d = pos + CDG_RANDLENGTH; while (pos < d) fullbuff[pos++] = CDG_RANDCHAR; } } @@ -175,8 +175,10 @@ static void CDG_generate(U64 size, U32* seed, double proba) while (pos < d) buff[pos++] = CDG_RANDCHAR; } } + // output datagen pos=0; - for (;pos+512<=genBlockSize;pos+=512) printf("%512.512s", buff+pos); + for (;pos+512<=genBlockSize;pos+=512) + printf("%512.512s", buff+pos); for (;pos Date: Tue, 16 Dec 2014 22:03:16 +0100 Subject: Fixed : older compiler don't like nameless unions, reported by Cheyi Lin --- NEWS | 1 + lib/lz4.c | 16 +++-- lib/lz4hc.c | 22 +++--- lib/xxhash.c | 146 ++++++++++++++++++++------------------ programs/Makefile | 6 +- programs/bench.c | 131 +++++++++++++++++----------------- programs/lz4cli.c | 207 +++++++++++++++++++++++++++--------------------------- programs/lz4io.c | 184 ++++++++++++++++++++++++------------------------ 8 files changed, 362 insertions(+), 351 deletions(-) diff --git a/NEWS b/NEWS index 21c54dc..0b90665 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,7 @@ r126: New : lz4frame API is now integrated into liblz4 Fixed : GCC 4.9 bug on highest performance settings, reported by Greg Slazinski Fixed : bug within LZ4 HC streaming mode, reported by James Boyle +Fixed : older compiler don't like nameless unions, reported by Cheyi Lin r125: Changed : endian and alignment code diff --git a/lib/lz4.c b/lib/lz4.c index a365375..ed928ce 100644 --- a/lib/lz4.c +++ b/lib/lz4.c @@ -112,12 +112,16 @@ # pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ # pragma warning(disable : 4293) /* disable: C4293: too large shift (32-bits) */ #else -# ifdef __GNUC__ -# define FORCE_INLINE static inline __attribute__((always_inline)) +# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */ +# ifdef __GNUC__ +# define FORCE_INLINE static inline __attribute__((always_inline)) +# else +# define FORCE_INLINE static inline +# endif # else -# define FORCE_INLINE static inline -# endif -#endif +# define FORCE_INLINE static +# endif /* __STDC_VERSION__ */ +#endif /* _MSC_VER */ #define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) @@ -264,7 +268,7 @@ static void LZ4_copy4(void* dstPtr, const void* srcPtr) static void LZ4_copy8(void* dstPtr, const void* srcPtr) { -#if GCC_VERSION!=409 // disabled on GCC 4.9, as it generates invalid opcode that crashes +#if GCC_VERSION!=409 /* disabled on GCC 4.9, as it generates invalid opcode (crash) */ if (LZ4_UNALIGNED_ACCESS) { if (LZ4_64bits()) diff --git a/lib/lz4hc.c b/lib/lz4hc.c index ef3997b..e453e35 100644 --- a/lib/lz4hc.c +++ b/lib/lz4hc.c @@ -56,10 +56,6 @@ static const int LZ4HC_compressionLevel_default = 8; # pragma clang diagnostic ignored "-Wunused-function" #endif -#if defined(_MSC_VER) /* Visual Studio */ -# pragma warning(disable : 4201) /* disable: C4201: unnamed struct/union*/ -#endif - /************************************** Common LZ4 definition @@ -89,10 +85,7 @@ static const int g_maxCompressionLevel = 16; **************************************/ typedef struct { - union { - U64 alignedOn8Bytes; /* force 8-bytes alignment on 32-bits systems */ - U32 hashTable[HASHTABLESIZE]; - }; + U32 hashTable[HASHTABLESIZE]; U16 chainTable[MAXD]; const BYTE* end; /* next block here to continue on current prefix */ const BYTE* base; /* All index relative to this position */ @@ -156,7 +149,7 @@ FORCE_INLINE void LZ4HC_Insert (LZ4HC_Data_Structure* hc4, const BYTE* ip) } -FORCE_INLINE int LZ4HC_InsertAndFindBestMatch (LZ4HC_Data_Structure* hc4, // Index table will be updated +FORCE_INLINE int LZ4HC_InsertAndFindBestMatch (LZ4HC_Data_Structure* hc4, /* Index table will be updated */ const BYTE* ip, const BYTE* const iLimit, const BYTE** matchpos, const int maxNbAttempts) @@ -200,7 +193,7 @@ FORCE_INLINE int LZ4HC_InsertAndFindBestMatch (LZ4HC_Data_Structure* hc4, // I mlt = LZ4_count(ip+MINMATCH, match+MINMATCH, vLimit) + MINMATCH; if ((ip+mlt == vLimit) && (vLimit < iLimit)) mlt += LZ4_count(ip+mlt, base+dictLimit, iLimit); - if (mlt > ml) { ml = mlt; *matchpos = base + matchIndex; } // virtual matchpos + if (mlt > ml) { ml = mlt; *matchpos = base + matchIndex; } /* virtual matchpos */ } } matchIndex -= chainTable[matchIndex & 0xFFFF]; @@ -285,7 +278,10 @@ FORCE_INLINE int LZ4HC_InsertAndGetWiderMatch ( typedef enum { noLimit = 0, limitedOutput = 1 } limitedOutput_directive; -//static unsigned debug = 0; +#define LZ4HC_DEBUG 0 +#if LZ4HC_DEBUG +static unsigned debug = 0; +#endif FORCE_INLINE int LZ4HC_encodeSequence ( const BYTE** ip, @@ -299,7 +295,9 @@ FORCE_INLINE int LZ4HC_encodeSequence ( int length; BYTE* token; - //if (debug) printf("literal : %u -- match : %u -- offset : %u\n", (U32)(*ip - *anchor), (U32)matchLength, (U32)(*ip-match)); // debug +#if LZ4HC_DEBUG + if (debug) printf("literal : %u -- match : %u -- offset : %u\n", (U32)(*ip - *anchor), (U32)matchLength, (U32)(*ip-match)); +#endif /* Encode Literal length */ length = (int)(*ip - *anchor); diff --git a/lib/xxhash.c b/lib/xxhash.c index 24a64b5..7aff1fa 100644 --- a/lib/xxhash.c +++ b/lib/xxhash.c @@ -1,6 +1,7 @@ /* xxHash - Fast Hash algorithm -Copyright (C) 2012-2014, Yann Collet. +Copyright (C) 2012-2015, Yann Collet + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) Redistribution and use in source and binary forms, with or without @@ -28,46 +29,51 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You can contact the author at : - xxHash source repository : http://code.google.com/p/xxhash/ +- xxHash source mirror : https://github.com/Cyan4973/xxHash - public discussion board : https://groups.google.com/forum/#!forum/lz4c */ -//************************************** -// Tuning parameters -//************************************** -// Unaligned memory access is automatically enabled for "common" CPU, such as x86. -// For others CPU, the compiler will be more cautious, and insert extra code to ensure aligned access is respected. -// If you know your target CPU supports unaligned memory access, you want to force this option manually to improve performance. -// You can also enable this parameter if you know your input data will always be aligned (boundaries of 4, for U32). +/************************************** +* Tuning parameters +***************************************/ +/* Unaligned memory access is automatically enabled for "common" CPU, such as x86. + * For others CPU, the compiler will be more cautious, and insert extra code to ensure aligned access is respected. + * If you know your target CPU supports unaligned memory access, you want to force this option manually to improve performance. + * You can also enable this parameter if you know your input data will always be aligned (boundaries of 4, for U32). + */ #if defined(__ARM_FEATURE_UNALIGNED) || defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) # define XXH_USE_UNALIGNED_ACCESS 1 #endif -// XXH_ACCEPT_NULL_INPUT_POINTER : -// If the input pointer is a null pointer, xxHash default behavior is to trigger a memory access error, since it is a bad pointer. -// When this option is enabled, xxHash output for null input pointers will be the same as a null-length input. -// This option has a very small performance cost (only measurable on small inputs). -// By default, this option is disabled. To enable it, uncomment below define : -// #define XXH_ACCEPT_NULL_INPUT_POINTER 1 - -// XXH_FORCE_NATIVE_FORMAT : -// By default, xxHash library provides endian-independant Hash values, based on little-endian convention. -// Results are therefore identical for little-endian and big-endian CPU. -// This comes at a performance cost for big-endian CPU, since some swapping is required to emulate little-endian format. -// Should endian-independance be of no importance for your application, you may set the #define below to 1. -// It will improve speed for Big-endian CPU. -// This option has no impact on Little_Endian CPU. +/* XXH_ACCEPT_NULL_INPUT_POINTER : + * If the input pointer is a null pointer, xxHash default behavior is to trigger a memory access error, since it is a bad pointer. + * When this option is enabled, xxHash output for null input pointers will be the same as a null-length input. + * This option has a very small performance cost (only measurable on small inputs). + * By default, this option is disabled. To enable it, uncomment below define : + */ +/* #define XXH_ACCEPT_NULL_INPUT_POINTER 1 */ + +/* XXH_FORCE_NATIVE_FORMAT : + * By default, xxHash library provides endian-independant Hash values, based on little-endian convention. + * Results are therefore identical for little-endian and big-endian CPU. + * This comes at a performance cost for big-endian CPU, since some swapping is required to emulate little-endian format. + * Should endian-independance be of no importance for your application, you may set the #define below to 1. + * It will improve speed for Big-endian CPU. + * This option has no impact on Little_Endian CPU. + */ #define XXH_FORCE_NATIVE_FORMAT 0 -//************************************** -// Compiler Specific Options -//************************************** -// Disable some Visual warning messages -#ifdef _MSC_VER // Visual Studio -# pragma warning(disable : 4127) // disable: C4127: conditional expression is constant + +/************************************** +* Compiler Specific Options +***************************************/ +/* Disable some Visual warning messages */ +#ifdef _MSC_VER +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ #endif -#ifdef _MSC_VER // Visual Studio +#ifdef _MSC_VER /* Visual Studio */ # define FORCE_INLINE static __forceinline #else # ifdef __GNUC__ @@ -77,16 +83,17 @@ You can contact the author at : # endif #endif -//************************************** -// Includes & Memory related functions -//************************************** + +/************************************** +* Includes & Memory related functions +***************************************/ #include "xxhash.h" -// Modify the local functions below should you wish to use some other memory routines -// for malloc(), free() +/* Modify the local functions below should you wish to use some other memory routines */ +/* for malloc(), free() */ #include static void* XXH_malloc(size_t s) { return malloc(s); } static void XXH_free (void* p) { free(p); } -// for memcpy() +/* for memcpy() */ #include static void* XXH_memcpy(void* dest, const void* src, size_t size) { @@ -94,10 +101,10 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size) } -//************************************** -// Basic Types -//************************************** -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L // C99 +/************************************** +* Basic Types +***************************************/ +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ # include typedef uint8_t BYTE; typedef uint16_t U16; @@ -143,12 +150,12 @@ typedef struct _U64_S #define A64(x) (((U64_S *)(x))->v) -//*************************************** -// Compiler-specific Functions and Macros -//*************************************** +/***************************************** +* Compiler-specific Functions and Macros +******************************************/ #define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) -// Note : although _rotl exists for minGW (GCC under windows), performance seems poor +/* Note : although _rotl exists for minGW (GCC under windows), performance seems poor */ #if defined(_MSC_VER) # define XXH_rotl32(x,r) _rotl(x,r) # define XXH_rotl64(x,r) _rotl64(x,r) @@ -157,7 +164,7 @@ typedef struct _U64_S # define XXH_rotl64(x,r) ((x << r) | (x >> (64 - r))) #endif -#if defined(_MSC_VER) // Visual Studio +#if defined(_MSC_VER) /* Visual Studio */ # define XXH_swap32 _byteswap_ulong # define XXH_swap64 _byteswap_uint64 #elif GCC_VERSION >= 403 @@ -185,9 +192,9 @@ static inline U64 XXH_swap64 (U64 x) #endif -//************************************** -// Constants -//************************************** +/************************************** +* Constants +***************************************/ #define PRIME32_1 2654435761U #define PRIME32_2 2246822519U #define PRIME32_3 3266489917U @@ -200,9 +207,10 @@ static inline U64 XXH_swap64 (U64 x) #define PRIME64_4 9650029242287828579ULL #define PRIME64_5 2870177450012600261ULL -//************************************** -// Architecture Macros -//************************************** + +/*************************************** +* Architecture Macros +****************************************/ typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess; #ifndef XXH_CPU_LITTLE_ENDIAN // It is possible to define XXH_CPU_LITTLE_ENDIAN externally, for example using a compiler switch static const int one = 1; @@ -210,15 +218,15 @@ static const int one = 1; #endif -//************************************** -// Macros -//************************************** +/************************************** +* Macros +***************************************/ #define XXH_STATIC_ASSERT(c) { enum { XXH_static_assert = 1/(!!(c)) }; } // use only *after* variable declarations -//**************************** -// Memory reads -//**************************** +/**************************** +* Memory reads +*****************************/ typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment; FORCE_INLINE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endian, XXH_alignment align) @@ -248,9 +256,9 @@ FORCE_INLINE U64 XXH_readLE64(const void* ptr, XXH_endianess endian) } -//**************************** -// Simple Hash Functions -//**************************** +/**************************** +* Simple Hash Functions +*****************************/ FORCE_INLINE U32 XXH32_endian_align(const void* input, size_t len, U32 seed, XXH_endianess endian, XXH_alignment align) { const BYTE* p = (const BYTE*)input; @@ -331,7 +339,7 @@ FORCE_INLINE U32 XXH32_endian_align(const void* input, size_t len, U32 seed, XXH unsigned int XXH32 (const void* input, size_t len, unsigned seed) { #if 0 - // Simple version, good for code maintenance, but unfortunately slow for small inputs + /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ XXH32_state_t state; XXH32_reset(&state, seed); XXH32_update(&state, input, len); @@ -340,7 +348,7 @@ unsigned int XXH32 (const void* input, size_t len, unsigned seed) XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; # if !defined(XXH_USE_UNALIGNED_ACCESS) - if ((((size_t)input) & 3) == 0) // Input is aligned, let's leverage the speed advantage + if ((((size_t)input) & 3) == 0) /* Input is aligned, let's leverage the speed advantage */ { if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) return XXH32_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned); @@ -471,7 +479,7 @@ FORCE_INLINE U64 XXH64_endian_align(const void* input, size_t len, U64 seed, XXH unsigned long long XXH64 (const void* input, size_t len, unsigned long long seed) { #if 0 - // Simple version, good for code maintenance, but unfortunately slow for small inputs + /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ XXH64_state_t state; XXH64_reset(&state, seed); XXH64_update(&state, input, len); @@ -480,7 +488,7 @@ unsigned long long XXH64 (const void* input, size_t len, unsigned long long seed XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; # if !defined(XXH_USE_UNALIGNED_ACCESS) - if ((((size_t)input) & 7)==0) // Input is aligned, let's leverage the speed advantage + if ((((size_t)input) & 7)==0) /* Input is aligned, let's leverage the speed advantage */ { if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned); @@ -528,7 +536,7 @@ typedef struct XXH32_state_t* XXH32_createState(void) { - XXH_STATIC_ASSERT(sizeof(XXH32_state_t) >= sizeof(XXH_istate32_t)); // A compilation error here means XXH32_state_t is not large enough + XXH_STATIC_ASSERT(sizeof(XXH32_state_t) >= sizeof(XXH_istate32_t)); /* A compilation error here means XXH32_state_t is not large enough */ return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t)); } XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) @@ -539,7 +547,7 @@ XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) XXH64_state_t* XXH64_createState(void) { - XXH_STATIC_ASSERT(sizeof(XXH64_state_t) >= sizeof(XXH_istate64_t)); // A compilation error here means XXH64_state_t is not large enough + XXH_STATIC_ASSERT(sizeof(XXH64_state_t) >= sizeof(XXH_istate64_t)); /* A compilation error here means XXH64_state_t is not large enough */ return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t)); } XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr) @@ -590,14 +598,14 @@ FORCE_INLINE XXH_errorcode XXH32_update_endian (XXH32_state_t* state_in, const v state->total_len += len; - if (state->memsize + len < 16) // fill in tmp buffer + if (state->memsize + len < 16) /* fill in tmp buffer */ { XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, len); state->memsize += (U32)len; return XXH_OK; } - if (state->memsize) // some data left from previous update + if (state->memsize) /* some data left from previous update */ { XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, 16-state->memsize); { @@ -744,14 +752,14 @@ FORCE_INLINE XXH_errorcode XXH64_update_endian (XXH64_state_t* state_in, const v state->total_len += len; - if (state->memsize + len < 32) // fill in tmp buffer + if (state->memsize + len < 32) /* fill in tmp buffer */ { XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, len); state->memsize += (U32)len; return XXH_OK; } - if (state->memsize) // some data left from previous update + if (state->memsize) /* some data left from previous update */ { XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, 32-state->memsize); { diff --git a/programs/Makefile b/programs/Makefile index 67218c1..02052ea 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -146,8 +146,8 @@ test-lz4: lz4 datagen ./datagen -g256MB | ./lz4 -vqB4D | ./lz4 -vdq > $(VOID) ./datagen -g6GB | ./lz4 -vqB5D | ./lz4 -vdq > $(VOID) # test frame concatenation with null-length frame - echo -n > empty.test - echo hi > nonempty.test + @echo -n > empty.test + @echo hi > nonempty.test cat nonempty.test empty.test nonempty.test > orig.test @./lz4 -zq empty.test > empty.lz4.test @./lz4 -zq nonempty.test > nonempty.lz4.test @@ -160,7 +160,7 @@ test-lz4: lz4 datagen test-lz4c: lz4c datagen - ./datagen -g256MB | ./lz4c -l -v -B4D | ./lz4c -vdq > $(VOID) + ./datagen -g256MB | ./lz4c -l -v | ./lz4c -vdq > $(VOID) test-lz4c32: lz4 lz4c32 lz4 datagen ./datagen -g16KB | ./lz4c32 -9 | ./lz4c32 -vdq > $(VOID) diff --git a/programs/bench.c b/programs/bench.c index 6db1628..ba3284e 100644 --- a/programs/bench.c +++ b/programs/bench.c @@ -22,40 +22,40 @@ - LZ4 source repository : http://code.google.com/p/lz4/ */ -//************************************** -// Compiler Options -//************************************** -// Disable some Visual warning messages +/************************************** +* Compiler Options +***************************************/ +/* Disable some Visual warning messages */ #define _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_DEPRECATE // VS2005 +#define _CRT_SECURE_NO_DEPRECATE /* VS2005 */ -// Unix Large Files support (>4GB) +/* Unix Large Files support (>4GB) */ #define _FILE_OFFSET_BITS 64 -#if (defined(__sun__) && (!defined(__LP64__))) // Sun Solaris 32-bits requires specific definitions +#if (defined(__sun__) && (!defined(__LP64__))) /* Sun Solaris 32-bits requires specific definitions */ # define _LARGEFILE_SOURCE -#elif ! defined(__LP64__) // No point defining Large file for 64 bit +#elif ! defined(__LP64__) /* No point defining Large file for 64 bit */ # define _LARGEFILE64_SOURCE #endif -// S_ISREG & gettimeofday() are not supported by MSVC +/* S_ISREG & gettimeofday() are not supported by MSVC */ #if defined(_MSC_VER) || defined(_WIN32) # define BMK_LEGACY_TIMER 1 #endif -//************************************** -// Includes -//************************************** -#include // malloc -#include // fprintf, fopen, ftello64 -#include // stat64 -#include // stat64 +/************************************** +* Includes +***************************************/ +#include /* malloc */ +#include /* fprintf, fopen, ftello64 */ +#include /* stat64 */ +#include /* stat64 */ -// Use ftime() if gettimeofday() is not available on your target +/* Use ftime() if gettimeofday() is not available on your target */ #if defined(BMK_LEGACY_TIMER) -# include // timeb, ftime +# include /* timeb, ftime */ #else -# include // gettimeofday +# include /* gettimeofday */ #endif #include "lz4.h" @@ -68,17 +68,17 @@ static int LZ4_compress_local(const char* src, char* dst, int size, int clevel) #include "xxhash.h" -//************************************** -// Compiler specifics -//************************************** +/************************************** +* Compiler specifics +***************************************/ #if !defined(S_ISREG) # define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) #endif -//************************************** -// Basic Types -//************************************** +/************************************** +* Basic Types +***************************************/ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L // C99 # include typedef uint8_t BYTE; @@ -95,24 +95,23 @@ static int LZ4_compress_local(const char* src, char* dst, int size, int clevel) #endif -//************************************** -// Constants -//************************************** +/************************************** +* Constants +***************************************/ #define NBLOOPS 3 #define TIMELOOP 2000 -#define KB *(1U<<10) -#define MB *(1U<<20) +#define KB *(1 <<10) +#define MB *(1 <<20) #define GB *(1U<<30) -#define KNUTH 2654435761U #define MAX_MEM (2 GB - 64 MB) #define DEFAULT_CHUNKSIZE (4 MB) -//************************************** -// Local structures -//************************************** +/************************************** +* Local structures +***************************************/ struct chunkParameters { U32 id; @@ -129,15 +128,15 @@ struct compressionParameters }; -//************************************** -// MACRO -//************************************** +/************************************** +* MACRO +***************************************/ #define DISPLAY(...) fprintf(stderr, __VA_ARGS__) -//************************************** -// Benchmark Parameters -//************************************** +/************************************** +* Benchmark Parameters +***************************************/ static int chunkSize = DEFAULT_CHUNKSIZE; static int nbIterations = NBLOOPS; static int BMK_pause = 0; @@ -153,17 +152,17 @@ void BMK_SetNbIterations(int nbLoops) void BMK_SetPause(void) { BMK_pause = 1; } -//********************************************************* -// Private functions -//********************************************************* +/********************************************************* +* Private functions +**********************************************************/ #if defined(BMK_LEGACY_TIMER) static int BMK_GetMilliStart(void) { - // Based on Legacy ftime() - // Rolls over every ~ 12.1 days (0x100000/24/60/60) - // Use GetMilliSpan to correct for rollover + /* Based on Legacy ftime() + Rolls over every ~ 12.1 days (0x100000/24/60/60) + Use GetMilliSpan to correct for rollover */ struct timeb tb; int nCount; ftime( &tb ); @@ -175,8 +174,8 @@ static int BMK_GetMilliStart(void) static int BMK_GetMilliStart(void) { - // Based on newer gettimeofday() - // Use GetMilliSpan to correct for rollover + /* Based on newer gettimeofday() + Use GetMilliSpan to correct for rollover */ struct timeval tv; int nCount; gettimeofday(&tv, NULL); @@ -198,7 +197,7 @@ static int BMK_GetMilliSpan( int nTimeStart ) static size_t BMK_findMaxMem(U64 requiredMem) { - size_t step = (64 MB); + size_t step = 64 MB; BYTE* testmem=NULL; requiredMem = (((requiredMem >> 26) + 1) << 26); @@ -226,14 +225,14 @@ static U64 BMK_GetFileSize(char* infilename) struct stat statbuf; r = stat(infilename, &statbuf); #endif - if (r || !S_ISREG(statbuf.st_mode)) return 0; // No good... + if (r || !S_ISREG(statbuf.st_mode)) return 0; /* No good... */ return (U64)statbuf.st_size; } -//********************************************************* -// Public function -//********************************************************* +/********************************************************* +* Public function +**********************************************************/ int BMK_benchFile(char** fileNamesTable, int nbFiles, int cLevel) { @@ -262,7 +261,7 @@ int BMK_benchFile(char** fileNamesTable, int nbFiles, int cLevel) } compP.decompressionFunction = LZ4_decompress_fast; - // Loop for each file + /* Loop for each file */ while (fileIdx inFileSize) benchedSize = (size_t)inFileSize; @@ -294,7 +293,7 @@ int BMK_benchFile(char** fileNamesTable, int nbFiles, int cLevel) DISPLAY("Not enough memory for '%s' full size; testing %i MB only...\n", inFileName, (int)(benchedSize>>20)); } - // Alloc + /* Alloc */ chunkP = (struct chunkParameters*) malloc(((benchedSize / (size_t)chunkSize)+1) * sizeof(struct chunkParameters)); orig_buff = (char*)malloc((size_t )benchedSize); nbChunks = (int) ((int)benchedSize / chunkSize) + 1; @@ -313,7 +312,7 @@ int BMK_benchFile(char** fileNamesTable, int nbFiles, int cLevel) return 12; } - // Init chunks data + /* Init chunks data */ { int i; size_t remaining = benchedSize; @@ -329,7 +328,7 @@ int BMK_benchFile(char** fileNamesTable, int nbFiles, int cLevel) } } - // Fill input buffer + /* Fill input buffer */ DISPLAY("Loading %s... \r", inFileName); readSize = fread(orig_buff, 1, benchedSize, inFile); fclose(inFile); @@ -343,11 +342,11 @@ int BMK_benchFile(char** fileNamesTable, int nbFiles, int cLevel) return 13; } - // Calculating input Checksum + /* Calculating input Checksum */ crcOrig = XXH32(orig_buff, (unsigned int)benchedSize,0); - // Bench + /* Bench */ { int loopNb, chunkNb; size_t cSize=0; @@ -361,9 +360,9 @@ int BMK_benchFile(char** fileNamesTable, int nbFiles, int cLevel) int nbLoops; int milliTime; - // Compression + /* Compression */ DISPLAY("%1i-%-14.14s : %9i ->\r", loopNb, inFileName, (int)benchedSize); - { size_t i; for (i=0; i %9i (%5.2f%%),%7.1f MB/s\r", loopNb, inFileName, (int)benchedSize, (int)cSize, ratio, (double)benchedSize / fastestC / 1000.); - // Decompression - { size_t i; for (i=0; i %9i (%5.2f%%),%7.1f MB/s ,%7.1f MB/s\r", loopNb, inFileName, (int)benchedSize, (int)cSize, ratio, (double)benchedSize / fastestC / 1000., (double)benchedSize / fastestD / 1000.); - // CRC Checking + /* CRC Checking */ crcCheck = XXH32(orig_buff, (unsigned int)benchedSize,0); if (crcOrig!=crcCheck) { DISPLAY("\n!!! WARNING !!! %14s : Invalid Checksum : %x != %x\n", inFileName, (unsigned)crcOrig, (unsigned)crcCheck); break; } } diff --git a/programs/lz4cli.c b/programs/lz4cli.c index b755ab8..0da5dce 100644 --- a/programs/lz4cli.c +++ b/programs/lz4cli.c @@ -30,59 +30,59 @@ The license of this compression CLI program is GPLv2. */ -//************************************** -// Tuning parameters -//************************************** -// ENABLE_LZ4C_LEGACY_OPTIONS : -// Control the availability of -c0, -c1 and -hc legacy arguments -// Default : Legacy options are disabled -// #define ENABLE_LZ4C_LEGACY_OPTIONS - - -//************************************** -// Compiler Options -//************************************** -// Disable some Visual warning messages -#ifdef _MSC_VER // Visual Studio +/************************************** +* Tuning parameters +***************************************/ +/* ENABLE_LZ4C_LEGACY_OPTIONS : + Control the availability of -c0, -c1 and -hc legacy arguments + Default : Legacy options are disabled */ +/* #define ENABLE_LZ4C_LEGACY_OPTIONS */ + + +/************************************** +* Compiler Options +***************************************/ +/* Disable some Visual warning messages */ +#ifdef _MSC_VER # define _CRT_SECURE_NO_WARNINGS -# define _CRT_SECURE_NO_DEPRECATE // VS2005 -# pragma warning(disable : 4127) // disable: C4127: conditional expression is constant +# define _CRT_SECURE_NO_DEPRECATE /* VS2005 */ +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ #endif -#define _POSIX_SOURCE 1 // for fileno() within on unix +#define _POSIX_SOURCE 1 /* for fileno() within on unix */ -//**************************** -// Includes -//**************************** -#include // fprintf, getchar -#include // exit, calloc, free -#include // strcmp, strlen -#include "bench.h" // BMK_benchFile, BMK_SetNbIterations, BMK_SetBlocksize, BMK_SetPause +/**************************** +* Includes +*****************************/ +#include /* fprintf, getchar */ +#include /* exit, calloc, free */ +#include /* strcmp, strlen */ +#include "bench.h" /* BMK_benchFile, BMK_SetNbIterations, BMK_SetBlocksize, BMK_SetPause */ #include "lz4io.h" -//**************************** -// OS-specific Includes -//**************************** +/**************************** +* OS-specific Includes +*****************************/ #if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) -# include // _O_BINARY -# include // _setmode, _isatty +# include /* _O_BINARY */ +# include /* _setmode, _isatty */ # ifdef __MINGW32__ - int _fileno(FILE *stream); // MINGW somehow forgets to include this windows declaration into + int _fileno(FILE *stream); /* MINGW somehow forgets to include this prototype into */ # endif # define SET_BINARY_MODE(file) _setmode(_fileno(file), _O_BINARY) # define IS_CONSOLE(stdStream) _isatty(_fileno(stdStream)) #else -# include // isatty +# include /* isatty */ # define SET_BINARY_MODE(file) # define IS_CONSOLE(stdStream) isatty(fileno(stdStream)) #endif -//**************************** -// Constants -//**************************** +/***************************** +* Constants +******************************/ #define COMPRESSOR_NAME "LZ4 command line interface" #ifndef LZ4_VERSION # define LZ4_VERSION "r126" @@ -99,23 +99,23 @@ #define LZ4_BLOCKSIZEID_DEFAULT 7 -//************************************** -// Macros -//************************************** +/************************************** +* Macros +***************************************/ #define DISPLAY(...) fprintf(stderr, __VA_ARGS__) #define DISPLAYLEVEL(l, ...) if (displayLevel>=l) { DISPLAY(__VA_ARGS__); } -static unsigned displayLevel = 2; // 0 : no display // 1: errors // 2 : + result + interaction + warnings ; // 3 : + progression; // 4 : + information +static unsigned displayLevel = 2; /* 0 : no display ; 1: errors ; 2 : + result + interaction + warnings ; 3 : + progression; 4 : + information */ -//************************************** -// Local Variables -//************************************** +/************************************** +* Local Variables +***************************************/ static char* programName; -//************************************** -// Exceptions -//************************************** +/************************************** +* Exceptions +***************************************/ #define DEBUG 0 #define DEBUGOUTPUT(...) if (DEBUG) DISPLAY(__VA_ARGS__); #define EXM_THROW(error, ...) \ @@ -128,20 +128,20 @@ static char* programName; } -//************************************** -// Version modifiers -//************************************** +/************************************** +* Version modifiers +***************************************/ #define EXTENDED_ARGUMENTS #define EXTENDED_HELP #define EXTENDED_FORMAT #define DEFAULT_COMPRESSOR LZ4IO_compressFilename #define DEFAULT_DECOMPRESSOR LZ4IO_decompressFilename -int LZ4IO_compressFilename_Legacy(char* input_filename, char* output_filename, int compressionlevel); // hidden function +int LZ4IO_compressFilename_Legacy(char* input_filename, char* output_filename, int compressionlevel); /* hidden function */ -//**************************** -// Functions -//**************************** +/**************************** +* Functions +*****************************/ static int usage(void) { DISPLAY( "Usage :\n"); @@ -173,7 +173,7 @@ static int usage_advanced(void) DISPLAY( " -l : compress using Legacy format (Linux kernel compression)\n"); DISPLAY( " -B# : Block size [4-7](default : 7)\n"); DISPLAY( " -BD : Block dependency (improve compression ratio)\n"); - //DISPLAY( " -BX : enable block checksum (default:disabled)\n"); // Option currently inactive + /* DISPLAY( " -BX : enable block checksum (default:disabled)\n"); *//* Option currently inactive */ DISPLAY( " -Sx : disable stream checksum (default:enabled)\n"); DISPLAY( "Benchmark arguments :\n"); DISPLAY( " -b : benchmark file(s)\n"); @@ -185,7 +185,7 @@ static int usage_advanced(void) DISPLAY( " -hc : high compression\n"); DISPLAY( " -y : overwrite output without prompting \n"); DISPLAY( " -s : suppress warnings \n"); -#endif // ENABLE_LZ4C_LEGACY_OPTIONS +#endif /* ENABLE_LZ4C_LEGACY_OPTIONS */ EXTENDED_HELP; return 0; } @@ -236,7 +236,7 @@ static int usage_longhelp(void) DISPLAY( "It is not equivalent to :\n"); DISPLAY( " %s -h -c filename\n", programName); DISPLAY( "which would display help text and exit\n"); -#endif // ENABLE_LZ4C_LEGACY_OPTIONS +#endif /* ENABLE_LZ4C_LEGACY_OPTIONS */ return 0; } @@ -273,25 +273,25 @@ int main(int argc, char** argv) char extension[] = LZ4_EXTENSION; int blockSize; - // Init + /* Init */ programName = argv[0]; LZ4IO_setOverwrite(0); blockSize = LZ4IO_setBlockSizeID(LZ4_BLOCKSIZEID_DEFAULT); - // lz4cat behavior + /* lz4cat behavior */ if (!strcmp(programName, LZ4_CAT)) { decode=1; forceStdout=1; output_filename=stdoutmark; displayLevel=1; } - // command switches + /* command switches */ for(i=1; i='0') && (*argument<='9')) { @@ -326,39 +326,39 @@ int main(int argc, char** argv) switch(argument[0]) { - // Display help - case 'V': DISPLAY(WELCOME_MESSAGE); return 0; // Version + /* Display help */ + case 'V': DISPLAY(WELCOME_MESSAGE); return 0; /* Version */ case 'h': usage_advanced(); return 0; case 'H': usage_advanced(); usage_longhelp(); return 0; - // Compression (default) + /* Compression (default) */ case 'z': forceCompress = 1; break; - // Use Legacy format (for Linux kernel compression) - case 'l': legacy_format=1; break; + /* Use Legacy format (ex : Linux kernel compression) */ + case 'l': legacy_format = 1; blockSize = 8 MB; break; - // Decoding + /* Decoding */ case 'd': decode=1; break; - // Force stdout, even if stdout==console + /* Force stdout, even if stdout==console */ case 'c': forceStdout=1; output_filename=stdoutmark; displayLevel=1; break; - // Test + /* Test integrity */ case 't': decode=1; LZ4IO_setOverwrite(1); output_filename=nulmark; break; - // Overwrite + /* Overwrite */ case 'f': LZ4IO_setOverwrite(1); break; - // Verbose mode + /* Verbose mode */ case 'v': displayLevel=4; break; - // Quiet mode + /* Quiet mode */ case 'q': displayLevel--; break; - // keep source file (default anyway, so useless) (for xz/lzma compatibility) + /* keep source file (default anyway, so useless) (for xz/lzma compatibility) */ case 'k': break; - // Modify Block Properties + /* Modify Block Properties */ case 'B': while (argument[1]!=0) { @@ -377,20 +377,20 @@ int main(int argc, char** argv) break; } case 'D': LZ4IO_setBlockMode(LZ4IO_blockLinked); argument++; break; - case 'X': LZ4IO_setBlockChecksumMode(1); argument ++; break; + case 'X': LZ4IO_setBlockChecksumMode(1); argument ++; break; /* currently disables */ default : exitBlockProperties=1; } if (exitBlockProperties) break; } break; - // Modify Stream properties + /* Modify Stream properties */ case 'S': if (argument[1]=='x') { LZ4IO_setStreamChecksumMode(0); argument++; break; } else { badusage(); } - // Benchmark + /* Benchmark */ case 'b': bench=1; break; - // Modify Nb Iterations (benchmark only) + /* Modify Nb Iterations (benchmark only) */ case 'i': if ((argument[1] >='1') && (argument[1] <='9')) { @@ -400,22 +400,23 @@ int main(int argc, char** argv) } break; - // Pause at the end (hidden option) + /* Pause at the end (hidden option) */ case 'p': main_pause=1; BMK_SetPause(); break; + /* Specific commands for customized versions */ EXTENDED_ARGUMENTS; - // Unrecognised command + /* Unrecognised command */ default : badusage(); } } continue; } - // first provided filename is input + /* first provided filename is input */ if (!input_filename) { input_filename=argument; filenamesStart=i; continue; } - // second provided filename is output + /* second provided filename is output */ if (!output_filename) { output_filename=argument; @@ -427,25 +428,25 @@ int main(int argc, char** argv) DISPLAYLEVEL(3, WELCOME_MESSAGE); if (!decode) DISPLAYLEVEL(4, "Blocks size : %i KB\n", blockSize>>10); - // No input filename ==> use stdin + /* No input filename ==> use stdin */ if(!input_filename) { input_filename=stdinmark; } - // Check if input or output are defined as console; trigger an error in this case - if (!strcmp(input_filename, stdinmark) && IS_CONSOLE(stdin) ) badusage(); + /* Check if input or output are defined as console; trigger an error in this case */ + if (!strcmp(input_filename, stdinmark) && IS_CONSOLE(stdin) ) badusage(); - // Check if benchmark is selected + /* Check if benchmark is selected */ if (bench) return BMK_benchFile(argv+filenamesStart, argc-filenamesStart, cLevel); - // No output filename ==> try to select one automatically (when possible) + /* No output filename ==> try to select one automatically (when possible) */ while (!output_filename) { - if (!IS_CONSOLE(stdout)) { output_filename=stdoutmark; break; } // Default to stdout whenever possible (i.e. not a console) - if ((!decode) && !(forceCompress)) // auto-determine compression or decompression, based on file extension + if (!IS_CONSOLE(stdout)) { output_filename=stdoutmark; break; } /* Default to stdout whenever possible (i.e. not a console) */ + if ((!decode) && !(forceCompress)) /* auto-determine compression or decompression, based on file extension */ { size_t l = strlen(input_filename); if (!strcmp(input_filename+(l-4), LZ4_EXTENSION)) decode=1; } - if (!decode) // compression to file + if (!decode) /* compression to file */ { size_t l = strlen(input_filename); dynNameSpace = (char*)calloc(1,l+5); @@ -455,7 +456,7 @@ int main(int argc, char** argv) DISPLAYLEVEL(2, "Compressed filename will be : %s \n", output_filename); break; } - // decompression to file (automatic name will work only if input filename has correct format extension) + /* decompression to file (automatic name will work only if input filename has correct format extension) */ { size_t outl; size_t inl = strlen(input_filename); @@ -470,19 +471,19 @@ int main(int argc, char** argv) } } - // No warning message in pure pipe mode (stdin + stdout) + /* Check if output is defined as console; trigger an error in this case */ + if (!strcmp(output_filename,stdoutmark) && IS_CONSOLE(stdout) && !forceStdout) badusage(); + + /* No warning message in pure pipe mode (stdin + stdout) */ if (!strcmp(input_filename, stdinmark) && !strcmp(output_filename,stdoutmark) && (displayLevel==2)) displayLevel=1; - // Check if input or output are defined as console; trigger an error in this case - if (!strcmp(input_filename, stdinmark) && IS_CONSOLE(stdin) ) badusage(); - if (!strcmp(output_filename,stdoutmark) && IS_CONSOLE(stdout) && !forceStdout) badusage(); - // IO Stream/File + /* IO Stream/File */ LZ4IO_setNotificationLevel(displayLevel); if (decode) DEFAULT_DECOMPRESSOR(input_filename, output_filename); else - // compression is default action { + /* compression is default action */ if (legacy_format) { DISPLAYLEVEL(3, "! Generating compressed LZ4 using Legacy format (deprecated) ! \n"); diff --git a/programs/lz4io.c b/programs/lz4io.c index a886ac7..fa1f0f9 100644 --- a/programs/lz4io.c +++ b/programs/lz4io.c @@ -29,13 +29,13 @@ - The license of this source file is GPLv2. */ -//************************************** -// Compiler Options -//************************************** +/************************************** +* 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 +# define _CRT_SECURE_NO_DEPRECATE /* VS2005 */ +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ #endif #define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) @@ -44,45 +44,45 @@ # pragma GCC diagnostic ignored "-Wmissing-field-initializers" /* GCC bug 53119 : doesn't accept { 0 } as initializer (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119) */ #endif -#define _LARGE_FILES // Large file support on 32-bits AIX -#define _FILE_OFFSET_BITS 64 // Large file support on 32-bits unix -#define _POSIX_SOURCE 1 // for fileno() within on unix +#define _LARGE_FILES /* Large file support on 32-bits AIX */ +#define _FILE_OFFSET_BITS 64 /* Large file support on 32-bits unix */ +#define _POSIX_SOURCE 1 /* for fileno() within on unix */ -//**************************** -// Includes -//**************************** -#include // fprintf, fopen, fread, _fileno, stdin, stdout -#include // malloc, free -#include // strcmp, strlen -#include // clock +/**************************** +* Includes +*****************************/ +#include /* fprintf, fopen, fread, _fileno, stdin, stdout */ +#include /* malloc, free */ +#include /* strcmp, strlen */ +#include /* clock */ #include "lz4io.h" -#include "lz4.h" // still required for legacy format -#include "lz4hc.h" // still required for legacy format +#include "lz4.h" /* still required for legacy format */ +#include "lz4hc.h" /* still required for legacy format */ #include "lz4frame.h" -//**************************** -// OS-specific Includes -//**************************** +/**************************** +* OS-specific Includes +*****************************/ #if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) -# include // _O_BINARY -# include // _setmode, _isatty +# include /* _O_BINARY */ +# include /* _setmode, _isatty */ # ifdef __MINGW32__ - int _fileno(FILE *stream); // MINGW somehow forgets to include this windows declaration into + int _fileno(FILE *stream); /* MINGW somehow forgets to include this windows declaration into */ # endif # define SET_BINARY_MODE(file) _setmode(_fileno(file), _O_BINARY) # define IS_CONSOLE(stdStream) _isatty(_fileno(stdStream)) #else -# include // isatty +# include /* isatty */ # define SET_BINARY_MODE(file) # define IS_CONSOLE(stdStream) isatty(fileno(stdStream)) #endif -//**************************** -// Constants -//**************************** +/**************************** +* Constants +*****************************/ #define KB *(1 <<10) #define MB *(1 <<20) #define GB *(1U<<30) @@ -108,9 +108,9 @@ #define LZ4S_MAXHEADERSIZE (MAGICNUMBER_SIZE+2+8+4+1) -//************************************** -// Macros -//************************************** +/************************************** +* Macros +***************************************/ #define DISPLAY(...) fprintf(stderr, __VA_ARGS__) #define DISPLAYLEVEL(l, ...) if (displayLevel>=l) { DISPLAY(__VA_ARGS__); } #define DISPLAYUPDATE(l, ...) if (displayLevel>=l) { \ @@ -121,10 +121,10 @@ static const unsigned refreshRate = 150; static clock_t g_time = 0; -//************************************** -// Local Parameters -//************************************** -static int displayLevel = 0; // 0 : no display // 1: errors // 2 : + result + interaction + warnings ; // 3 : + progression; // 4 : + information +/************************************** +* Local Parameters +***************************************/ +static int displayLevel = 0; /* 0 : no display ; 1: errors ; 2 : + result + interaction + warnings ; 3 : + progression; 4 : + information */ static int overwrite = 1; static int globalBlockSizeId = LZ4S_BLOCKSIZEID_DEFAULT; static int blockChecksum = 0; @@ -135,9 +135,9 @@ static const int minBlockSizeID = 4; static const int maxBlockSizeID = 7; -//************************************** -// Exceptions -//************************************** +/************************************** +* Exceptions +***************************************/ #define DEBUG 0 #define DEBUGOUTPUT(...) if (DEBUG) DISPLAY(__VA_ARGS__); #define EXM_THROW(error, ...) \ @@ -150,9 +150,9 @@ static const int maxBlockSizeID = 7; } -//************************************** -// Version modifiers -//************************************** +/************************************** +* Version modifiers +***************************************/ #define EXTENDED_ARGUMENTS #define EXTENDED_HELP #define EXTENDED_FORMAT @@ -245,7 +245,7 @@ static int get_fileHandle(char* input_filename, char* output_filename, FILE** pf } else { - // Check if destination file already exists + /* Check if destination file already exists */ *pfoutput=0; if (output_filename != nulmark) *pfoutput = fopen( output_filename, "rb" ); if (*pfoutput!=0) @@ -256,7 +256,7 @@ static int get_fileHandle(char* input_filename, char* output_filename, FILE** pf char ch; DISPLAYLEVEL(2, "Warning : %s already exists\n", output_filename); DISPLAYLEVEL(2, "Overwrite ? (Y/N) : "); - if (displayLevel <= 1) EXM_THROW(11, "Operation aborted : %s already exists", output_filename); // No interaction possible + if (displayLevel <= 1) EXM_THROW(11, "Operation aborted : %s already exists", output_filename); /* No interaction possible */ ch = (char)getchar(); if ((ch!='Y') && (ch!='y')) EXM_THROW(11, "Operation aborted : %s already exists", output_filename); } @@ -303,44 +303,44 @@ int LZ4IO_compressFilename_Legacy(char* input_filename, char* output_filename, i size_t sizeCheck; - // Init + /* Init */ start = clock(); if (compressionlevel < 3) compressionFunction = LZ4_compress; else compressionFunction = LZ4_compressHC; get_fileHandle(input_filename, output_filename, &finput, &foutput); if ((displayLevel==2) && (compressionlevel==1)) displayLevel=3; - // Allocate Memory + /* Allocate Memory */ in_buff = (char*)malloc(LEGACY_BLOCKSIZE); out_buff = (char*)malloc(LZ4_compressBound(LEGACY_BLOCKSIZE)); if (!in_buff || !out_buff) EXM_THROW(21, "Allocation error : not enough memory"); - // Write Archive Header + /* Write Archive Header */ LZ4IO_writeLE32(out_buff, LEGACY_MAGICNUMBER); sizeCheck = fwrite(out_buff, 1, MAGICNUMBER_SIZE, foutput); if (sizeCheck!=MAGICNUMBER_SIZE) EXM_THROW(22, "Write error : cannot write header"); - // Main Loop + /* Main Loop */ while (1) { unsigned int outSize; - // Read Block + /* Read Block */ int inSize = (int) fread(in_buff, (size_t)1, (size_t)LEGACY_BLOCKSIZE, finput); if( inSize<=0 ) break; filesize += inSize; - // Compress Block + /* Compress Block */ outSize = compressionFunction(in_buff, out_buff+4, inSize); compressedfilesize += outSize+4; DISPLAYUPDATE(3, "\rRead : %i MB ==> %.2f%% ", (int)(filesize>>20), (double)compressedfilesize/filesize*100); - // Write Block + /* Write Block */ LZ4IO_writeLE32(out_buff, outSize); sizeCheck = fwrite(out_buff, 1, outSize+4, foutput); if (sizeCheck!=(size_t)(outSize+4)) EXM_THROW(23, "Write error : cannot write compressed block"); } - // Status + /* Status */ end = clock(); DISPLAYLEVEL(2, "\r%79s\r", ""); DISPLAYLEVEL(2,"Compressed %llu bytes into %llu bytes ==> %.2f%%\n", @@ -350,7 +350,7 @@ int LZ4IO_compressFilename_Legacy(char* input_filename, char* output_filename, i DISPLAYLEVEL(4,"Done in %.2f s ==> %.2f MB/s\n", seconds, (double)filesize / seconds / 1024 / 1024); } - // Close & Free + /* Close & Free */ free(in_buff); free(out_buff); fclose(finput); @@ -380,7 +380,7 @@ int LZ4IO_compressFilename(char* input_filename, char* output_filename, int comp LZ4F_preferences_t prefs = {0}; - // Init + /* Init */ start = clock(); if ((displayLevel==2) && (compressionLevel>=3)) displayLevel=3; errorCode = LZ4F_createCompressionContext(&ctx, LZ4F_VERSION); @@ -388,51 +388,51 @@ int LZ4IO_compressFilename(char* input_filename, char* output_filename, int comp get_fileHandle(input_filename, output_filename, &finput, &foutput); blockSize = LZ4S_GetBlockSize_FromBlockId (globalBlockSizeId); - // Set compression parameters + /* Set compression parameters */ prefs.autoFlush = 1; prefs.compressionLevel = compressionLevel; prefs.frameInfo.blockMode = blockIndependence; prefs.frameInfo.blockSizeID = globalBlockSizeId; prefs.frameInfo.contentChecksumFlag = streamChecksum; - // Allocate Memory + /* Allocate Memory */ in_buff = (char*)malloc(blockSize); outBuffSize = LZ4F_compressBound(blockSize, &prefs); out_buff = (char*)malloc(outBuffSize); if (!in_buff || !out_buff) EXM_THROW(31, "Allocation error : not enough memory"); - // Write Archive Header + /* Write Archive Header */ headerSize = LZ4F_compressBegin(ctx, out_buff, outBuffSize, &prefs); if (LZ4F_isError(headerSize)) EXM_THROW(32, "File header generation failed : %s", LZ4F_getErrorName(headerSize)); sizeCheck = fwrite(out_buff, 1, headerSize, foutput); if (sizeCheck!=headerSize) EXM_THROW(33, "Write error : cannot write header"); compressedfilesize += headerSize; - // read first block + /* read first block */ readSize = fread(in_buff, (size_t)1, (size_t)blockSize, finput); filesize += readSize; - // Main Loop + /* Main Loop */ while (readSize>0) { size_t outSize; - // Compress Block + /* Compress Block */ outSize = LZ4F_compressUpdate(ctx, out_buff, outBuffSize, in_buff, readSize, NULL); if (LZ4F_isError(outSize)) EXM_THROW(34, "Compression failed : %s", LZ4F_getErrorName(outSize)); compressedfilesize += outSize; DISPLAYUPDATE(3, "\rRead : %i MB ==> %.2f%% ", (int)(filesize>>20), (double)compressedfilesize/filesize*100); - // Write Block + /* Write Block */ sizeCheck = fwrite(out_buff, 1, outSize, foutput); if (sizeCheck!=outSize) EXM_THROW(35, "Write error : cannot write compressed block"); - // Read next block + /* Read next block */ readSize = fread(in_buff, (size_t)1, (size_t)blockSize, finput); filesize += readSize; } - // End of Stream mark + /* End of Stream mark */ headerSize = LZ4F_compressEnd(ctx, out_buff, outBuffSize, NULL); if (LZ4F_isError(headerSize)) EXM_THROW(36, "End of file generation failed : %s", LZ4F_getErrorName(headerSize)); @@ -440,7 +440,7 @@ int LZ4IO_compressFilename(char* input_filename, char* output_filename, int comp if (sizeCheck!=headerSize) EXM_THROW(37, "Write error : cannot write end of stream"); compressedfilesize += headerSize; - // Close & Free + /* Close & Free */ free(in_buff); free(out_buff); fclose(finput); @@ -448,7 +448,7 @@ int LZ4IO_compressFilename(char* input_filename, char* output_filename, int comp errorCode = LZ4F_freeCompressionContext(ctx); if (LZ4F_isError(errorCode)) EXM_THROW(38, "Error : can't free LZ4F context resource : %s", LZ4F_getErrorName(errorCode)); - // Final Status + /* Final Status */ end = clock(); DISPLAYLEVEL(2, "\r%79s\r", ""); DISPLAYLEVEL(2, "Compressed %llu bytes into %llu bytes ==> %.2f%%\n", @@ -482,42 +482,42 @@ static unsigned long long decodeLegacyStream(FILE* finput, FILE* foutput) char* in_buff; char* out_buff; - // Allocate Memory + /* Allocate Memory */ in_buff = (char*)malloc(LZ4_compressBound(LEGACY_BLOCKSIZE)); out_buff = (char*)malloc(LEGACY_BLOCKSIZE); if (!in_buff || !out_buff) EXM_THROW(51, "Allocation error : not enough memory"); - // Main Loop + /* Main Loop */ while (1) { int decodeSize; size_t sizeCheck; unsigned int blockSize; - // Block Size + /* Block Size */ sizeCheck = fread(in_buff, 1, 4, finput); - if (sizeCheck==0) break; // Nothing to read : file read is completed - blockSize = LZ4IO_readLE32(in_buff); // Convert to Little Endian + if (sizeCheck==0) break; /* Nothing to read : file read is completed */ + blockSize = LZ4IO_readLE32(in_buff); /* Convert to Little Endian */ if (blockSize > LZ4_COMPRESSBOUND(LEGACY_BLOCKSIZE)) - { // Cannot read next block : maybe new stream ? + { /* Cannot read next block : maybe new stream ? */ fseek(finput, -4, SEEK_CUR); break; } - // Read Block + /* Read Block */ sizeCheck = fread(in_buff, 1, blockSize, finput); - // Decode Block + /* Decode Block */ decodeSize = LZ4_decompress_safe(in_buff, out_buff, blockSize, LEGACY_BLOCKSIZE); if (decodeSize < 0) EXM_THROW(52, "Decoding Failed ! Corrupted input detected !"); filesize += decodeSize; - // Write Block + /* Write Block */ sizeCheck = fwrite(out_buff, 1, decodeSize, foutput); if (sizeCheck != (size_t)decodeSize) EXM_THROW(53, "Write error : cannot write decoded block into output\n"); } - // Free + /* Free */ free(in_buff); free(out_buff); @@ -537,12 +537,12 @@ static unsigned long long decodeLZ4S(FILE* finput, FILE* foutput) LZ4F_errorCode_t errorCode; LZ4F_frameInfo_t frameInfo; - // init + /* init */ errorCode = LZ4F_createDecompressionContext(&ctx, LZ4F_VERSION); if (LZ4F_isError(errorCode)) EXM_THROW(60, "Allocation error : can't create context : %s", LZ4F_getErrorName(errorCode)); LZ4IO_writeLE32(headerBuff, LZ4S_MAGICNUMBER); /* regenerated here, as it was already read from finput */ - // Decode stream descriptor + /* Decode stream descriptor */ outBuffSize = 0; inBuffSize = 0; sizeCheck = MAGICNUMBER_SIZE; nextToRead = LZ4F_decompress(ctx, NULL, &outBuffSize, headerBuff, &sizeCheck, NULL); if (LZ4F_isError(nextToRead)) EXM_THROW(61, "Decompression error : %s", LZ4F_getErrorName(nextToRead)); @@ -553,35 +553,35 @@ static unsigned long long decodeLZ4S(FILE* finput, FILE* foutput) errorCode = LZ4F_getFrameInfo(ctx, &frameInfo, NULL, &inBuffSize); if (LZ4F_isError(errorCode)) EXM_THROW(64, "can't decode frame header : %s", LZ4F_getErrorName(errorCode)); - // Allocate Memory + /* Allocate Memory */ outBuffSize = LZ4IO_setBlockSizeID(frameInfo.blockSizeID); inBuffSize = outBuffSize + 4; inBuff = (char*)malloc(inBuffSize); outBuff = (char*)malloc(outBuffSize); if (!inBuff || !outBuff) EXM_THROW(65, "Allocation error : not enough memory"); - // Main Loop + /* Main Loop */ while (nextToRead != 0) { size_t decodedBytes = outBuffSize; - // Read Block + /* Read Block */ sizeCheck = fread(inBuff, 1, nextToRead, finput); if (sizeCheck!=nextToRead) EXM_THROW(66, "Read error "); - // Decode Block + /* Decode Block */ errorCode = LZ4F_decompress(ctx, outBuff, &decodedBytes, inBuff, &sizeCheck, NULL); if (LZ4F_isError(errorCode)) EXM_THROW(67, "Decompression error : %s", LZ4F_getErrorName(errorCode)); if (sizeCheck!=nextToRead) EXM_THROW(67, "Synchronization error"); nextToRead = errorCode; filesize += decodedBytes; - // Write Block + /* Write Block */ sizeCheck = fwrite(outBuff, 1, decodedBytes, foutput); if (sizeCheck != decodedBytes) EXM_THROW(68, "Write error : cannot write decoded block\n"); } - // Free + /* Free */ free(inBuff); free(outBuff); errorCode = LZ4F_freeDecompressionContext(ctx); @@ -599,12 +599,12 @@ static unsigned long long selectDecoder( FILE* finput, FILE* foutput) int errorNb; size_t nbReadBytes; - // Check Archive Header + /* Check Archive Header */ nbReadBytes = fread(U32store, 1, MAGICNUMBER_SIZE, finput); - if (nbReadBytes==0) return ENDOFSTREAM; // EOF + if (nbReadBytes==0) return ENDOFSTREAM; /* EOF */ if (nbReadBytes != MAGICNUMBER_SIZE) EXM_THROW(40, "Unrecognized header : Magic Number unreadable"); - magicNumber = LZ4IO_readLE32(U32store); // Convert to Little Endian format - if (LZ4S_isSkippableMagicNumber(magicNumber)) magicNumber = LZ4S_SKIPPABLE0; // fold skippable magic numbers + magicNumber = LZ4IO_readLE32(U32store); /* Little Endian format */ + if (LZ4S_isSkippableMagicNumber(magicNumber)) magicNumber = LZ4S_SKIPPABLE0; /* fold skippable magic numbers */ switch(magicNumber) { @@ -617,13 +617,13 @@ static unsigned long long selectDecoder( FILE* finput, FILE* foutput) DISPLAYLEVEL(4, "Skipping detected skippable area \n"); nbReadBytes = fread(U32store, 1, 4, finput); if (nbReadBytes != 4) EXM_THROW(42, "Stream error : skippable size unreadable"); - size = LZ4IO_readLE32(U32store); // Convert to Little Endian format + size = LZ4IO_readLE32(U32store); /* Little Endian format */ errorNb = fseek(finput, size, SEEK_CUR); if (errorNb != 0) EXM_THROW(43, "Stream error : cannot skip skippable area"); return selectDecoder(finput, foutput); EXTENDED_FORMAT; default: - if (ftell(finput) == MAGICNUMBER_SIZE) EXM_THROW(44,"Unrecognized header : file cannot be decoded"); // Wrong magic number at the beginning of 1st stream + if (ftell(finput) == MAGICNUMBER_SIZE) EXM_THROW(44,"Unrecognized header : file cannot be decoded"); /* Wrong magic number at the beginning of 1st stream */ DISPLAYLEVEL(2, "Stream followed by unrecognized data\n"); return ENDOFSTREAM; } @@ -638,11 +638,11 @@ int LZ4IO_decompressFilename(char* input_filename, char* output_filename) clock_t start, end; - // Init + /* Init */ start = clock(); get_fileHandle(input_filename, output_filename, &finput, &foutput); - // Loop over multiple streams + /* Loop over multiple streams */ do { decodedSize = selectDecoder(finput, foutput); @@ -650,7 +650,7 @@ int LZ4IO_decompressFilename(char* input_filename, char* output_filename) filesize += decodedSize; } while (decodedSize != ENDOFSTREAM); - // Final Status + /* Final Status */ end = clock(); DISPLAYLEVEL(2, "\r%79s\r", ""); DISPLAYLEVEL(2, "Successfully decoded %llu bytes \n", filesize); @@ -659,11 +659,11 @@ int LZ4IO_decompressFilename(char* input_filename, char* output_filename) DISPLAYLEVEL(4, "Done in %.2f s ==> %.2f MB/s\n", seconds, (double)filesize / seconds / 1024 / 1024); } - // Close + /* Close */ fclose(finput); fclose(foutput); - // Error status = OK + /* Error status = OK */ return 0; } -- cgit v0.12 From 0569a68edd58d741e46ec1e50d6dd936de77dbfa Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Wed, 17 Dec 2014 12:20:17 +0100 Subject: C90 compatibility --- NEWS | 1 + lib/xxhash.c | 27 +++++++++++++-------------- programs/bench.c | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/NEWS b/NEWS index 0b90665..bf7efe9 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ New : lz4frame API is now integrated into liblz4 Fixed : GCC 4.9 bug on highest performance settings, reported by Greg Slazinski Fixed : bug within LZ4 HC streaming mode, reported by James Boyle Fixed : older compiler don't like nameless unions, reported by Cheyi Lin +Changed : lz4 is C90 compatible r125: Changed : endian and alignment code diff --git a/lib/xxhash.c b/lib/xxhash.c index 7aff1fa..a3ee31c 100644 --- a/lib/xxhash.c +++ b/lib/xxhash.c @@ -49,7 +49,6 @@ You can contact the author at : /* XXH_ACCEPT_NULL_INPUT_POINTER : * If the input pointer is a null pointer, xxHash default behavior is to trigger a memory access error, since it is a bad pointer. * When this option is enabled, xxHash output for null input pointers will be the same as a null-length input. - * This option has a very small performance cost (only measurable on small inputs). * By default, this option is disabled. To enable it, uncomment below define : */ /* #define XXH_ACCEPT_NULL_INPUT_POINTER 1 */ @@ -68,19 +67,19 @@ You can contact the author at : /************************************** * Compiler Specific Options ***************************************/ -/* Disable some Visual warning messages */ -#ifdef _MSC_VER -# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ -#endif - #ifdef _MSC_VER /* Visual Studio */ +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ # define FORCE_INLINE static __forceinline #else -# ifdef __GNUC__ -# define FORCE_INLINE static inline __attribute__((always_inline)) +# if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ +# ifdef __GNUC__ +# define FORCE_INLINE static inline __attribute__((always_inline)) +# else +# define FORCE_INLINE static inline +# endif # else -# define FORCE_INLINE static inline -# endif +# define FORCE_INLINE static +# endif /* __STDC_VERSION__ */ #endif @@ -171,14 +170,14 @@ typedef struct _U64_S # define XXH_swap32 __builtin_bswap32 # define XXH_swap64 __builtin_bswap64 #else -static inline U32 XXH_swap32 (U32 x) +static U32 XXH_swap32 (U32 x) { return ((x << 24) & 0xff000000 ) | ((x << 8) & 0x00ff0000 ) | ((x >> 8) & 0x0000ff00 ) | ((x >> 24) & 0x000000ff ); } -static inline U64 XXH_swap64 (U64 x) +static U64 XXH_swap64 (U64 x) { return ((x << 56) & 0xff00000000000000ULL) | ((x << 40) & 0x00ff000000000000ULL) | @@ -212,7 +211,7 @@ static inline U64 XXH_swap64 (U64 x) * Architecture Macros ****************************************/ typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess; -#ifndef XXH_CPU_LITTLE_ENDIAN // It is possible to define XXH_CPU_LITTLE_ENDIAN externally, for example using a compiler switch +#ifndef XXH_CPU_LITTLE_ENDIAN /* XXH_CPU_LITTLE_ENDIAN can be defined externally, for example using a compiler switch */ static const int one = 1; # define XXH_CPU_LITTLE_ENDIAN (*(char*)(&one)) #endif @@ -221,7 +220,7 @@ static const int one = 1; /************************************** * Macros ***************************************/ -#define XXH_STATIC_ASSERT(c) { enum { XXH_static_assert = 1/(!!(c)) }; } // use only *after* variable declarations +#define XXH_STATIC_ASSERT(c) { enum { XXH_static_assert = 1/(!!(c)) }; } /* use only *after* variable declarations */ /**************************** diff --git a/programs/bench.c b/programs/bench.c index ba3284e..02e56c9 100644 --- a/programs/bench.c +++ b/programs/bench.c @@ -79,7 +79,7 @@ static int LZ4_compress_local(const char* src, char* dst, int size, int clevel) /************************************** * Basic Types ***************************************/ -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L // C99 +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ # include typedef uint8_t BYTE; typedef uint16_t U16; @@ -247,7 +247,7 @@ int BMK_benchFile(char** fileNamesTable, int nbFiles, int cLevel) double totald = 0.; - // Init + /* Init */ if (cLevel <= 3) cfunctionId = 0; else cfunctionId = 1; switch (cfunctionId) { -- cgit v0.12 From f68eead36c0eb8f6f4e5c912dfe204c52bb7b7c5 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Wed, 17 Dec 2014 12:32:49 +0100 Subject: Added : -pedantic compilation option --- NEWS | 1 + lib/Makefile | 2 +- lib/lz4hc.c | 2 +- lib/xxhash.c | 4 ++-- programs/Makefile | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index bf7efe9..8aeab1b 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ Fixed : GCC 4.9 bug on highest performance settings, reported by Greg Slazinski Fixed : bug within LZ4 HC streaming mode, reported by James Boyle Fixed : older compiler don't like nameless unions, reported by Cheyi Lin Changed : lz4 is C90 compatible +Changed : added -pedantic option, fixed a few mminor warnings r125: Changed : endian and alignment code diff --git a/lib/Makefile b/lib/Makefile index 2c85ed8..faffb39 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -41,7 +41,7 @@ LIBVER=$(LIBVER_MAJOR).$(LIBVER_MINOR).$(LIBVER_PATCH) DESTDIR?= PREFIX ?= /usr CFLAGS ?= -O3 -CFLAGS += -I. -std=c99 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Wstrict-prototypes +CFLAGS += -I. -std=c99 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -pedantic LIBDIR?= $(PREFIX)/lib INCLUDEDIR=$(PREFIX)/include diff --git a/lib/lz4hc.c b/lib/lz4hc.c index e453e35..5549969 100644 --- a/lib/lz4hc.c +++ b/lib/lz4hc.c @@ -587,7 +587,7 @@ int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* source, c * ************************************/ /* allocation */ LZ4_streamHC_t* LZ4_createStreamHC(void) { return (LZ4_streamHC_t*)malloc(sizeof(LZ4_streamHC_t)); } -int LZ4_freeStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr) { free(LZ4_streamHCPtr); return 0; }; +int LZ4_freeStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr) { free(LZ4_streamHCPtr); return 0; } /* initialization */ diff --git a/lib/xxhash.c b/lib/xxhash.c index a3ee31c..093564c 100644 --- a/lib/xxhash.c +++ b/lib/xxhash.c @@ -542,7 +542,7 @@ XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) { XXH_free(statePtr); return XXH_OK; -}; +} XXH64_state_t* XXH64_createState(void) { @@ -553,7 +553,7 @@ XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr) { XXH_free(statePtr); return XXH_OK; -}; +} /*** Hash feed ***/ diff --git a/programs/Makefile b/programs/Makefile index 02052ea..543eb7c 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -36,7 +36,7 @@ RELEASE?= r126 DESTDIR?= PREFIX ?= /usr CFLAGS ?= -O3 -CFLAGS += -std=c99 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -DLZ4_VERSION=\"$(RELEASE)\" +CFLAGS += -std=c99 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -pedantic -DLZ4_VERSION=\"$(RELEASE)\" FLAGS = -I../lib $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) BINDIR=$(PREFIX)/bin -- cgit v0.12