1
0
Fork 0

Adding upstream version 0.6.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-20 16:10:21 +01:00
parent 28866a8851
commit 3b7a859d05
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
17 changed files with 200 additions and 50 deletions

View file

@ -1,3 +1,8 @@
2009-09-02 Antonio Diaz Diaz <ant_diaz@teleline.es>
* Version 0.6 released.
* The LZ_compress_sync_flush mechanism has been fixed.
2009-07-03 Antonio Diaz Diaz <ant_diaz@teleline.es> 2009-07-03 Antonio Diaz Diaz <ant_diaz@teleline.es>
* Version 0.5 released. * Version 0.5 released.

View file

@ -1,7 +1,7 @@
Requirements Requirements
------------ ------------
You will need a C++ compiler. You will need a C++ compiler.
I use gcc 4.3.3 and 3.3.6, but the code should compile with any I use gcc 4.3.4 and 3.3.6, but the code should compile with any
standards compliant compiler. standards compliant compiler.
Gcc is available at http://gcc.gnu.org. Gcc is available at http://gcc.gnu.org.

View file

@ -34,6 +34,9 @@ $(progname)_shared : $(objs) $(libname).so.$(pkgversion)
$(progname)_profiled : $(objs) $(libname).a $(progname)_profiled : $(objs) $(libname).a
$(CXX) $(LDFLAGS) -pg -o $(progname)_profiled $(objs) $(libname).a $(CXX) $(LDFLAGS) -pg -o $(progname)_profiled $(objs) $(libname).a
lzcheck : lzcheck.o $(libname).a
$(CXX) $(LDFLAGS) -o lzcheck lzcheck.o $(libname).a
main.o : main.cc main.o : main.cc
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -DPROGVERSION=\"$(pkgversion)\" -c -o $@ $< $(CXX) $(CPPFLAGS) $(CXXFLAGS) -DPROGVERSION=\"$(pkgversion)\" -c -o $@ $<
@ -76,7 +79,7 @@ $(VPATH)/doc/$(progname).1 : $(progname)
Makefile : $(VPATH)/configure $(VPATH)/Makefile.in Makefile : $(VPATH)/configure $(VPATH)/Makefile.in
./config.status ./config.status
check : all $(VPATH)/testsuite/check.sh check : all $(VPATH)/testsuite/check.sh lzcheck
@$(VPATH)/testsuite/check.sh $(VPATH)/testsuite @$(VPATH)/testsuite/check.sh $(VPATH)/testsuite
install : all install-info install : all install-info

7
NEWS
View file

@ -1,5 +1,4 @@
Changes in version 0.5: Changes in version 0.6:
Decompression speed has been improved. The LZ_compress_sync_flush mechanism has been fixed. (Last few bytes
weren't inmediately available).
A build problem with the Sun C++ compiler has been fixed.

4
configure vendored
View file

@ -5,13 +5,13 @@
# This configure script is free software: you have unlimited permission # This configure script is free software: you have unlimited permission
# to copy, distribute and modify it. # to copy, distribute and modify it.
# #
# Date of this version: 2009-07-03 # Date of this version: 2009-09-02
invocation_name=$0 invocation_name=$0
args= args=
no_create= no_create=
pkgname=lzlib pkgname=lzlib
pkgversion=0.5 pkgversion=0.6
soversion=0 soversion=0
progname=minilzip progname=minilzip
progname_shared=${progname}_shared progname_shared=${progname}_shared

View file

@ -70,7 +70,7 @@ int Circular_buffer::read_data( uint8_t * const out_buffer, const int out_size )
} }
int Circular_buffer::write_data( uint8_t * const in_buffer, const int in_size ) throw() int Circular_buffer::write_data( const uint8_t * const in_buffer, const int in_size ) throw()
{ {
int size = 0; int size = 0;
if( put >= get ) if( put >= get )
@ -109,6 +109,7 @@ bool LZ_decoder::verify_trailer()
else error = true; else error = true;
} }
if( format_version == 0 ) trailer.member_size( member_position() ); if( format_version == 0 ) trailer.member_size( member_position() );
if( !range_decoder.code_is_zero() ) error = true;
if( trailer.data_crc() != crc() ) error = true; if( trailer.data_crc() != crc() ) error = true;
if( trailer.data_size() != data_position() ) error = true; if( trailer.data_size() != data_position() ) error = true;
if( trailer.member_size() != member_position() ) error = true; if( trailer.member_size() != member_position() ) error = true;
@ -122,6 +123,14 @@ int LZ_decoder::decode_member()
{ {
if( member_finished_ ) return 0; if( member_finished_ ) return 0;
if( !range_decoder.try_reload() ) return 0; if( !range_decoder.try_reload() ) return 0;
if( verify_trailer_pending )
{
if( range_decoder.available_bytes() < File_trailer::size( format_version ) )
return 0;
verify_trailer_pending = false;
member_finished_ = true;
if( verify_trailer() ) return 0; else return 3;
}
while( true ) while( true )
{ {
if( range_decoder.finished() ) return 2; if( range_decoder.finished() ) return 2;
@ -192,6 +201,8 @@ int LZ_decoder::decode_member()
range_decoder.normalize(); range_decoder.normalize();
if( len == min_match_len ) // End Of Stream marker if( len == min_match_len ) // End Of Stream marker
{ {
if( range_decoder.available_bytes() < File_trailer::size( format_version ) )
{ verify_trailer_pending = true; return 0; }
member_finished_ = true; member_finished_ = true;
if( verify_trailer() ) return 0; else return 3; if( verify_trailer() ) return 0; else return 3;
} }

View file

@ -27,7 +27,7 @@
class Input_buffer : public Circular_buffer class Input_buffer : public Circular_buffer
{ {
enum { min_available_bytes = 8 + sizeof( File_trailer ) }; enum { min_available_bytes = 8 };
bool at_stream_end_; bool at_stream_end_;
public: public:
@ -47,7 +47,7 @@ public:
( at_stream_end_ || used_bytes() >= min_available_bytes ) ); ( at_stream_end_ || used_bytes() >= min_available_bytes ) );
} }
int write_data( uint8_t * const in_buffer, const int in_size ) throw() int write_data( const uint8_t * const in_buffer, const int in_size ) throw()
{ {
if( at_stream_end_ || in_size <= 0 ) return 0; if( at_stream_end_ || in_size <= 0 ) return 0;
return Circular_buffer::write_data( in_buffer, in_size ); return Circular_buffer::write_data( in_buffer, in_size );
@ -75,6 +75,7 @@ public:
bool at_stream_end() const throw() { return ibuf.at_stream_end(); } bool at_stream_end() const throw() { return ibuf.at_stream_end(); }
int available_bytes() const throw() { return ibuf.used_bytes(); } int available_bytes() const throw() { return ibuf.used_bytes(); }
bool code_is_zero() const throw() { return ( code == 0 ); }
bool enough_available_bytes() const throw() bool enough_available_bytes() const throw()
{ return ibuf.enough_available_bytes(); } { return ibuf.enough_available_bytes(); }
bool finished() const throw() { return ibuf.finished(); } bool finished() const throw() { return ibuf.finished(); }
@ -233,6 +234,7 @@ class LZ_decoder : public Circular_buffer
const int dictionary_size; const int dictionary_size;
uint32_t crc_; uint32_t crc_;
bool member_finished_; bool member_finished_;
bool verify_trailer_pending;
unsigned int rep0; // rep[0-3] latest four distances unsigned int rep0; // rep[0-3] latest four distances
unsigned int rep1; // used for efficient coding of unsigned int rep1; // used for efficient coding of
unsigned int rep2; // repeated distances unsigned int rep2; // repeated distances
@ -298,6 +300,7 @@ public:
dictionary_size( header.dictionary_size() ), dictionary_size( header.dictionary_size() ),
crc_( 0xFFFFFFFF ), crc_( 0xFFFFFFFF ),
member_finished_( false ), member_finished_( false ),
verify_trailer_pending( false ),
rep0( 0 ), rep0( 0 ),
rep1( 0 ), rep1( 0 ),
rep2( 0 ), rep2( 0 ),

View file

@ -12,7 +12,7 @@ File: lzlib.info, Node: Top, Next: Introduction, Up: (dir)
Lzlib Lzlib
***** *****
This manual is for Lzlib (version 0.5, 3 July 2009). This manual is for Lzlib (version 0.6, 2 September 2009).
* Menu: * Menu:
@ -53,6 +53,12 @@ read/write functions until all the data has been processed by the
library. This interface is safer and less error prone than the library. This interface is safer and less error prone than the
traditional zlib interface. traditional zlib interface.
Compression/decompression is done when the read function is called.
This means the value returned by the position functions will not be
updated until some data is read, even if you write a lot of data. If
you want the data to be compressed in advance, just call the read
function with a SIZE equal to 0.
Lzlib will correctly decompress a data stream which is the Lzlib will correctly decompress a data stream which is the
concatenation of two or more compressed data streams. The result is the concatenation of two or more compressed data streams. The result is the
concatenation of the corresponding uncompressed data streams. Integrity concatenation of the corresponding uncompressed data streams. Integrity
@ -443,7 +449,7 @@ Example 1: Normal compression (MEMBER_SIZE > total output).
4) go back to step 2 until all input data has been written 4) go back to step 2 until all input data has been written
5) LZ_compress_finish 5) LZ_compress_finish
6) LZ_compress_read 6) LZ_compress_read
7) go back to step 6 until LZ_compress_read returns 0 7) go back to step 6 until LZ_compress_finished returns 1
8) LZ_compress_close 8) LZ_compress_close
@ -455,7 +461,7 @@ Example 2: Decompression.
4) go back to step 2 until all input data has been written 4) go back to step 2 until all input data has been written
5) LZ_decompress_finish 5) LZ_decompress_finish
6) LZ_decompress_read 6) LZ_decompress_read
7) go back to step 6 until LZ_decompress_read returns 0 7) go back to step 6 until LZ_decompress_finished returns 1
8) LZ_decompress_close 8) LZ_decompress_close
@ -469,7 +475,7 @@ Example 3: Multimember compression (MEMBER_SIZE < total output).
6) go back to step 2 until all input data has been written 6) go back to step 2 until all input data has been written
7) LZ_compress_finish 7) LZ_compress_finish
8) LZ_compress_read 8) LZ_compress_read
9) go back to step 8 until LZ_compress_read returns 0 9) go back to step 8 until LZ_compress_finished returns 1
10) LZ_compress_close 10) LZ_compress_close
 
@ -513,15 +519,15 @@ Concept Index
 
Tag Table: Tag Table:
Node: Top219 Node: Top219
Node: Introduction1010 Node: Introduction1015
Node: Library Version2477 Node: Library Version2790
Node: Buffering3122 Node: Buffering3435
Node: Compression Functions4229 Node: Compression Functions4542
Node: Decompression Functions9731 Node: Decompression Functions10044
Node: Error Codes13169 Node: Error Codes13482
Node: Data Format15105 Node: Data Format15418
Node: Examples17072 Node: Examples17385
Node: Problems18494 Node: Problems18819
Node: Concept Index19064 Node: Concept Index19389
 
End Tag Table End Tag Table

View file

@ -5,8 +5,8 @@
@finalout @finalout
@c %**end of header @c %**end of header
@set UPDATED 3 July 2009 @set UPDATED 2 September 2009
@set VERSION 0.5 @set VERSION 0.6
@dircategory Data Compression @dircategory Data Compression
@direntry @direntry
@ -69,6 +69,12 @@ read/write functions until all the data has been processed by the
library. This interface is safer and less error prone than the library. This interface is safer and less error prone than the
traditional zlib interface. traditional zlib interface.
Compression/decompression is done when the read function is called. This
means the value returned by the position functions will not be updated
until some data is read, even if you write a lot of data. If you want
the data to be compressed in advance, just call the read function with a
@var{size} equal to 0.
Lzlib will correctly decompress a data stream which is the concatenation Lzlib will correctly decompress a data stream which is the concatenation
of two or more compressed data streams. The result is the concatenation of two or more compressed data streams. The result is the concatenation
of the corresponding uncompressed data streams. Integrity testing of of the corresponding uncompressed data streams. Integrity testing of
@ -515,7 +521,7 @@ Example 1: Normal compression (@var{member_size} > total output).
4) go back to step 2 until all input data has been written 4) go back to step 2 until all input data has been written
5) LZ_compress_finish 5) LZ_compress_finish
6) LZ_compress_read 6) LZ_compress_read
7) go back to step 6 until LZ_compress_read returns 0 7) go back to step 6 until LZ_compress_finished returns 1
8) LZ_compress_close 8) LZ_compress_close
@end example @end example
@ -531,7 +537,7 @@ Example 2: Decompression.
4) go back to step 2 until all input data has been written 4) go back to step 2 until all input data has been written
5) LZ_decompress_finish 5) LZ_decompress_finish
6) LZ_decompress_read 6) LZ_decompress_read
7) go back to step 6 until LZ_decompress_read returns 0 7) go back to step 6 until LZ_decompress_finished returns 1
8) LZ_decompress_close 8) LZ_decompress_close
@end example @end example
@ -549,7 +555,7 @@ Example 3: Multimember compression (@var{member_size} < total output).
6) go back to step 2 until all input data has been written 6) go back to step 2 until all input data has been written
7) LZ_compress_finish 7) LZ_compress_finish
8) LZ_compress_read 8) LZ_compress_read
9) go back to step 8 until LZ_compress_read returns 0 9) go back to step 8 until LZ_compress_finished returns 1
10) LZ_compress_close 10) LZ_compress_close
@end example @end example

View file

@ -44,7 +44,7 @@ const Dis_slots dis_slots;
const Prob_prices prob_prices; const Prob_prices prob_prices;
int Matchfinder::write_data( uint8_t * const in_buffer, const int in_size ) throw() int Matchfinder::write_data( const uint8_t * const in_buffer, const int in_size ) throw()
{ {
if( at_stream_end_ ) return 0; if( at_stream_end_ ) return 0;
const int size = std::min( buffer_size - stream_pos, in_size ); const int size = std::min( buffer_size - stream_pos, in_size );

View file

@ -210,7 +210,7 @@ public:
return i; return i;
} }
int write_data( uint8_t * const in_buffer, const int in_size ) throw(); int write_data( const uint8_t * const in_buffer, const int in_size ) throw();
void reset() throw(); void reset() throw();
bool move_pos() throw(); bool move_pos() throw();
int longest_match_len( int * const distances = 0 ) throw(); int longest_match_len( int * const distances = 0 ) throw();
@ -417,7 +417,7 @@ class LZ_encoder
{ {
enum { dis_align_mask = dis_align_size - 1, enum { dis_align_mask = dis_align_size - 1,
infinite_price = 0x0FFFFFFF, infinite_price = 0x0FFFFFFF,
max_marker_size = 15, max_marker_size = 16,
num_rep_distances = 4 }; // must be 4 num_rep_distances = 4 }; // must be 4
struct Trial struct Trial

111
lzcheck.cc Normal file
View file

@ -0,0 +1,111 @@
/* Lzcheck - A test program for the lzlib library
Copyright (C) 2009 Antonio Diaz Diaz.
This program is free software: you have unlimited permission
to copy, distribute and modify it.
Usage is:
lzcheck filename.txt
This program reads the specified text file and then compresses it,
line by line, to test the flushing mechanism.
*/
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <stdint.h>
#include <unistd.h>
#include "lzlib.h"
#ifndef LLONG_MAX
#define LLONG_MAX 0x7FFFFFFFFFFFFFFFLL
#endif
#ifndef LLONG_MIN
#define LLONG_MIN (-LLONG_MAX - 1LL)
#endif
#ifndef ULLONG_MAX
#define ULLONG_MAX 0xFFFFFFFFFFFFFFFFULL
#endif
int main( const int argc, const char * argv[] )
{
if( argc < 2 )
{
std::fprintf( stderr, "Usage: lzcheck filename.txt\n" );
return 1;
}
FILE *f = std::fopen( argv[1], "rb" );
if( !f )
{
std::fprintf( stderr, "Can't open file `%s' for reading\n", argv[1] );
return 1;
}
const int in_buffer_size = 1 << 20;
const int mid_buffer_size = 65536;
const int out_buffer_size = in_buffer_size;
uint8_t in_buffer[in_buffer_size];
uint8_t mid_buffer[mid_buffer_size];
uint8_t out_buffer[out_buffer_size];
const int in_size = std::fread( in_buffer, 1, in_buffer_size, f );
if( in_size >= in_buffer_size )
{
std::fprintf( stderr, "input file `%s' too big.\n", argv[1] );
return 1;
}
std::fclose( f );
const int dictionary_size = in_buffer_size;
const int match_len_limit = 80;
const long long member_size = LLONG_MAX;
void * encoder = LZ_compress_open( dictionary_size, match_len_limit,
member_size );
if( !encoder || LZ_compress_errno( encoder ) != LZ_ok )
{
const bool mem_error = ( LZ_compress_errno( encoder ) == LZ_mem_error );
LZ_compress_close( encoder );
if( mem_error )
{
std::fprintf( stderr, "not enough memory.\n" );
return 1;
}
std::fprintf( stderr, "internal error: invalid argument to encoder.\n" );
return 3;
}
void * decoder = LZ_decompress_open();
if( !decoder || LZ_decompress_errno( decoder ) != LZ_ok )
{
LZ_decompress_close( decoder );
std::fprintf( stderr, "not enough memory.\n" );
return 1;
}
for( int l = 0, r = 0; r < in_size; l = r )
{
while( ++r < in_size && in_buffer[r-1] != '\n' ) ;
LZ_compress_write( encoder, in_buffer + l, r - l );
LZ_compress_sync_flush( encoder );
int mid_size = LZ_compress_read( encoder, mid_buffer, mid_buffer_size );
LZ_decompress_write( decoder, mid_buffer, mid_size );
int out_size = LZ_decompress_read( decoder, out_buffer, out_buffer_size );
if( out_size != r - l || std::memcmp( in_buffer + l, out_buffer, out_size ) )
{
std::printf( "sync error at pos %d. in_size = %d, out_size = %d\n",
l, r - l, out_size );
for( int i = l; i < r; ++i ) std::putchar( in_buffer[i] );
if( in_buffer[r-1] != '\n' ) std::putchar( '\n' );
for( int i = 0; i < out_size; ++i ) std::putchar( out_buffer[i] );
std::putchar( '\n' );
}
}
LZ_decompress_close( decoder );
LZ_compress_close( encoder );
return 0;
}

2
lzip.h
View file

@ -277,5 +277,5 @@ public:
} }
int read_data( uint8_t * const out_buffer, const int out_size ) throw(); int read_data( uint8_t * const out_buffer, const int out_size ) throw();
int write_data( uint8_t * const in_buffer, const int in_size ) throw(); int write_data( const uint8_t * const in_buffer, const int in_size ) throw();
}; };

View file

@ -45,7 +45,7 @@ struct Encoder
Matchfinder * matchfinder; Matchfinder * matchfinder;
LZ_encoder * lz_encoder; LZ_encoder * lz_encoder;
LZ_errno lz_errno; LZ_errno lz_errno;
bool flush_pending; int flush_pending;
const File_header member_header; const File_header member_header;
Encoder( const File_header & header ) throw() Encoder( const File_header & header ) throw()
@ -55,7 +55,7 @@ struct Encoder
matchfinder( 0 ), matchfinder( 0 ),
lz_encoder( 0 ), lz_encoder( 0 ),
lz_errno( LZ_ok ), lz_errno( LZ_ok ),
flush_pending( false ), flush_pending( 0 ),
member_header( header ) member_header( header )
{} {}
}; };
@ -180,7 +180,7 @@ int LZ_compress_finish( void * const encoder )
if( !verify_encoder( encoder ) ) return -1; if( !verify_encoder( encoder ) ) return -1;
Encoder & e = *(Encoder *)encoder; Encoder & e = *(Encoder *)encoder;
e.matchfinder->flushing( true ); e.matchfinder->flushing( true );
e.flush_pending = false; e.flush_pending = 0;
return 0; return 0;
} }
@ -191,12 +191,12 @@ int LZ_compress_sync_flush( void * const encoder )
Encoder & e = *(Encoder *)encoder; Encoder & e = *(Encoder *)encoder;
if( !e.flush_pending && !e.matchfinder->at_stream_end() ) if( !e.flush_pending && !e.matchfinder->at_stream_end() )
{ {
e.flush_pending = true; e.flush_pending = 2; // 2 consecutive markers guarantee decoding
e.matchfinder->flushing( true ); e.matchfinder->flushing( true );
if( !e.lz_encoder->encode_member( false ) ) if( !e.lz_encoder->encode_member( false ) )
{ e.lz_errno = LZ_library_error; return -1; } { e.lz_errno = LZ_library_error; return -1; }
if( e.lz_encoder->sync_flush() ) while( e.flush_pending > 0 && e.lz_encoder->sync_flush() )
{ e.matchfinder->flushing( false ); e.flush_pending = false; } { if( --e.flush_pending <= 0 ) e.matchfinder->flushing( false ); }
} }
return 0; return 0;
} }
@ -209,13 +209,13 @@ int LZ_compress_read( void * const encoder, uint8_t * const buffer,
Encoder & e = *(Encoder *)encoder; Encoder & e = *(Encoder *)encoder;
if( !e.lz_encoder->encode_member( !e.flush_pending ) ) if( !e.lz_encoder->encode_member( !e.flush_pending ) )
{ e.lz_errno = LZ_library_error; return -1; } { e.lz_errno = LZ_library_error; return -1; }
if( e.flush_pending && e.lz_encoder->sync_flush() ) while( e.flush_pending > 0 && e.lz_encoder->sync_flush() )
{ e.matchfinder->flushing( false ); e.flush_pending = false; } { if( --e.flush_pending <= 0 ) e.matchfinder->flushing( false ); }
return e.lz_encoder->read_data( buffer, size ); return e.lz_encoder->read_data( buffer, size );
} }
int LZ_compress_write( void * const encoder, uint8_t * const buffer, int LZ_compress_write( void * const encoder, const uint8_t * const buffer,
const int size ) const int size )
{ {
if( !verify_encoder( encoder ) ) return -1; if( !verify_encoder( encoder ) ) return -1;
@ -370,7 +370,7 @@ int LZ_decompress_read( void * const decoder, uint8_t * const buffer,
} }
int LZ_decompress_write( void * const decoder, uint8_t * const buffer, int LZ_decompress_write( void * const decoder, const uint8_t * const buffer,
const int size ) const int size )
{ {
if( !verify_decoder( decoder ) ) return -1; if( !verify_decoder( decoder ) ) return -1;

View file

@ -29,7 +29,7 @@
extern "C" { extern "C" {
#endif #endif
const char * const LZ_version_string = "0.5"; const char * const LZ_version_string = "0.6";
enum { min_dictionary_bits = 12, enum { min_dictionary_bits = 12,
min_dictionary_size = 1 << min_dictionary_bits, min_dictionary_size = 1 << min_dictionary_bits,
@ -54,7 +54,7 @@ int LZ_compress_sync_flush( void * const encoder );
int LZ_compress_read( void * const encoder, uint8_t * const buffer, int LZ_compress_read( void * const encoder, uint8_t * const buffer,
const int size ); const int size );
int LZ_compress_write( void * const encoder, uint8_t * const buffer, int LZ_compress_write( void * const encoder, const uint8_t * const buffer,
const int size ); const int size );
int LZ_compress_write_size( void * const encoder ); int LZ_compress_write_size( void * const encoder );
@ -74,7 +74,7 @@ int LZ_decompress_finish( void * const decoder );
int LZ_decompress_read( void * const decoder, uint8_t * const buffer, int LZ_decompress_read( void * const decoder, uint8_t * const buffer,
const int size ); const int size );
int LZ_decompress_write( void * const decoder, uint8_t * const buffer, int LZ_decompress_write( void * const decoder, const uint8_t * const buffer,
const int size ); const int size );
enum LZ_errno LZ_decompress_errno( void * const decoder ); enum LZ_errno LZ_decompress_errno( void * const decoder );

View file

@ -26,6 +26,7 @@
#include <algorithm> #include <algorithm>
#include <cerrno> #include <cerrno>
#include <climits> #include <climits>
#include <csignal>
#include <cstdio> #include <cstdio>
#include <cstdlib> #include <cstdlib>
#include <cstring> #include <cstring>
@ -33,7 +34,6 @@
#include <vector> #include <vector>
#include <fcntl.h> #include <fcntl.h>
#include <stdint.h> #include <stdint.h>
#include <signal.h>
#include <unistd.h> #include <unistd.h>
#include <utime.h> #include <utime.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -462,6 +462,8 @@ int compress( const long long member_size, const long long volume_size,
if( in_size == 0 ) LZ_compress_finish( encoder ); if( in_size == 0 ) LZ_compress_finish( encoder );
else if( in_size != LZ_compress_write( encoder, in_buffer, in_size ) ) else if( in_size != LZ_compress_write( encoder, in_buffer, in_size ) )
internal_error( "library error" ); internal_error( "library error" );
// for( int i = 0; i < 10000; ++i )
// LZ_compress_sync_flush( encoder );
} }
int out_size = LZ_compress_read( encoder, out_buffer, out_buffer_size ); int out_size = LZ_compress_read( encoder, out_buffer, out_buffer_size );
// std::fprintf( stderr, "%6d in_size, %5d out_size.\n", in_size, out_size ); // std::fprintf( stderr, "%6d in_size, %5d out_size.\n", in_size, out_size );

View file

@ -10,6 +10,7 @@ export LC_ALL
objdir=`pwd` objdir=`pwd`
testdir=`cd "$1" ; pwd` testdir=`cd "$1" ; pwd`
LZIP="${objdir}"/minilzip LZIP="${objdir}"/minilzip
LZCHECK="${objdir}"/lzcheck
framework_failure() { echo 'failure in testing framework'; exit 1; } framework_failure() { echo 'failure in testing framework'; exit 1; }
if [ ! -x "${LZIP}" ] ; then if [ ! -x "${LZIP}" ] ; then
@ -59,10 +60,13 @@ for i in s4096 1 2 3 4 5 6 7 8 9; do
echo -n . echo -n .
done done
"${LZCHECK}" in || fail=1
echo -n .
echo echo
if test ${fail} = 0; then if [ ${fail} = 0 ]; then
echo "tests completed successfully." echo "tests completed successfully."
if cd "${objdir}" ; then rm -r tmp ; fi cd "${objdir}" && rm -r tmp
else else
echo "tests failed." echo "tests failed."
fi fi