Hello community,
here is the log from the commit of package eet for openSUSE:Factory checked in at 2012-12-10 13:46:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/eet (Old)
and /work/SRC/openSUSE:Factory/.eet.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "eet", Maintainer is ""
Changes:
--------
--- /work/SRC/openSUSE:Factory/eet/eet.changes 2012-12-03 09:33:33.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.eet.new/eet.changes 2012-12-10 13:46:44.000000000 +0100
@@ -1,0 +2,6 @@
+Sat Dec 8 01:50:31 UTC 2012 - simon@simotek.net
+
+- Bump to 1.7.3
+- 1.7.3 is a bugfix release to coincide with the beta release of efl
+
+-------------------------------------------------------------------
Old:
----
eet-1.7.2.tar.bz2
New:
----
eet-1.7.3.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ eet.spec ++++++
--- /var/tmp/diff_new_pack.O08tMg/_old 2012-12-10 13:46:45.000000000 +0100
+++ /var/tmp/diff_new_pack.O08tMg/_new 2012-12-10 13:46:45.000000000 +0100
@@ -17,7 +17,7 @@
Name: eet
-Version: 1.7.2
+Version: 1.7.3
Release: 0
Summary: Data encode/decode and storage library
License: BSD-2-Clause
++++++ eet-1.7.2.tar.bz2 -> eet-1.7.3.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eet-1.7.2/ChangeLog new/eet-1.7.3/ChangeLog
--- old/eet-1.7.2/ChangeLog 2012-11-23 00:08:44.000000000 +0100
+++ new/eet-1.7.3/ChangeLog 2012-12-07 16:00:35.000000000 +0100
@@ -644,3 +644,7 @@
1.7.2 release
+2012-12-07 Luis Felipe Strano Moraes
+
+ * 1.7.3 release
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eet-1.7.2/NEWS new/eet-1.7.3/NEWS
--- old/eet-1.7.2/NEWS 2012-11-22 23:47:24.000000000 +0100
+++ new/eet-1.7.3/NEWS 2012-12-07 16:02:29.000000000 +0100
@@ -1,4 +1,10 @@
-Eet 1.7.2
+Eet 1.7.3
+
+Changes since Eet 1.7.2:
+--------------------------
+
+Fixes:
+ * Updated lz4 code.
Changes since Eet 1.7.1:
--------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eet-1.7.2/configure new/eet-1.7.3/configure
--- old/eet-1.7.2/configure 2012-11-23 00:20:48.000000000 +0100
+++ new/eet-1.7.3/configure 2012-12-07 16:55:51.000000000 +0100
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for eet 1.7.2.
+# Generated by GNU Autoconf 2.68 for eet 1.7.3.
#
# Report bugs to .
#
@@ -570,8 +570,8 @@
# Identity of this package.
PACKAGE_NAME='eet'
PACKAGE_TARNAME='eet'
-PACKAGE_VERSION='1.7.2'
-PACKAGE_STRING='eet 1.7.2'
+PACKAGE_VERSION='1.7.3'
+PACKAGE_STRING='eet 1.7.3'
PACKAGE_BUGREPORT='enlightenment-devel@lists.sourceforge.net'
PACKAGE_URL=''
@@ -1352,7 +1352,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures eet 1.7.2 to adapt to many kinds of systems.
+\`configure' configures eet 1.7.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1422,7 +1422,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of eet 1.7.2:";;
+ short | recursive ) echo "Configuration of eet 1.7.3:";;
esac
cat <<\_ACEOF
@@ -1559,7 +1559,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-eet configure 1.7.2
+eet configure 1.7.3
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -1982,7 +1982,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by eet $as_me 1.7.2, which was
+It was created by eet $as_me 1.7.3, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2806,7 +2806,7 @@
# Define the identity of the package.
PACKAGE='eet'
- VERSION='1.7.2'
+ VERSION='1.7.3'
cat >>confdefs.h <<_ACEOF
@@ -11840,7 +11840,7 @@
cat >>confdefs.h <<_ACEOF
-#define VMIC 2
+#define VMIC 3
_ACEOF
@@ -11848,7 +11848,7 @@
#define VREV 0
_ACEOF
-version_info="8:2:7"
+version_info="8:3:7"
release_info=""
@@ -15753,7 +15753,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by eet $as_me 1.7.2, which was
+This file was extended by eet $as_me 1.7.3, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -15819,7 +15819,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-eet config.status 1.7.2
+eet config.status 1.7.3
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eet-1.7.2/configure.ac new/eet-1.7.3/configure.ac
--- old/eet-1.7.2/configure.ac 2012-11-23 00:20:46.000000000 +0100
+++ new/eet-1.7.3/configure.ac 2012-12-07 16:55:48.000000000 +0100
@@ -2,7 +2,7 @@
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
m4_define([v_maj], [1])
m4_define([v_min], [7])
-m4_define([v_mic], [2])
+m4_define([v_mic], [3])
m4_define([v_rev], m4_esyscmd([(svnversion "${SVN_REPO_PATH:-.}" | grep -v '\(export\|Unversioned directory\)' || echo 0) | awk -F : '{printf("%s\n", $1);}' | tr -d ' :MSP\n']))
m4_if(v_rev, [0], [m4_define([v_rev], m4_esyscmd([git log 2> /dev/null | (grep -m1 git-svn-id || echo 0) | sed -e 's/.*@\([0-9]*\).*/\1/' | tr -d '\n']))])
##-- When released, remove the dnl on the below line
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eet-1.7.2/doc/Doxyfile new/eet-1.7.3/doc/Doxyfile
--- old/eet-1.7.2/doc/Doxyfile 2012-11-23 00:20:55.000000000 +0100
+++ new/eet-1.7.3/doc/Doxyfile 2012-12-07 16:55:54.000000000 +0100
@@ -31,7 +31,7 @@
# This could be handy for archiving the generated documentation or
# if some version control system is used.
-PROJECT_NUMBER = 1.7.2
+PROJECT_NUMBER = 1.7.3
# Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eet-1.7.2/eet.spec new/eet-1.7.3/eet.spec
--- old/eet-1.7.2/eet.spec 2012-11-23 00:20:55.000000000 +0100
+++ new/eet-1.7.3/eet.spec 2012-12-07 16:55:54.000000000 +0100
@@ -3,7 +3,7 @@
Summary: Library for speedy data storage, retrieval, and compression.
Name: eet
-Version: 1.7.2
+Version: 1.7.3
Release: %{_rel}
License: BSD
Group: System Environment/Libraries
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eet-1.7.2/src/lib/lz4/README new/eet-1.7.3/src/lib/lz4/README
--- old/eet-1.7.2/src/lib/lz4/README 2012-11-22 12:37:03.000000000 +0100
+++ new/eet-1.7.3/src/lib/lz4/README 2012-12-07 12:48:16.000000000 +0100
@@ -4,4 +4,4 @@
yann.collet.73@gmail.com
Copyright/licensing info in source files here.
-this was from revsion 66.
+this was from revision 84.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eet-1.7.2/src/lib/lz4/lz4.c new/eet-1.7.3/src/lib/lz4/lz4.c
--- old/eet-1.7.2/src/lib/lz4/lz4.c 2012-11-22 12:37:03.000000000 +0100
+++ new/eet-1.7.3/src/lib/lz4/lz4.c 2012-12-07 12:48:16.000000000 +0100
@@ -34,31 +34,24 @@
//**************************************
// Tuning parameters
//**************************************
-// COMPRESSIONLEVEL :
-// Increasing this value improves compression ratio
-// Lowering this value reduces memory usage
-// Reduced memory usage typically improves speed, due to cache effect (ex : L1 32KB for Intel, L1 64KB for AMD)
-// Memory usage formula : N->2^(N+2) Bytes (examples : 12 -> 16KB ; 17 -> 512KB)
-#define COMPRESSIONLEVEL 12
+// MEMORY_USAGE :
+// Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
+// Increasing memory usage improves compression ratio
+// Reduced memory usage can improve speed, due to cache effect
+// Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache
+#define MEMORY_USAGE 14
-// NOTCOMPRESSIBLE_CONFIRMATION :
+// NOTCOMPRESSIBLE_DETECTIONLEVEL :
// Decreasing this value will make the algorithm skip faster data segments considered "incompressible"
// This may decrease compression ratio dramatically, but will be faster on incompressible data
// Increasing this value will make the algorithm search more before declaring a segment "incompressible"
// This could improve compression a bit, but will be slower on incompressible data
// The default value (6) is recommended
-#define NOTCOMPRESSIBLE_CONFIRMATION 6
-
-// LZ4_COMPRESSMIN :
-// Compression function will *fail* if it is not successful at compressing input by at least LZ4_COMPRESSMIN bytes
-// Since the compression function stops working prematurely, it results in a speed gain
-// The output however is unusable. Compression function result will be zero.
-// Default : 0 = disabled
-#define LZ4_COMPRESSMIN 0
+#define NOTCOMPRESSIBLE_DETECTIONLEVEL 6
// BIG_ENDIAN_NATIVE_BUT_INCOMPATIBLE :
-// This will provide a boost to performance for big endian cpu, but the resulting compressed stream will be incompatible with little-endian CPU.
-// You can set this option to 1 in situations where data will stay within closed environment
+// This will provide a small boost to performance for big endian cpu, but the resulting compressed stream will be incompatible with little-endian CPU.
+// You can set this option to 1 in situations where data will remain within closed environment
// This option is useless on Little_Endian CPU (such as x86)
//#define BIG_ENDIAN_NATIVE_BUT_INCOMPATIBLE 1
@@ -98,7 +91,7 @@
//**************************************
// Compiler Options
//**************************************
-#if __STDC_VERSION__ >= 199901L // C99
+#if __STDC_VERSION__ >= 199901L // C99
/* "restrict" is a known keyword */
#else
# define restrict // Disable restrict
@@ -107,7 +100,7 @@
#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
#ifdef _MSC_VER // Visual Studio
-# define inline __forceinline // Visual is not C99, but supports some kind of inline
+# include // For Visual 2005
# if LZ4_ARCH64 // 64-bit
# pragma intrinsic(_BitScanForward64) // For Visual 2005
# pragma intrinsic(_BitScanReverse64) // For Visual 2005
@@ -181,11 +174,11 @@
//**************************************
#define MINMATCH 4
-#define HASH_LOG COMPRESSIONLEVEL
+#define HASH_LOG (MEMORY_USAGE-2)
#define HASHTABLESIZE (1 << HASH_LOG)
#define HASH_MASK (HASHTABLESIZE - 1)
-#define SKIPSTRENGTH (NOTCOMPRESSIBLE_CONFIRMATION>2?NOTCOMPRESSIBLE_CONFIRMATION:2)
+#define SKIPSTRENGTH (NOTCOMPRESSIBLE_DETECTIONLEVEL>2?NOTCOMPRESSIBLE_DETECTIONLEVEL:2)
#define STACKLIMIT 13
#define HEAPMODE (HASH_LOG>STACKLIMIT) // Defines if memory is allocated into the stack (local variable), or into the heap (malloc()).
#define COPYLENGTH 8
@@ -196,8 +189,8 @@
#define MAXD_LOG 16
#define MAX_DISTANCE ((1 << MAXD_LOG) - 1)
-#define ML_BITS 4
-#define ML_MASK ((1U<= 304) && !defined(LZ4_FORCE_SW_BITCOUNT)
return (__builtin_clzll(val) >> 3);
#else
- int r;
- if (!(val>>32)) { r=4; } else { r=0; val>>=32; }
- if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; }
- r += (!val);
- return r;
+ int r;
+ if (!(val>>32)) { r=4; } else { r=0; val>>=32; }
+ if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; }
+ r += (!val);
+ return r;
#endif
#else
#if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT)
@@ -281,15 +274,15 @@
#elif defined(__GNUC__) && (GCC_VERSION >= 304) && !defined(LZ4_FORCE_SW_BITCOUNT)
return (__builtin_ctzll(val) >> 3);
#else
- static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 };
- return DeBruijnBytePos[((U64)((val & -val) * 0x0218A392CDABBD3F)) >> 58];
+ static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 };
+ return DeBruijnBytePos[((U64)((val & -val) * 0x0218A392CDABBD3F)) >> 58];
#endif
#endif
}
#else
-inline static int LZ4_NbCommonBytes (register U32 val)
+static inline int LZ4_NbCommonBytes (register U32 val)
{
#if defined(LZ4_BIG_ENDIAN)
#if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT)
@@ -299,10 +292,10 @@
#elif defined(__GNUC__) && (GCC_VERSION >= 304) && !defined(LZ4_FORCE_SW_BITCOUNT)
return (__builtin_clz(val) >> 3);
#else
- int r;
- if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; }
- r += (!val);
- return r;
+ int r;
+ if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; }
+ r += (!val);
+ return r;
#endif
#else
#if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT)
@@ -312,8 +305,8 @@
#elif defined(__GNUC__) && (GCC_VERSION >= 304) && !defined(LZ4_FORCE_SW_BITCOUNT)
return (__builtin_ctz(val) >> 3);
#else
- static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 };
- return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27];
+ static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 };
+ return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27];
#endif
#endif
}
@@ -321,154 +314,173 @@
#endif
-//****************************
-// Public functions
-//****************************
-
-int LZ4_compressBound(int isize)
-{
- return (isize + (isize/255) + 16);
-}
-
-
//******************************
// Compression functions
//******************************
-int LZ4_compressCtx(void** ctx,
- const char* source,
- char* dest,
- int isize)
+// LZ4_compressCtx :
+// -----------------
+// Compress 'isize' bytes from 'source' into an output buffer 'dest' of maximum size 'maxOutputSize'.
+// If it cannot achieve it, compression will stop, and result of the function will be zero.
+// return : the number of bytes written in buffer 'dest', or 0 if the compression fails
+
+static inline int LZ4_compressCtx(void** ctx,
+ const char* source,
+ char* dest,
+ int isize,
+ int maxOutputSize)
{
#if HEAPMODE
- struct refTables *srt = (struct refTables *) (*ctx);
- HTYPE* HashTable;
+ struct refTables *srt = (struct refTables *) (*ctx);
+ HTYPE* HashTable;
#else
- HTYPE HashTable[HASHTABLESIZE] = {0};
+ HTYPE HashTable[HASHTABLESIZE] = {0};
#endif
- const BYTE* ip = (BYTE*) source;
- INITBASE(base);
- const BYTE* anchor = ip;
- const BYTE* const iend = ip + isize;
- const BYTE* const mflimit = iend - MFLIMIT;
+ const BYTE* ip = (BYTE*) source;
+ INITBASE(base);
+ const BYTE* anchor = ip;
+ const BYTE* const iend = ip + isize;
+ const BYTE* const mflimit = iend - MFLIMIT;
#define matchlimit (iend - LASTLITERALS)
- BYTE* op = (BYTE*) dest;
+ BYTE* op = (BYTE*) dest;
+ BYTE* const oend = op + maxOutputSize;
- int len, length;
- const int skipStrength = SKIPSTRENGTH;
- U32 forwardH;
+ int len, length;
+ const int skipStrength = SKIPSTRENGTH;
+ U32 forwardH;
- // Init
- if (isizehashTable);
- memset((void*)HashTable, 0, sizeof(srt->hashTable));
+ if (*ctx == NULL)
+ {
+ srt = (struct refTables *) malloc ( sizeof(struct refTables) );
+ *ctx = (void*) srt;
+ }
+ HashTable = (HTYPE*)(srt->hashTable);
+ memset((void*)HashTable, 0, sizeof(srt->hashTable));
#else
- (void) ctx;
+ (void) ctx;
#endif
- // First Byte
- HashTable[LZ4_HASH_VALUE(ip)] = ip - base;
- ip++; forwardH = LZ4_HASH_VALUE(ip);
+ // First Byte
+ HashTable[LZ4_HASH_VALUE(ip)] = ip - base;
+ ip++; forwardH = LZ4_HASH_VALUE(ip);
- // Main Loop
+ // Main Loop
for ( ; ; )
- {
- int findMatchAttempts = (1U << skipStrength) + 3;
- const BYTE* forwardIp = ip;
- const BYTE* ref;
- BYTE* token;
-
- // Find a match
- do {
- U32 h = forwardH;
- int step = findMatchAttempts++ >> skipStrength;
- ip = forwardIp;
- forwardIp = ip + step;
-
- if unlikely(forwardIp > mflimit) { goto _last_literals; }
-
- forwardH = LZ4_HASH_VALUE(forwardIp);
- ref = base + HashTable[h];
- HashTable[h] = ip - base;
-
- } while ((ref < ip - MAX_DISTANCE) || (A32(ref) != A32(ip)));
-
- // Catch up
- while ((ip>anchor) && (ref>(BYTE*)source) && unlikely(ip[-1]==ref[-1])) { ip--; ref--; }
-
- // Encode Literal length
- length = ip - anchor;
- token = op++;
- if (length>=(int)RUN_MASK) { *token=(RUN_MASK< 254 ; len-=255) *op++ = 255; *op++ = (BYTE)len; }
- else *token = (length<> skipStrength;
+ ip = forwardIp;
+ forwardIp = ip + step;
+
+ if unlikely(forwardIp > mflimit) { goto _last_literals; }
+
+ forwardH = LZ4_HASH_VALUE(forwardIp);
+ ref = base + HashTable[h];
+ HashTable[h] = ip - base;
+
+ } while ((ref < ip - MAX_DISTANCE) || (A32(ref) != A32(ip)));
+
+ // Catch up
+ while ((ip>anchor) && (ref>(BYTE*)source) && unlikely(ip[-1]==ref[-1])) { ip--; ref--; }
+
+ // Encode Literal length
+ length = (int)(ip - anchor);
+ token = op++;
+ if unlikely(op + length + (2 + 1 + LASTLITERALS) + (length>>8) > oend) return 0; // Check output limit
+#ifdef _MSC_VER
+ if (length>=(int)RUN_MASK)
+ {
+ int len = length-RUN_MASK;
+ *token=(RUN_MASK<254)
+ {
+ do { *op++ = 255; len -= 255; } while (len>254);
+ *op++ = (BYTE)len;
+ memcpy(op, anchor, length);
+ op += length;
+ goto _next_match;
+ }
+ else
+ *op++ = (BYTE)len;
+ }
+ else *token = (length<=(int)RUN_MASK) { *token=(RUN_MASK< 254 ; len-=255) *op++ = 255; *op++ = (BYTE)len; }
+ else *token = (length<=(int)ML_MASK) { *token+=ML_MASK; len-=ML_MASK; for(; len > 509 ; len-=510) { *op++ = 255; *op++ = 255; } if (len > 254) { len-=255; *op++ = 255; } *op++ = (BYTE)len; }
- else *token += len;
-
- // Test end of chunk
- if (ip > mflimit) { anchor = ip; break; }
-
- // Fill table
- HashTable[LZ4_HASH_VALUE(ip-2)] = ip - 2 - base;
-
- // Test next position
- ref = base + HashTable[LZ4_HASH_VALUE(ip)];
- HashTable[LZ4_HASH_VALUE(ip)] = ip - base;
- if ((ref > ip - (MAX_DISTANCE + 1)) && (A32(ref) == A32(ip))) { token = op++; *token=0; goto _next_match; }
-
- // Prepare next loop
- anchor = ip++;
- forwardH = LZ4_HASH_VALUE(ip);
- }
+ // Encode MatchLength
+ len = (int)(ip - anchor);
+ if unlikely(op + (1 + LASTLITERALS) + (len>>8) > oend) return 0; // Check output limit
+ if (len>=(int)ML_MASK) { *token+=ML_MASK; len-=ML_MASK; for(; len > 509 ; len-=510) { *op++ = 255; *op++ = 255; } if (len > 254) { len-=255; *op++ = 255; } *op++ = (BYTE)len; }
+ else *token += len;
+
+ // Test end of chunk
+ if (ip > mflimit) { anchor = ip; break; }
+
+ // Fill table
+ HashTable[LZ4_HASH_VALUE(ip-2)] = ip - 2 - base;
+
+ // Test next position
+ ref = base + HashTable[LZ4_HASH_VALUE(ip)];
+ HashTable[LZ4_HASH_VALUE(ip)] = ip - base;
+ if ((ref > ip - (MAX_DISTANCE + 1)) && (A32(ref) == A32(ip))) { token = op++; *token=0; goto _next_match; }
+
+ // Prepare next loop
+ anchor = ip++;
+ forwardH = LZ4_HASH_VALUE(ip);
+ }
_last_literals:
- // Encode Last Literals
- {
- int lastRun = iend - anchor;
- if ((LZ4_COMPRESSMIN>0) && (((op - (BYTE*)dest) + lastRun + 1 + ((lastRun-15)/255)) > isize - LZ4_COMPRESSMIN)) return 0;
- if (lastRun>=(int)RUN_MASK) { *op++=(RUN_MASK< 254 ; lastRun-=255) *op++ = 255; *op++ = (BYTE) lastRun; }
- else *op++ = (lastRun< (U32)maxOutputSize) return 0;
+ if (lastRun>=(int)RUN_MASK) { *op++=(RUN_MASK< 254 ; lastRun-=255) *op++ = 255; *op++ = (BYTE) lastRun; }
+ else *op++ = (lastRun<> ((MINMATCH*8)-HASHLOG64K))
#define LZ4_HASH64K_VALUE(p) LZ4_HASH64K_FUNCTION(A32(p))
-int LZ4_compress64kCtx(void** ctx,
- const char* source,
- char* dest,
- int isize)
+static inline int LZ4_compress64kCtx(void** ctx,
+ const char* source,
+ char* dest,
+ int isize,
+ int maxOutputSize)
{
#if HEAPMODE
- struct refTables *srt = (struct refTables *) (*ctx);
- U16* HashTable;
+ struct refTables *srt = (struct refTables *) (*ctx);
+ U16* HashTable;
#else
- U16 HashTable[HASH64KTABLESIZE] = {0};
+ U16 HashTable[HASH64KTABLESIZE] = {0};
#endif
- const BYTE* ip = (BYTE*) source;
- const BYTE* anchor = ip;
- const BYTE* const base = ip;
- const BYTE* const iend = ip + isize;
- const BYTE* const mflimit = iend - MFLIMIT;
+ const BYTE* ip = (BYTE*) source;
+ const BYTE* anchor = ip;
+ const BYTE* const base = ip;
+ const BYTE* const iend = ip + isize;
+ const BYTE* const mflimit = iend - MFLIMIT;
#define matchlimit (iend - LASTLITERALS)
- BYTE* op = (BYTE*) dest;
+ BYTE* op = (BYTE*) dest;
+ BYTE* const oend = op + maxOutputSize;
- int len, length;
- const int skipStrength = SKIPSTRENGTH;
- U32 forwardH;
+ int len, length;
+ const int skipStrength = SKIPSTRENGTH;
+ U32 forwardH;
- // Init
- if (isizehashTable);
- memset((void*)HashTable, 0, sizeof(srt->hashTable));
+ if (*ctx == NULL)
+ {
+ srt = (struct refTables *) malloc ( sizeof(struct refTables) );
+ *ctx = (void*) srt;
+ }
+ HashTable = (U16*)(srt->hashTable);
+ memset((void*)HashTable, 0, sizeof(srt->hashTable));
#else
- (void) ctx;
+ (void) ctx;
#endif
- // First Byte
- ip++; forwardH = LZ4_HASH64K_VALUE(ip);
+ // First Byte
+ ip++; forwardH = LZ4_HASH64K_VALUE(ip);
- // Main Loop
+ // Main Loop
for ( ; ; )
- {
- int findMatchAttempts = (1U << skipStrength) + 3;
- const BYTE* forwardIp = ip;
- const BYTE* ref;
- BYTE* token;
-
- // Find a match
- do {
- U32 h = forwardH;
- int step = findMatchAttempts++ >> skipStrength;
- ip = forwardIp;
- forwardIp = ip + step;
-
- if (forwardIp > mflimit) { goto _last_literals; }
-
- forwardH = LZ4_HASH64K_VALUE(forwardIp);
- ref = base + HashTable[h];
- HashTable[h] = ip - base;
-
- } while (A32(ref) != A32(ip));
-
- // Catch up
- while ((ip>anchor) && (ref>(BYTE*)source) && (ip[-1]==ref[-1])) { ip--; ref--; }
-
- // Encode Literal length
- length = ip - anchor;
- token = op++;
- if (length>=(int)RUN_MASK) { *token=(RUN_MASK< 254 ; len-=255) *op++ = 255; *op++ = (BYTE)len; }
- else *token = (length<> skipStrength;
+ ip = forwardIp;
+ forwardIp = ip + step;
+
+ if (forwardIp > mflimit) { goto _last_literals; }
+
+ forwardH = LZ4_HASH64K_VALUE(forwardIp);
+ ref = base + HashTable[h];
+ HashTable[h] = (U16)(ip - base);
+
+ } while (A32(ref) != A32(ip));
+
+ // Catch up
+ while ((ip>anchor) && (ref>(BYTE*)source) && (ip[-1]==ref[-1])) { ip--; ref--; }
+
+ // Encode Literal length
+ length = (int)(ip - anchor);
+ token = op++;
+ if unlikely(op + length + (2 + 1 + LASTLITERALS) + (length>>8) > oend) return 0; // Check output limit
+#ifdef _MSC_VER
+ if (length>=(int)RUN_MASK)
+ {
+ int len = length-RUN_MASK;
+ *token=(RUN_MASK<254)
+ {
+ do { *op++ = 255; len -= 255; } while (len>254);
+ *op++ = (BYTE)len;
+ memcpy(op, anchor, length);
+ op += length;
+ goto _next_match;
+ }
+ else
+ *op++ = (BYTE)len;
+ }
+ else *token = (length<=(int)RUN_MASK) { *token=(RUN_MASK< 254 ; len-=255) *op++ = 255; *op++ = (BYTE)len; }
+ else *token = (length<=(int)ML_MASK) { *token+=ML_MASK; len-=ML_MASK; for(; len > 509 ; len-=510) { *op++ = 255; *op++ = 255; } if (len > 254) { len-=255; *op++ = 255; } *op++ = (BYTE)len; }
- else *token += len;
-
- // Test end of chunk
- if (ip > mflimit) { anchor = ip; break; }
-
- // Fill table
- HashTable[LZ4_HASH64K_VALUE(ip-2)] = ip - 2 - base;
-
- // Test next position
- ref = base + HashTable[LZ4_HASH64K_VALUE(ip)];
- HashTable[LZ4_HASH64K_VALUE(ip)] = ip - base;
- if (A32(ref) == A32(ip)) { token = op++; *token=0; goto _next_match; }
-
- // Prepare next loop
- anchor = ip++;
- forwardH = LZ4_HASH64K_VALUE(ip);
- }
+ // Encode MatchLength
+ len = (int)(ip - anchor);
+ if unlikely(op + (1 + LASTLITERALS) + (len>>8) > oend) return 0; // Check output limit
+ if (len>=(int)ML_MASK) { *token+=ML_MASK; len-=ML_MASK; for(; len > 509 ; len-=510) { *op++ = 255; *op++ = 255; } if (len > 254) { len-=255; *op++ = 255; } *op++ = (BYTE)len; }
+ else *token += len;
+
+ // Test end of chunk
+ if (ip > mflimit) { anchor = ip; break; }
+
+ // Fill table
+ HashTable[LZ4_HASH64K_VALUE(ip-2)] = (U16)(ip - 2 - base);
+
+ // Test next position
+ ref = base + HashTable[LZ4_HASH64K_VALUE(ip)];
+ HashTable[LZ4_HASH64K_VALUE(ip)] = (U16)(ip - base);
+ if (A32(ref) == A32(ip)) { token = op++; *token=0; goto _next_match; }
+
+ // Prepare next loop
+ anchor = ip++;
+ forwardH = LZ4_HASH64K_VALUE(ip);
+ }
_last_literals:
- // Encode Last Literals
- {
- int lastRun = iend - anchor;
- if ((LZ4_COMPRESSMIN>0) && (((op - (BYTE*)dest) + lastRun + 1 + ((lastRun-15)/255)) > isize - LZ4_COMPRESSMIN)) return 0;
- if (lastRun>=(int)RUN_MASK) { *op++=(RUN_MASK< 254 ; lastRun-=255) *op++ = 255; *op++ = (BYTE) lastRun; }
- else *op++ = (lastRun< oend) return 0;
+ if (lastRun>=(int)RUN_MASK) { *op++=(RUN_MASK< 254 ; lastRun-=255) *op++ = 255; *op++ = (BYTE) lastRun; }
+ else *op++ = (lastRun<>ML_BITS)) == RUN_MASK) { for (;(len=*ip++)==255;length+=255){} length += len; }
-
- // copy literals
- cpy = op+length;
- if unlikely(cpy>oend-COPYLENGTH)
- {
- if (cpy > oend) goto _output_error; // Error : request to write beyond destination buffer
- memcpy(op, ip, length);
- ip += length;
- break; // Necessarily EOF
- }
- LZ4_WILDCOPY(ip, op, cpy); ip -= (op-cpy); op = cpy;
-
- // get offset
- LZ4_READ_LITTLEENDIAN_16(ref,cpy,ip); ip+=2;
- if (ref < (BYTE* const)dest) goto _output_error; // Error : offset create reference outside destination buffer
-
- // get matchlength
- if ((length=(token&ML_MASK)) == ML_MASK) { for (;*ip==255;length+=255) {ip++;} length += *ip++; }
-
- // copy repeated sequence
- if unlikely(op-ref>ML_BITS)) == RUN_MASK) { for (;(len=*ip++)==255;length+=255){} length += len; }
+
+ // copy literals
+ cpy = op+length;
+ if unlikely(cpy>oend-COPYLENGTH)
+ {
+ if (cpy != oend) goto _output_error; // Error : we must necessarily stand at EOF
+ memcpy(op, ip, length);
+ ip += length;
+ break; // EOF
+ }
+ LZ4_WILDCOPY(ip, op, cpy); ip -= (op-cpy); op = cpy;
+
+ // get offset
+ LZ4_READ_LITTLEENDIAN_16(ref,cpy,ip); ip+=2;
+ if (ref < (BYTE* const)dest) goto _output_error; // Error : offset create reference outside destination buffer
+
+ // get matchlength
+ if ((length=(token&ML_MASK)) == ML_MASK) { for (;*ip==255;length+=255) {ip++;} length += *ip++; }
+
+ // copy repeated sequence
+ if unlikely(op-refoend-COPYLENGTH)
- {
- if (cpy > oend) goto _output_error; // Error : request to write beyond destination buffer
- LZ4_SECURECOPY(ref, op, (oend-COPYLENGTH));
- while(opoend-COPYLENGTH)
+ {
+ if (cpy > oend) goto _output_error; // Error : request to write beyond destination buffer
+ LZ4_SECURECOPY(ref, op, (oend-COPYLENGTH));
+ while(op>ML_BITS)) == RUN_MASK) { int s=255; while ((ipoend-COPYLENGTH) || (ip+length>iend-COPYLENGTH))
- {
- if (cpy > oend) goto _output_error; // Error : request to write beyond destination buffer
- if (ip+length > iend) goto _output_error; // Error : request to read beyond source buffer
- memcpy(op, ip, length);
- op += length;
- ip += length;
- if (ip>ML_BITS)) == RUN_MASK) { int s=255; while ((ipoend-COPYLENGTH) || (ip+length>iend-COPYLENGTH))
+ {
+ if (cpy > oend) goto _output_error; // Error : writes beyond output buffer
+ if (ip+length != iend) goto _output_error; // Error : LZ4 format requires to consume all input at this stage
+ memcpy(op, ip, length);
+ op += length;
+ ip = iend;
+ break; // Necessarily EOF, due to parsing restrictions
+ }
+ LZ4_WILDCOPY(ip, op, cpy); ip -= (op-cpy); op = cpy;
+
+ // get offset
+ LZ4_READ_LITTLEENDIAN_16(ref,cpy,ip); ip+=2;
+ if (ref < (BYTE* const)dest) goto _output_error; // Error : offset creates reference outside of destination buffer
+
+ // get matchlength
+ if ((length=(token&ML_MASK)) == ML_MASK) { while (ipoend-COPYLENGTH)
- {
- if (cpy > oend) goto _output_error; // Error : request to write outside of destination buffer
- LZ4_SECURECOPY(ref, op, (oend-COPYLENGTH));
- while(opoend-COPYLENGTH)
+ {
+ if (cpy > oend) goto _output_error; // Error : request to write outside of destination buffer
+ LZ4_SECURECOPY(ref, op, (oend-COPYLENGTH));
+ while(op // For Visual 2005
+# if LZ4_ARCH64 // 64-bit
+# pragma intrinsic(_BitScanForward64) // For Visual 2005
+# pragma intrinsic(_BitScanReverse64) // For Visual 2005
+# else
+# pragma intrinsic(_BitScanForward) // For Visual 2005
+# pragma intrinsic(_BitScanReverse) // For Visual 2005
+# endif
#endif
#ifdef _MSC_VER // Visual Studio
-#define bswap16(x) _byteswap_ushort(x)
+#define lz4_bswap16(x) _byteswap_ushort(x)
#else
-#define bswap16(x) ((unsigned short int) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8)))
+#define lz4_bswap16(x) ((unsigned short int) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8)))
#endif
@@ -174,8 +182,8 @@
#endif
#if defined(LZ4_BIG_ENDIAN)
-#define LZ4_READ_LITTLEENDIAN_16(d,s,p) { U16 v = A16(p); v = bswap16(v); d = (s) - v; }
-#define LZ4_WRITE_LITTLEENDIAN_16(p,i) { U16 v = (U16)(i); v = bswap16(v); A16(p) = v; p+=2; }
+#define LZ4_READ_LITTLEENDIAN_16(d,s,p) { U16 v = A16(p); v = lz4_bswap16(v); d = (s) - v; }
+#define LZ4_WRITE_LITTLEENDIAN_16(p,i) { U16 v = (U16)(i); v = lz4_bswap16(v); A16(p) = v; p+=2; }
#else // Little Endian
#define LZ4_READ_LITTLEENDIAN_16(d,s,p) { d = (s) - A16(p); }
#define LZ4_WRITE_LITTLEENDIAN_16(p,v) { A16(p) = v; p+=2; }
@@ -329,7 +337,7 @@
// HC4 match finder
LZ4HC_Insert(hc4, ip);
ref = HASH_POINTER(ip);
- while ((ref > (ip-MAX_DISTANCE)) && (nbAttempts))
+ while ((ref >= (ip-MAX_DISTANCE)) && (nbAttempts))
{
nbAttempts--;
if (*(ref+ml) == *(ip+ml))
@@ -350,7 +358,7 @@
if ((ipt ml) { ml = ipt-ip; *matchpos = ref; }
+ if (ipt-ip > ml) { ml = (int)(ipt-ip); *matchpos = ref; }
}
ref = GETNEXT(ref);
}
@@ -366,13 +374,13 @@
INITBASE(base,hc4->base);
const BYTE* ref;
int nbAttempts = MAX_NB_ATTEMPTS;
- int delta = ip-startLimit;
+ int delta = (int)(ip-startLimit);
// First Match
LZ4HC_Insert(hc4, ip);
ref = HASH_POINTER(ip);
- while ((ref > ip-MAX_DISTANCE) && (ref >= hc4->base) && (nbAttempts))
+ while ((ref >= ip-MAX_DISTANCE) && (ref >= hc4->base) && (nbAttempts))
{
nbAttempts--;
if (*(startLimit + longest) == *(ref - delta + longest))
@@ -399,7 +407,7 @@
if ((ipt-startt) > longest)
{
- longest = ipt-startt;
+ longest = (int)(ipt-startt);
*matchpos = reft;
*startpos = startt;
}
@@ -417,7 +425,7 @@
BYTE* token;
// Encode Literal length
- length = *ip - *anchor;
+ length = (int)(*ip - *anchor);
token = (*op)++;
if (length>=(int)RUN_MASK) { *token=(RUN_MASK< 254 ; len-=255) *(*op)++ = 255; *(*op)++ = (BYTE)len; }
else *token = (length< OPTIMAL_ML) new_ml = OPTIMAL_ML;
- if (ip+new_ml > start2 + ml2 - MINMATCH) new_ml = start2 - ip + ml2 - MINMATCH;
- correction = new_ml - (start2 - ip);
+ if (ip+new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - ip) + ml2 - MINMATCH;
+ correction = new_ml - (int)(start2 - ip);
if (correction > 0)
{
start2 += correction;
@@ -543,8 +551,8 @@
{
int correction;
if (ml > OPTIMAL_ML) ml = OPTIMAL_ML;
- if (ip+ml > start2 + ml2 - MINMATCH) ml = start2 - ip + ml2 - MINMATCH;
- correction = ml - (start2 - ip);
+ if (ip+ml > start2 + ml2 - MINMATCH) ml = (int)(start2 - ip) + ml2 - MINMATCH;
+ correction = ml - (int)(start2 - ip);
if (correction > 0)
{
start2 += correction;
@@ -554,7 +562,7 @@
}
else
{
- ml = start2 - ip;
+ ml = (int)(start2 - ip);
}
}
// Now, encode 2 sequences
@@ -570,7 +578,7 @@
{
if (start2 < ip+ml)
{
- int correction = (ip+ml) - start2;
+ int correction = (int)(ip+ml - start2);
start2 += correction;
ref2 += correction;
ml2 -= correction;
@@ -607,8 +615,8 @@
{
int correction;
if (ml > OPTIMAL_ML) ml = OPTIMAL_ML;
- if (ip + ml > start2 + ml2 - MINMATCH) ml = start2 - ip + ml2 - MINMATCH;
- correction = ml - (start2 - ip);
+ if (ip + ml > start2 + ml2 - MINMATCH) ml = (int)(start2 - ip) + ml2 - MINMATCH;
+ correction = ml - (int)(start2 - ip);
if (correction > 0)
{
start2 += correction;
@@ -618,7 +626,7 @@
}
else
{
- ml = start2 - ip;
+ ml = (int)(start2 - ip);
}
}
LZ4_encodeSequence(&ip, &op, &anchor, ml, ref);
@@ -637,7 +645,7 @@
// Encode Last Literals
{
- int lastRun = iend - anchor;
+ int lastRun = (int)(iend - anchor);
if (lastRun>=(int)RUN_MASK) { *op++=(RUN_MASK< 254 ; lastRun-=255) *op++ = 255; *op++ = (BYTE) lastRun; }
else *op++ = (lastRun<