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
This commit is contained in:
parent
c1d7e4f675
commit
e898c9a79a
82
cmake/pack/CMakeLists.txt
Normal file
82
cmake/pack/CMakeLists.txt
Normal file
@ -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)
|
21
cmake/pack/release_COPYING.txt
Normal file
21
cmake/pack/release_COPYING.txt
Normal file
@ -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/
|
2
lz4.h
2
lz4.h
@ -41,7 +41,7 @@ extern "C" {
|
|||||||
//**************************************
|
//**************************************
|
||||||
// Compiler Options
|
// 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
|
# define inline __inline // Visual is not C99, but supports some kind of inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
29
lz4hc.c
29
lz4hc.c
@ -411,7 +411,7 @@ forceinline static int LZ4HC_InsertAndFindBestMatch (LZ4HC_Data_Structure* hc4,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while ((ref >= (ip-MAX_DISTANCE)) && (nbAttempts))
|
while ((ref >= ip-MAX_DISTANCE) && (ref >= hc4->base) && (nbAttempts))
|
||||||
{
|
{
|
||||||
nbAttempts--;
|
nbAttempts--;
|
||||||
if (*(ref+ml) == *(ip+ml))
|
if (*(ref+ml) == *(ip+ml))
|
||||||
@ -558,7 +558,7 @@ int LZ4_compressHCCtx(LZ4HC_Data_Structure* ctx,
|
|||||||
_Search2:
|
_Search2:
|
||||||
if (ip+ml < mflimit)
|
if (ip+ml < mflimit)
|
||||||
ml2 = LZ4HC_InsertAndGetWiderMatch(ctx, ip + ml - 2, ip + 1, matchlimit, ml, &ref2, &start2);
|
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
|
if (ml2 == ml) // No better match
|
||||||
{
|
{
|
||||||
@ -603,35 +603,16 @@ _Search3:
|
|||||||
ml2 -= correction;
|
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)
|
if (start2 + ml2 < mflimit)
|
||||||
ml3 = LZ4HC_InsertAndGetWiderMatch(ctx, start2 + ml2 - 3, start2, matchlimit, ml2, &ref3, &start3);
|
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
|
if (ml3 == ml2) // No better match : 2 sequences to encode
|
||||||
{
|
{
|
||||||
// ip & ref are known; Now for ml
|
// ip & ref are known; Now for ml
|
||||||
if (start2 < ip+ml)
|
if (start2 < ip+ml) ml = (int)(start2 - ip);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Now, encode 2 sequences
|
// Now, encode 2 sequences
|
||||||
LZ4_encodeSequence(&ip, &op, &anchor, ml, ref);
|
LZ4_encodeSequence(&ip, &op, &anchor, ml, ref);
|
||||||
ip = start2;
|
ip = start2;
|
||||||
|
Loading…
Reference in New Issue
Block a user