1
0
Fork 0

Merging upstream version 1.2.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-23 19:14:00 +01:00
parent 8cc9aad6e4
commit 059f7c93d5
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
10 changed files with 124 additions and 128 deletions

View file

@ -1,3 +1,8 @@
2011-01-05 Antonio Diaz Diaz <ant_diaz@teleline.es>
* Version 1.2 released.
* Code cleanup. Minor fixes.
2010-08-19 Antonio Diaz Diaz <ant_diaz@teleline.es> 2010-08-19 Antonio Diaz Diaz <ant_diaz@teleline.es>
* Version 1.1 released. * Version 1.1 released.
@ -6,7 +11,7 @@
reduced to extend range of use towards gzip. Lower numbers now reduced to extend range of use towards gzip. Lower numbers now
compress less but faster. (-1 now takes 43% less time for only compress less but faster. (-1 now takes 43% less time for only
20% larger compressed size). 20% larger compressed size).
* Code has been converted to "C89 + long long" from C99. * Code has been converted to `C89 + long long' from C99.
2010-04-05 Antonio Diaz Diaz <ant_diaz@teleline.es> 2010-04-05 Antonio Diaz Diaz <ant_diaz@teleline.es>
@ -15,8 +20,8 @@
* Using LZMA SDK 9.10 (public domain) from Igor Pavlov. * Using LZMA SDK 9.10 (public domain) from Igor Pavlov.
Copyright (C) 2010 Antonio Diaz Diaz. Copyright (C) 2010, 2011 Antonio Diaz Diaz.
This file is a collection of facts, and thus it is not copyrightable, This file is a collection of facts, and thus it is not copyrightable,
but just in case, I give you unlimited permission to copy, distribute but just in case, you have unlimited permission to copy, distribute and
and modify it. modify it.

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.4 and 3.3.6, but the code should compile with any I use gcc 4.3.5 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.
@ -50,7 +50,7 @@ After running `configure', you can run `make' and `make install' as
explained above. explained above.
Copyright (C) 2010 Antonio Diaz Diaz. Copyright (C) 2010, 2011 Antonio Diaz Diaz.
This file is free documentation: you have unlimited permission to copy, This file is free documentation: you have unlimited permission to copy,
distribute and modify it. distribute and modify it.

View file

@ -17,10 +17,10 @@ objs = 7zFile.o 7zStream.o Alloc.o LzFind.o LzmaDec.o LzmaEnc.o \
all : $(progname) all : $(progname)
$(progname) : $(objs) $(progname) : $(objs)
$(CC) $(LDFLAGS) -o $(progname) $(objs) $(CC) $(LDFLAGS) -o $@ $^
$(progname)_profiled : $(objs) $(progname)_profiled : $(objs)
$(CC) $(LDFLAGS) -pg -o $(progname)_profiled $(objs) $(CC) $(LDFLAGS) -pg -o $@ $^
main.o : main.c main.o : main.c
$(CC) $(CPPFLAGS) $(CFLAGS) -DPROGVERSION=\"$(pkgversion)\" -c -o $@ $< $(CC) $(CPPFLAGS) $(CFLAGS) -DPROGVERSION=\"$(pkgversion)\" -c -o $@ $<
@ -49,14 +49,14 @@ $(VPATH)/doc/$(pkgname).info : $(VPATH)/doc/$(pkgname).texinfo
man : $(VPATH)/doc/$(progname).1 man : $(VPATH)/doc/$(progname).1
$(VPATH)/doc/$(progname).1 : $(progname) $(VPATH)/doc/$(progname).1 : $(progname)
help2man -n 'data compressor based on the LZMA algorithm' \ help2man -n 'reduces the size of files' \
-o $(VPATH)/doc/$(progname).1 --no-info ./$(progname) -o $@ --no-info ./$(progname)
Makefile : $(VPATH)/configure $(VPATH)/Makefile.in Makefile : $(VPATH)/configure $(VPATH)/Makefile.in
./config.status ./config.status
check : all check : all
@$(VPATH)/testsuite/check.sh $(VPATH)/testsuite @$(VPATH)/testsuite/check.sh $(VPATH)/testsuite $(pkgversion)
install : all install-man install : all install-man
if [ ! -d "$(DESTDIR)$(bindir)" ] ; then $(INSTALL_DIR) "$(DESTDIR)$(bindir)" ; fi if [ ! -d "$(DESTDIR)$(bindir)" ] ; then $(INSTALL_DIR) "$(DESTDIR)$(bindir)" ; fi

16
NEWS
View file

@ -1,15 +1,3 @@
Changes in version 1.1: Changes in version 1.2:
Support for decompression of lzma-alone (.lzma) files has been added. Code cleanup. Minor fixes.
Match length limit set by options -1 to -8 has been reduced to extend
range of use towards gzip. Lower numbers now compress less but faster.
(-1 now takes 43% less time for only 20% larger compressed size).
(Note that the bidimensional parameter space of LZMA can't be mapped to
a linear scale optimal for all files. If your files are large, very
repetitive, etc, you may need to use the --match-length and
--dictionary-size options directly to achieve optimal performance).
Code has been converted to "C89 + long long". A C99 compiler is no more
needed.

10
README
View file

@ -9,18 +9,18 @@ and data archiving.
Pdlzip is also able to decompress legacy lzma-alone (.lzma) files. Pdlzip is also able to decompress legacy lzma-alone (.lzma) files.
Pdlzip is a public domain version of the lzip data compressor, intended Pdlzip is a public domain version of the lzip data compressor, intended
for those who can't (or do not want) distribute GPL licensed Free for those who can't distribute GPL licensed Free Software. Pdlzip is
Software. Pdlzip is written in C. written in C.
Pdlzip uses public domain compression code from the LZMA SDK written by Pdlzip uses public domain compression code from the LZMA SDK written by
Igor Pavlov. Igor Pavlov.
Copyright (C) 2010 Antonio Diaz Diaz. Copyright (C) 2010, 2011 Antonio Diaz Diaz.
This file is free documentation: you have unlimited permission to copy, This file is free documentation: you have unlimited permission to copy,
distribute and modify it. distribute and modify it.
The file Makefile.in is a data file used by configure to produce the The file Makefile.in is a data file used by configure to produce the
Makefile. It has the same copyright owner and permissions that this Makefile. It has the same copyright owner and permissions that configure
file. itself.

14
configure vendored
View file

@ -1,16 +1,16 @@
#! /bin/sh #! /bin/sh
# configure script for Pdlzip - A data compressor based on the LZMA algorithm # configure script for Pdlzip - Data compressor based on the LZMA algorithm
# Copyright (C) 2010 Antonio Diaz Diaz. # Copyright (C) 2010, 2011 Antonio Diaz Diaz.
# #
# 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: 2010-08-19 # Date of this version: 2011-01-05
args= args=
no_create= no_create=
pkgname=pdlzip pkgname=pdlzip
pkgversion=1.1 pkgversion=1.2
progname=pdlzip progname=pdlzip
srctrigger=pdlzip.h srctrigger=pdlzip.h
@ -80,7 +80,7 @@ while [ -n "$1" ] ; do
bindir=`echo ${optarg} | sed -e 's,/$,,'` ;; bindir=`echo ${optarg} | sed -e 's,/$,,'` ;;
--datadir* | --da*) --datadir* | --da*)
datadir=`echo ${optarg} | sed -e 's,/$,,'` ;; datadir=`echo ${optarg} | sed -e 's,/$,,'` ;;
--infodir* | --in*) --infodir* | --inf*)
infodir=`echo ${optarg} | sed -e 's,/$,,'` ;; infodir=`echo ${optarg} | sed -e 's,/$,,'` ;;
--mandir* | --ma*) --mandir* | --ma*)
mandir=`echo ${optarg} | sed -e 's,/$,,'` ;; mandir=`echo ${optarg} | sed -e 's,/$,,'` ;;
@ -166,8 +166,8 @@ echo "CFLAGS = ${CFLAGS}"
echo "LDFLAGS = ${LDFLAGS}" echo "LDFLAGS = ${LDFLAGS}"
rm -f Makefile rm -f Makefile
cat > Makefile << EOF cat > Makefile << EOF
# Makefile for Pdlzip - A data compressor based on the LZMA algorithm # Makefile for Pdlzip - Data compressor based on the LZMA algorithm
# Copyright (C) 2010 Antonio Diaz Diaz. # Copyright (C) 2010, 2011 Antonio Diaz Diaz.
# This file was generated automatically by configure. Do not edit. # This file was generated automatically by configure. Do not edit.
# #
# This Makefile is free software: you have unlimited permission # This Makefile is free software: you have unlimited permission

View file

@ -1,13 +1,13 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.37.1. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.37.1.
.TH PDLZIP "1" "August 2010" "Pdlzip 1.1" "User Commands" .TH PDLZIP "1" "January 2011" "Pdlzip 1.2" "User Commands"
.SH NAME .SH NAME
Pdlzip \- data compressor based on the LZMA algorithm Pdlzip \- reduces the size of files
.SH SYNOPSIS .SH SYNOPSIS
.B pdlzip .B pdlzip
[\fIoptions\fR] [\fIfile\fR] [\fIoptions\fR] [\fIfile\fR]
.SH DESCRIPTION .SH DESCRIPTION
Pdlzip \- A "public domain" version of the lzip data compressor Pdlzip \- A "public domain" version of the lzip data compressor
able to decompress legacy lzma\-alone (.lzma) files. also able to decompress legacy lzma\-alone (.lzma) files.
.SH OPTIONS .SH OPTIONS
.TP .TP
\fB\-h\fR, \fB\-\-help\fR \fB\-h\fR, \fB\-\-help\fR
@ -52,8 +52,10 @@ Numbers may be followed by a multiplier: k = kB = 10^3 = 1000,
Ki = KiB = 2^10 = 1024, M = 10^6, Mi = 2^20, G = 10^9, Gi = 2^30, etc... Ki = KiB = 2^10 = 1024, M = 10^6, Mi = 2^20, G = 10^9, Gi = 2^30, etc...
.SH "REPORTING BUGS" .SH "REPORTING BUGS"
Report bugs to lzip\-bug@nongnu.org Report bugs to lzip\-bug@nongnu.org
.br
Pdlzip home page: http://www.nongnu.org/lzip/pdlzip.html
.SH COPYRIGHT .SH COPYRIGHT
Copyright \(co 2010 Antonio Diaz Diaz. Copyright \(co 2011 Antonio Diaz Diaz.
Public Domain 2009 Igor Pavlov. Public Domain 2009 Igor Pavlov.
.br .br
This is free software: you are free to change and redistribute it. This is free software: you are free to change and redistribute it.

60
main.c
View file

@ -1,6 +1,6 @@
/* Pdlzip - A data compressor based on the LZMA algorithm /* Pdlzip - Data compressor based on the LZMA algorithm
2009-08-14 : Igor Pavlov : Public domain 2009-08-14 : Igor Pavlov : Public domain
Copyright (C) 2010 Antonio Diaz Diaz. Copyright (C) 2010, 2011 Antonio Diaz Diaz.
This program is free software: you have unlimited permission This program is free software: you have unlimited permission
to copy, distribute and modify it. to copy, distribute and modify it.
@ -48,10 +48,10 @@ static void *SzAlloc(void *p, size_t size) { p = p; return MyAlloc(size); }
static void SzFree(void *p, void *address) { p = p; MyFree(address); } static void SzFree(void *p, void *address) { p = p; MyFree(address); }
static ISzAlloc g_Alloc = { SzAlloc, SzFree }; static ISzAlloc g_Alloc = { SzAlloc, SzFree };
const char * invocation_name = 0;
const char * const Program_name = "Pdlzip"; const char * const Program_name = "Pdlzip";
const char * const program_name = "pdlzip"; const char * const program_name = "pdlzip";
const char * const program_year = "2010"; const char * const program_year = "2011";
const char * invocation_name = 0;
struct { const char * from; const char * to; } const known_extensions[] = { struct { const char * from; const char * to; } const known_extensions[] = {
@ -66,7 +66,7 @@ struct Lzma_options
int match_len_limit; /* 5..273 */ int match_len_limit; /* 5..273 */
}; };
enum Mode { m_compress = 0, m_decompress, m_test }; enum Mode { m_compress, m_decompress, m_test };
char * output_filename = 0; char * output_filename = 0;
@ -82,7 +82,7 @@ inline void * resize_buffer( void * buf, const int min_size )
static void show_help() static void show_help()
{ {
printf( "%s - A \"public domain\" version of the lzip data compressor\n", Program_name ); printf( "%s - A \"public domain\" version of the lzip data compressor\n", Program_name );
printf( "able to decompress legacy lzma-alone (.lzma) files.\n" ); printf( "also able to decompress legacy lzma-alone (.lzma) files.\n" );
printf( "\nUsage: %s [options] [file]\n", invocation_name ); printf( "\nUsage: %s [options] [file]\n", invocation_name );
printf( "\nOptions:\n" ); printf( "\nOptions:\n" );
printf( " -h, --help display this help and exit\n" ); printf( " -h, --help display this help and exit\n" );
@ -104,7 +104,7 @@ static void show_help()
printf( "Numbers may be followed by a multiplier: k = kB = 10^3 = 1000,\n" ); printf( "Numbers may be followed by a multiplier: k = kB = 10^3 = 1000,\n" );
printf( "Ki = KiB = 2^10 = 1024, M = 10^6, Mi = 2^20, G = 10^9, Gi = 2^30, etc...\n" ); printf( "Ki = KiB = 2^10 = 1024, M = 10^6, Mi = 2^20, G = 10^9, Gi = 2^30, etc...\n" );
printf( "\nReport bugs to lzip-bug@nongnu.org\n" ); printf( "\nReport bugs to lzip-bug@nongnu.org\n" );
/* printf( "Pdlzip home page: http://www.nongnu.org/lzip/pdlzip.html\n" ); */ printf( "Pdlzip home page: http://www.nongnu.org/lzip/pdlzip.html\n" );
} }
@ -118,34 +118,24 @@ static void show_version()
} }
static const char * format_num( long long num, long long limit, static const char * format_num( long long num )
const int set_prefix )
{ {
const char * const si_prefix[8] = const char * const prefix[8] =
{ "k", "M", "G", "T", "P", "E", "Z", "Y" };
const char * const binary_prefix[8] =
{ "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi" }; { "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi" };
static bool si = false; enum { buf_size = 16, factor = 1024 };
static char buf[16]; static char buf[buf_size];
if( set_prefix ) si = ( set_prefix > 0 );
{
const int factor = ( si ) ? 1000 : 1024;
const char * const *prefix = ( si ) ? si_prefix : binary_prefix;
const char *p = ""; const char *p = "";
int i; int i;
limit = max( 999LL, min( 999999LL, limit ) );
for( i = 0; i < 8 && ( llabs( num ) > limit || for( i = 0; i < 8 && ( llabs( num ) > 9999 ||
( llabs( num ) >= factor && num % factor == 0 ) ); ++i ) ( llabs( num ) >= factor && num % factor == 0 ) ); ++i )
{ num /= factor; p = prefix[i]; } { num /= factor; p = prefix[i]; }
snprintf( buf, sizeof buf, "%lld %s", num, p ); snprintf( buf, buf_size, "%lld %s", num, p );
}
return buf; return buf;
} }
static long long getnum( const char * const ptr, const int bs, static long long getnum( const char * const ptr,
const long long llimit, const long long ulimit ) const long long llimit, const long long ulimit )
{ {
long long result; long long result;
@ -167,9 +157,6 @@ static long long getnum( const char * const ptr, const int bs,
switch( tail[0] ) switch( tail[0] )
{ {
case ' ': break; case ' ': break;
case 'b': if( bs > 0 ) { factor = bs; exponent = 1; }
else bad_multiplier = true;
break;
case 'Y': exponent = 8; break; case 'Y': exponent = 8; break;
case 'Z': exponent = 7; break; case 'Z': exponent = 7; break;
case 'E': exponent = 6; break; case 'E': exponent = 6; break;
@ -211,7 +198,7 @@ static int get_dict_size( const char * const arg )
if( bits >= min_dictionary_bits && if( bits >= min_dictionary_bits &&
bits <= max_dictionary_bits && *tail == 0 ) bits <= max_dictionary_bits && *tail == 0 )
return ( 1 << bits ); return ( 1 << bits );
return getnum( arg, 0, min_dictionary_size, max_dictionary_size ); return getnum( arg, min_dictionary_size, max_dictionary_size );
} }
@ -297,7 +284,7 @@ static int lzma_Decode2( UInt64 unpackSize, CLzmaDec *state,
{ show_error( "Data error.", 0, false ); return 1; } { show_error( "Data error.", 0, false ); return 1; }
if( verbosity >= 2 ) if( verbosity >= 2 )
fprintf( stderr, "lzma-alone, dictionary size %7sB. ", fprintf( stderr, "lzma-alone, dictionary size %7sB. ",
format_num( state->prop.dicSize, 9999, 0 ) ); format_num( state->prop.dicSize ) );
if( verbosity >= 3 ) if( verbosity >= 3 )
fprintf( stderr, "uncompressed size %9lld, compressed size %8lld. ", fprintf( stderr, "uncompressed size %9lld, compressed size %8lld. ",
total_out, total_in ); total_out, total_in );
@ -365,7 +352,8 @@ static int Decode2( CLzmaDec *state, ISeqOutStream *outStream,
error = true; error = true;
if( verbosity >= 0 ) if( verbosity >= 0 )
fprintf( stderr, "trailer truncated at trailer position %u;" fprintf( stderr, "trailer truncated at trailer position %u;"
" some checks may fail.\n", (unsigned int)(*inSize - *inPos) ); " some checks may fail.\n",
(unsigned int)(*inSize - *inPos) );
for( i = *inSize - *inPos; i < trailer_size; ++i ) for( i = *inSize - *inPos; i < trailer_size; ++i )
inBuf[*inPos+i] = 0; inBuf[*inPos+i] = 0;
} }
@ -474,7 +462,7 @@ static int Decode( ISeqOutStream *outStream, ISeqInStream *inStream,
if( verbosity >= 2 ) if( verbosity >= 2 )
fprintf( stderr, "version %d, dictionary size %7sB. ", fprintf( stderr, "version %d, dictionary size %7sB. ",
Fh_version( header ), Fh_version( header ),
format_num( Fh_get_dictionary_size( header ), 9999, 0 ) ); format_num( Fh_get_dictionary_size( header ) ) );
props[0] = 93; /* (45 * 2) + (9 * 0) + 3 */ props[0] = 93; /* (45 * 2) + (9 * 0) + 3 */
ds = Fh_get_dictionary_size( header ); ds = Fh_get_dictionary_size( header );
@ -549,13 +537,15 @@ void show_error( const char * const msg, const int errcode, const bool help )
fprintf( stderr, "\n" ); fprintf( stderr, "\n" );
} }
if( help && invocation_name && invocation_name[0] ) if( help && invocation_name && invocation_name[0] )
fprintf( stderr, "Try `%s --help' for more information.\n", invocation_name ); fprintf( stderr, "Try `%s --help' for more information.\n",
invocation_name );
} }
} }
void internal_error( const char * const msg ) void internal_error( const char * const msg )
{ {
if( verbosity >= 0 )
fprintf( stderr, "%s: internal error: %s.\n", program_name, msg ); fprintf( stderr, "%s: internal error: %s.\n", program_name, msg );
exit( 3 ); exit( 3 );
} }
@ -618,7 +608,7 @@ int main( const int argc, const char * const argv[] )
to the corresponding LZMA compression modes. */ to the corresponding LZMA compression modes. */
const struct Lzma_options option_mapping[] = const struct Lzma_options option_mapping[] =
{ {
{ 1 << 16, 5 }, /* -0 */ { 1 << 20, 5 }, /* -0 */
{ 1 << 20, 5 }, /* -1 */ { 1 << 20, 5 }, /* -1 */
{ 3 << 19, 6 }, /* -2 */ { 3 << 19, 6 }, /* -2 */
{ 1 << 21, 8 }, /* -3 */ { 1 << 21, 8 }, /* -3 */
@ -697,7 +687,7 @@ int main( const int argc, const char * const argv[] )
case 'h': show_help(); return 0; case 'h': show_help(); return 0;
case 'k': keep_input_files = true; break; case 'k': keep_input_files = true; break;
case 'm': encoder_options.match_len_limit = case 'm': encoder_options.match_len_limit =
getnum( arg, 0, min_match_len_limit, max_match_len ); break; getnum( arg, min_match_len_limit, max_match_len ); break;
case 'q': verbosity = -1; break; case 'q': verbosity = -1; break;
case 's': encoder_options.dictionary_size = get_dict_size( arg ); case 's': encoder_options.dictionary_size = get_dict_size( arg );
break; break;
@ -707,7 +697,7 @@ int main( const int argc, const char * const argv[] )
case 'V': show_version(); return 0; case 'V': show_version(); return 0;
default : internal_error( "uncaught option" ); default : internal_error( "uncaught option" );
} }
} } /* end process options */
if( ap_arguments( &parser ) > argind && if( ap_arguments( &parser ) > argind &&
strcmp( ap_argument( &parser, argind ), "-" ) ) strcmp( ap_argument( &parser, argind ), "-" ) )

View file

@ -1,5 +1,5 @@
/* Pdlzip - A data compressor based on the LZMA algorithm /* Pdlzip - Data compressor based on the LZMA algorithm
Copyright (C) 2010 Antonio Diaz Diaz. Copyright (C) 2010, 2011 Antonio Diaz Diaz.
This program is free software: you have unlimited permission This program is free software: you have unlimited permission
to copy, distribute and modify it. to copy, distribute and modify it.
@ -69,31 +69,7 @@ static inline void CRC32_update_buf( uint32_t * crc, const uint8_t * const buffe
} }
static const uint8_t magic_string[4] = { 'L', 'Z', 'I', 'P' }; static inline int real_bits( const int value )
typedef uint8_t File_header[6]; /* 0-3 magic bytes */
/* 4 version */
/* 5 coded_dict_size */
enum { Fh_size = 6 };
static inline void Fh_set_magic( File_header header )
{
memcpy( header, magic_string, 4 );
header[4] = 1;
}
static inline bool Fh_verify_magic( const File_header header )
{
return ( memcmp( header, magic_string, 4 ) == 0 );
}
static inline uint8_t Fh_version( const File_header header )
{ return header[4]; }
static inline bool Fh_verify_version( const File_header header )
{ return ( header[4] <= 1 ); }
static inline int Fh_real_bits( const int value )
{ {
int bits = 0, i, mask; int bits = 0, i, mask;
for( i = 1, mask = 1; mask > 0; ++i, mask <<= 1 ) for( i = 1, mask = 1; mask > 0; ++i, mask <<= 1 )
@ -101,27 +77,52 @@ static inline int Fh_real_bits( const int value )
return bits; return bits;
} }
static inline int Fh_get_dictionary_size( const File_header header )
static const uint8_t magic_string[4] = { 'L', 'Z', 'I', 'P' };
typedef uint8_t File_header[6]; /* 0-3 magic bytes */
/* 4 version */
/* 5 coded_dict_size */
enum { Fh_size = 6 };
static inline void Fh_set_magic( File_header data )
{ {
int sz = ( 1 << ( header[5] & 0x1F ) ); memcpy( data, magic_string, 4 );
data[4] = 1;
}
static inline bool Fh_verify_magic( const File_header data )
{
return ( memcmp( data, magic_string, 4 ) == 0 );
}
static inline uint8_t Fh_version( const File_header data )
{ return data[4]; }
static inline bool Fh_verify_version( const File_header data )
{ return ( data[4] <= 1 ); }
static inline int Fh_get_dictionary_size( const File_header data )
{
int sz = ( 1 << ( data[5] & 0x1F ) );
if( sz > min_dictionary_size && sz <= max_dictionary_size ) if( sz > min_dictionary_size && sz <= max_dictionary_size )
sz -= ( sz / 16 ) * ( ( header[5] >> 5 ) & 0x07 ); sz -= ( sz / 16 ) * ( ( data[5] >> 5 ) & 0x07 );
return sz; return sz;
} }
static inline bool Fh_set_dictionary_size( File_header header, const int sz ) static inline bool Fh_set_dictionary_size( File_header data, const int sz )
{ {
if( sz >= min_dictionary_size && sz <= max_dictionary_size ) if( sz >= min_dictionary_size && sz <= max_dictionary_size )
{ {
header[5] = Fh_real_bits( sz - 1 ); data[5] = real_bits( sz - 1 );
if( sz > min_dictionary_size ) if( sz > min_dictionary_size )
{ {
const int base_size = 1 << header[5]; const int base_size = 1 << data[5];
const int wedge = base_size / 16; const int wedge = base_size / 16;
int i; int i;
for( i = 7; i >= 1; --i ) for( i = 7; i >= 1; --i )
if( base_size - ( i * wedge ) >= sz ) if( base_size - ( i * wedge ) >= sz )
{ header[5] |= ( i << 5 ); break; } { data[5] |= ( i << 5 ); break; }
} }
return true; return true;
} }
@ -139,51 +140,51 @@ enum { Ft_size = 20 };
static inline int Ft_versioned_size( const int version ) static inline int Ft_versioned_size( const int version )
{ return ( ( version >= 1 ) ? 20 : 12 ); } { return ( ( version >= 1 ) ? 20 : 12 ); }
static inline uint32_t Ft_get_data_crc( const File_trailer trailer ) static inline uint32_t Ft_get_data_crc( const File_trailer data )
{ {
uint32_t tmp = 0; uint32_t tmp = 0;
int i; int i;
for( i = 3; i >= 0; --i ) { tmp <<= 8; tmp += trailer[i]; } for( i = 3; i >= 0; --i ) { tmp <<= 8; tmp += data[i]; }
return tmp; return tmp;
} }
static inline void Ft_set_data_crc( File_trailer trailer, uint32_t crc ) static inline void Ft_set_data_crc( File_trailer data, uint32_t crc )
{ {
int i; int i;
for( i = 0; i <= 3; ++i ) { trailer[i] = (uint8_t)crc; crc >>= 8; } for( i = 0; i <= 3; ++i ) { data[i] = (uint8_t)crc; crc >>= 8; }
} }
static inline long long Ft_get_data_size( const File_trailer trailer ) static inline long long Ft_get_data_size( const File_trailer data )
{ {
long long tmp = 0; long long tmp = 0;
int i; int i;
for( i = 11; i >= 4; --i ) { tmp <<= 8; tmp += trailer[i]; } for( i = 11; i >= 4; --i ) { tmp <<= 8; tmp += data[i]; }
return tmp; return tmp;
} }
static inline void Ft_set_data_size( File_trailer trailer, long long sz ) static inline void Ft_set_data_size( File_trailer data, long long sz )
{ {
int i; int i;
for( i = 4; i <= 11; ++i ) { trailer[i] = (uint8_t)sz; sz >>= 8; } for( i = 4; i <= 11; ++i ) { data[i] = (uint8_t)sz; sz >>= 8; }
} }
static inline long long Ft_get_member_size( const File_trailer trailer ) static inline long long Ft_get_member_size( const File_trailer data )
{ {
long long tmp = 0; long long tmp = 0;
int i; int i;
for( i = 19; i >= 12; --i ) { tmp <<= 8; tmp += trailer[i]; } for( i = 19; i >= 12; --i ) { tmp <<= 8; tmp += data[i]; }
return tmp; return tmp;
} }
static inline void Ft_set_member_size( File_trailer trailer, long long sz ) static inline void Ft_set_member_size( File_trailer data, long long sz )
{ {
int i; int i;
for( i = 12; i <= 19; ++i ) { trailer[i] = (uint8_t)sz; sz >>= 8; } for( i = 12; i <= 19; ++i ) { data[i] = (uint8_t)sz; sz >>= 8; }
} }
/* defined in main.c */
extern int verbosity; extern int verbosity;
void cleanup_and_fail( const int retval );
void show_error( const char * const msg, const int errcode, const bool help ); void show_error( const char * const msg, const int errcode, const bool help );
void internal_error( const char * const msg ); void internal_error( const char * const msg );

View file

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# check script for Pdlzip - A data compressor based on the LZMA algorithm # check script for Pdlzip - Data compressor based on the LZMA algorithm
# Copyright (C) 2010 Antonio Diaz Diaz. # Copyright (C) 2010, 2011 Antonio Diaz Diaz.
# #
# This script is free software: you have unlimited permission # This script is free software: you have unlimited permission
# to copy, distribute and modify it. # to copy, distribute and modify it.
@ -19,18 +19,23 @@ fi
if [ -d tmp ] ; then rm -rf tmp ; fi if [ -d tmp ] ; then rm -rf tmp ; fi
mkdir tmp mkdir tmp
printf "testing pdlzip..." printf "testing pdlzip-%s..." "$2"
cd "${objdir}"/tmp cd "${objdir}"/tmp
cat "${testdir}"/test.txt > in || framework_failure cat "${testdir}"/test.txt > in || framework_failure
fail=0 fail=0
"${LZIP}" -t "${testdir}"/test.lz || fail=1 "${LZIP}" -t "${testdir}"/test.lz || fail=1
printf .
"${LZIP}" -cd "${testdir}"/test.lz > copy || fail=1 "${LZIP}" -cd "${testdir}"/test.lz > copy || fail=1
cmp in copy || fail=1 cmp in copy || fail=1
printf .
"${LZIP}" -t "${testdir}"/test.lzma || fail=1 "${LZIP}" -t "${testdir}"/test.lzma || fail=1
printf .
"${LZIP}" -cd "${testdir}"/test.lzma > copy || fail=1 "${LZIP}" -cd "${testdir}"/test.lzma > copy || fail=1
cmp in copy || fail=1 cmp in copy || fail=1
printf .
for i in s4Ki 0 1 2 3 4 5 6 7 8s16 9s16 ; do for i in s4Ki 0 1 2 3 4 5 6 7 8s16 9s16 ; do
"${LZIP}" -k -$i in || fail=1 "${LZIP}" -k -$i in || fail=1
@ -56,6 +61,11 @@ for i in s4Ki 0 1 2 3 4 5 6 7 8s16 9s16 ; do
printf . printf .
done done
"${LZIP}" -$i < in > anyothername || fail=1
"${LZIP}" -dq anyothername || fail=1
cmp in anyothername.out || fail=1
printf .
echo echo
if [ ${fail} = 0 ] ; then if [ ${fail} = 0 ] ; then
echo "tests completed successfully." echo "tests completed successfully."