From e898c9a79a91083805e9a733c2c0917aa7d24820 Mon Sep 17 00:00:00 2001 From: "yann.collet.73@gmail.com" Date: Tue, 19 Feb 2013 20:52:50 +0000 Subject: Corrected issue 59 in lz4hc.c, reported by Masafumi Kiribayashi Corrected issue 60 in lz4.h, reported by Takayuki Matsuoka Added : a cmake/pack installer, by Dmitry Cherepanov git-svn-id: https://lz4.googlecode.com/svn/trunk@89 650e7d94-2a16-8b24-b05c-7c0b3f6821cd --- cmake/pack/CMakeLists.txt | 82 ++++++++++++++++++++++++++++++++++++++++++ cmake/pack/release_COPYING.txt | 21 +++++++++++ lz4.h | 2 +- lz4hc.c | 29 +++------------ 4 files changed, 109 insertions(+), 25 deletions(-) create mode 100644 cmake/pack/CMakeLists.txt create mode 100644 cmake/pack/release_COPYING.txt diff --git a/cmake/pack/CMakeLists.txt b/cmake/pack/CMakeLists.txt new file mode 100644 index 0000000..80adbb3 --- /dev/null +++ b/cmake/pack/CMakeLists.txt @@ -0,0 +1,82 @@ +cmake_minimum_required (VERSION 2.8) +PROJECT(LZ4) + +############################## CPACK +set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LZ4 Packer") +set(CPACK_PACKAGE_VERSION_MAJOR 0) +set(CPACK_PACKAGE_VERSION_MINOR 0) +set(CPACK_PACKAGE_VERSION_PATCH r89) +#set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_BINARY_DIR}/COPYING_LGPL) +############################## +FIND_PACKAGE(Subversion) +IF(SUBVERSION_FOUND) + Subversion_WC_INFO(${SRC_DIR} revision) + set(revision_MY_WC_STATUS "LZ4 has revision ${revision_WC_REVISION} at ${revision_WC_LAST_CHANGED_DATE}") + message(STATUS ${revision_MY_WC_STATUS}) + if(NOT ${revision_WC_REVISION}) + else(NOT ${revision_WC_REVISION}) + set(CPACK_PACKAGE_VERSION_PATCH "r${revision_WC_REVISION}") + endif(NOT ${revision_WC_REVISION}) +ELSE(SUBVERSION_FOUND) + message(WARNING "NO Subversion FOUND!!!") +ENDIF(SUBVERSION_FOUND) +set(VERSION_STRING " \"${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}\" ") +############################## +INCLUDE (CheckTypeSize) +check_type_size("void *" SIZEOF_VOID_P) +IF( ${SIZEOF_VOID_P} STREQUAL "8" ) + set (CMAKE_SYSTEM_PROCESSOR "64bit") + MESSAGE( STATUS "64 bit architecture detected size of void * is " ${SIZEOF_VOID_P}) +ENDIF() +############################### warnings + +ADD_DEFINITIONS("-Wall") +ADD_DEFINITIONS("-W") +ADD_DEFINITIONS("-Wundef") +ADD_DEFINITIONS("-Wcast-align") +ADD_DEFINITIONS("-Wno-implicit-function-declaration") +ADD_DEFINITIONS("-O3 -march=native -std=c99") +INCLUDE_DIRECTORIES (${SRC_DIR}) + + + +set(LZ4_SRCS_LIB ${SRC_DIR}lz4.c ${SRC_DIR}lz4hc.c ${SRC_DIR}lz4.h ${SRC_DIR}lz4_format_description.txt) +set(LZ4_SRCS ${LZ4_SRCS_LIB} ${SRC_DIR}bench.c ${SRC_DIR}lz4demo.c ) +set(FIZZER_SRCS ${SRC_DIR}lz4.c ${SRC_DIR}lz4hc.c ${SRC_DIR}lz4.h ${SRC_DIR}fuzzer.c) + +# EXECUTABLES FOR 32 Bit and 64 versions +if(CMAKE_SYSTEM_PROCESSOR STREQUAL "64bit") + add_executable(lz4demo32 ${LZ4_SRCS}) + install(TARGETS lz4demo32 RUNTIME DESTINATION "./") +SET_TARGET_PROPERTIES(lz4demo32 PROPERTIES + COMPILE_FLAGS PROPERTIES COMPILE_FLAGS "-m32 -Os" LINK_FLAGS "-m32") +endif() + +add_executable(lz4demo ${LZ4_SRCS}) +install(TARGETS lz4demo RUNTIME DESTINATION "./") + +add_executable(fuzzer ${FIZZER_SRCS}) +install(TARGETS fuzzer RUNTIME DESTINATION "./") + +#target_link_libraries(lz4 ${LZ4_SRCS_LIB}) +####################### CPACK PACKAGING ################### +install(FILES ${SRC_DIR}lz4_format_description.txt DESTINATION "./") + +set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME}) +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_LIST_DIR}/release_COPYING.txt") +set(CPACK_PACKAGE_VENDOR "Yann Collet") +set(CPACK_WWW_SITE "http://fastcompression.blogspot.com/p/lz4.html") +set(CPACK_NSIS_URL_INFO_ABOUT "${CPACK_WWW_SITE}") +set(CPACK_NSIS_HELP_LINK "${CPACK_WWW_SITE}") + +set(CPACK_NSIS_DISPLAY_NAME ${CPACK_PACKAGE_NAME}) +set(CPACK_NSIS_COMPRESSOR "/SOLID lzma \r\n SetCompressorDictSize 32") + +set(CPACK_NSIS_MENU_LINKS + "${CPACK_WWW_SITE}" "${CPACK_PACKAGE_NAME} homepage" + "/lz4_format_description.txt " "lz4 format description" + "/" "LZ4 directory " +) + +include (CPack) diff --git a/cmake/pack/release_COPYING.txt b/cmake/pack/release_COPYING.txt new file mode 100644 index 0000000..32cec0d --- /dev/null +++ b/cmake/pack/release_COPYING.txt @@ -0,0 +1,21 @@ + + lz4demo and fuzzer is an open-source demo compression algorithm LZ4 programs + Copyright (C) Yann Collet 2012 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 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/ diff --git a/lz4.h b/lz4.h index 3680121..4897eb2 100644 --- a/lz4.h +++ b/lz4.h @@ -41,7 +41,7 @@ extern "C" { //************************************** // Compiler Options //************************************** -#ifdef _MSC_VER // Visual Studio +#if defined(_MSC_VER) && !defined(__cplusplus) // Visual Studio # define inline __inline // Visual is not C99, but supports some kind of inline #endif diff --git a/lz4hc.c b/lz4hc.c index 7fe78da..341a010 100644 --- a/lz4hc.c +++ b/lz4hc.c @@ -411,7 +411,7 @@ forceinline static int LZ4HC_InsertAndFindBestMatch (LZ4HC_Data_Structure* hc4, } #endif - while ((ref >= (ip-MAX_DISTANCE)) && (nbAttempts)) + while ((ref >= ip-MAX_DISTANCE) && (ref >= hc4->base) && (nbAttempts)) { nbAttempts--; if (*(ref+ml) == *(ip+ml)) @@ -558,7 +558,7 @@ int LZ4_compressHCCtx(LZ4HC_Data_Structure* ctx, _Search2: if (ip+ml < mflimit) ml2 = LZ4HC_InsertAndGetWiderMatch(ctx, ip + ml - 2, ip + 1, matchlimit, ml, &ref2, &start2); - else ml2=ml; + else ml2 = ml; if (ml2 == ml) // No better match { @@ -603,35 +603,16 @@ _Search3: ml2 -= correction; } } - // Now, we have start2 = ip+new_ml, with new_ml=min(ml, OPTIMAL_ML=18) + // Now, we have start2 = ip+new_ml, with new_ml = min(ml, OPTIMAL_ML=18) if (start2 + ml2 < mflimit) ml3 = LZ4HC_InsertAndGetWiderMatch(ctx, start2 + ml2 - 3, start2, matchlimit, ml2, &ref3, &start3); - else ml3=ml2; + else ml3 = ml2; if (ml3 == ml2) // No better match : 2 sequences to encode { // ip & ref are known; Now for ml - if (start2 < ip+ml) - { - if ((start2 - ip) < OPTIMAL_ML) - { - int correction; - if (ml > OPTIMAL_ML) ml = OPTIMAL_ML; - if (ip+ml > start2 + ml2 - MINMATCH) ml = (int)(start2 - ip) + ml2 - MINMATCH; - correction = ml - (int)(start2 - ip); - if (correction > 0) - { - start2 += correction; - ref2 += correction; - ml2 -= correction; - } - } - else - { - ml = (int)(start2 - ip); - } - } + if (start2 < ip+ml) ml = (int)(start2 - ip); // Now, encode 2 sequences LZ4_encodeSequence(&ip, &op, &anchor, ml, ref); ip = start2; -- cgit v0.12