Adding upstream version 0.9.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
6b2e53e60c
commit
a92d8a2cdd
14 changed files with 193 additions and 200 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2012-03-01 Antonio Diaz Diaz <ant_diaz@teleline.es>
|
||||||
|
|
||||||
|
* Version 0.9 released.
|
||||||
|
* Minor fixes and cleanups.
|
||||||
|
* configure: 'datadir' renamed to 'datarootdir'.
|
||||||
|
|
||||||
2012-01-17 Antonio Diaz Diaz <ant_diaz@teleline.es>
|
2012-01-17 Antonio Diaz Diaz <ant_diaz@teleline.es>
|
||||||
|
|
||||||
* Version 0.8 released.
|
* Version 0.8 released.
|
||||||
|
|
15
Makefile.in
15
Makefile.in
|
@ -17,10 +17,10 @@ objs = arg_parser.o compress.o decompress.o main.o
|
||||||
all : $(progname)
|
all : $(progname)
|
||||||
|
|
||||||
$(progname) : $(objs)
|
$(progname) : $(objs)
|
||||||
$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
|
$(CXX) $(LDFLAGS) -o $@ $(objs) $(LIBS)
|
||||||
|
|
||||||
$(progname)_profiled : $(objs)
|
$(progname)_profiled : $(objs)
|
||||||
$(CXX) $(LDFLAGS) -pg -o $@ $^ $(LIBS)
|
$(CXX) $(LDFLAGS) -pg -o $@ $(objs) $(LIBS)
|
||||||
|
|
||||||
main.o : main.cc
|
main.o : main.cc
|
||||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -DPROGVERSION=\"$(pkgversion)\" -c -o $@ $<
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -DPROGVERSION=\"$(pkgversion)\" -c -o $@ $<
|
||||||
|
@ -28,11 +28,12 @@ main.o : main.cc
|
||||||
%.o : %.cc
|
%.o : %.cc
|
||||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
$(objs) : Makefile
|
$(objs) : Makefile
|
||||||
arg_parser.o : arg_parser.h
|
arg_parser.o : arg_parser.h
|
||||||
compress.o : plzip.h
|
compress.o : plzip.h
|
||||||
decompress.o : plzip.h
|
decompress.o : plzip.h
|
||||||
main.o : arg_parser.h plzip.h
|
main.o : arg_parser.h plzip.h
|
||||||
|
|
||||||
|
|
||||||
doc : info man
|
doc : info man
|
||||||
|
|
||||||
|
|
19
NEWS
19
NEWS
|
@ -1,17 +1,6 @@
|
||||||
Changes in version 0.8:
|
Changes in version 0.9:
|
||||||
|
|
||||||
The option "-F, --recompress", which forces recompression of files whose
|
Minor fixes and cleanups.
|
||||||
name already has the ".lz" or ".tlz" suffix, has been added.
|
|
||||||
|
|
||||||
The options "-d, --decompress" and "-t, --test" now also show
|
Configure option "--datadir" has been renamed to "--datarootdir" to
|
||||||
compression ratio.
|
follow GNU Standards.
|
||||||
|
|
||||||
Inability to change output file attributes has been downgraded from
|
|
||||||
error to warning.
|
|
||||||
|
|
||||||
A small change has been made in the "--help" output and man page.
|
|
||||||
|
|
||||||
Quote characters in messages have been changed as advised by GNU Coding
|
|
||||||
Standards.
|
|
||||||
|
|
||||||
Stdin and stdout are now set in binary mode on OS2.
|
|
||||||
|
|
|
@ -56,30 +56,30 @@ bool Arg_parser::parse_long_option( const char * const opt, const char * const a
|
||||||
|
|
||||||
if( ambig && !exact )
|
if( ambig && !exact )
|
||||||
{
|
{
|
||||||
error_ = "option `"; error_ += opt; error_ += "' is ambiguous";
|
error_ = "option '"; error_ += opt; error_ += "' is ambiguous";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( index < 0 ) // nothing found
|
if( index < 0 ) // nothing found
|
||||||
{
|
{
|
||||||
error_ = "unrecognized option `"; error_ += opt; error_ += '\'';
|
error_ = "unrecognized option '"; error_ += opt; error_ += '\'';
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
++argind;
|
++argind;
|
||||||
data.push_back( Record( options[index].code ) );
|
data.push_back( Record( options[index].code ) );
|
||||||
|
|
||||||
if( opt[len+2] ) // `--<long_option>=<argument>' syntax
|
if( opt[len+2] ) // '--<long_option>=<argument>' syntax
|
||||||
{
|
{
|
||||||
if( options[index].has_arg == no )
|
if( options[index].has_arg == no )
|
||||||
{
|
{
|
||||||
error_ = "option `--"; error_ += options[index].name;
|
error_ = "option '--"; error_ += options[index].name;
|
||||||
error_ += "' doesn't allow an argument";
|
error_ += "' doesn't allow an argument";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if( options[index].has_arg == yes && !opt[len+3] )
|
if( options[index].has_arg == yes && !opt[len+3] )
|
||||||
{
|
{
|
||||||
error_ = "option `--"; error_ += options[index].name;
|
error_ = "option '--"; error_ += options[index].name;
|
||||||
error_ += "' requires an argument";
|
error_ += "' requires an argument";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ bool Arg_parser::parse_long_option( const char * const opt, const char * const a
|
||||||
{
|
{
|
||||||
if( !arg || !arg[0] )
|
if( !arg || !arg[0] )
|
||||||
{
|
{
|
||||||
error_ = "option `--"; error_ += options[index].name;
|
error_ = "option '--"; error_ += options[index].name;
|
||||||
error_ += "' requires an argument";
|
error_ += "' requires an argument";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
22
arg_parser.h
22
arg_parser.h
|
@ -26,12 +26,12 @@
|
||||||
Public License.
|
Public License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Arg_parser reads the arguments in `argv' and creates a number of
|
/* Arg_parser reads the arguments in 'argv' and creates a number of
|
||||||
option codes, option arguments and non-option arguments.
|
option codes, option arguments and non-option arguments.
|
||||||
|
|
||||||
In case of error, `error' returns a non-empty error message.
|
In case of error, 'error' returns a non-empty error message.
|
||||||
|
|
||||||
`options' is an array of `struct Option' terminated by an element
|
'options' is an array of 'struct Option' terminated by an element
|
||||||
containing a code which is zero. A null name means a short-only
|
containing a code which is zero. A null name means a short-only
|
||||||
option. A code value outside the unsigned char range means a
|
option. A code value outside the unsigned char range means a
|
||||||
long-only option.
|
long-only option.
|
||||||
|
@ -40,13 +40,13 @@
|
||||||
were specified before all the non-option arguments for the purposes
|
were specified before all the non-option arguments for the purposes
|
||||||
of parsing, even if the user of your program intermixed option and
|
of parsing, even if the user of your program intermixed option and
|
||||||
non-option arguments. If you want the arguments in the exact order
|
non-option arguments. If you want the arguments in the exact order
|
||||||
the user typed them, call `Arg_parser' with `in_order' = true.
|
the user typed them, call 'Arg_parser' with 'in_order' = true.
|
||||||
|
|
||||||
The argument `--' terminates all options; any following arguments are
|
The argument '--' terminates all options; any following arguments are
|
||||||
treated as non-option arguments, even if they begin with a hyphen.
|
treated as non-option arguments, even if they begin with a hyphen.
|
||||||
|
|
||||||
The syntax for optional option arguments is `-<short_option><argument>'
|
The syntax for optional option arguments is '-<short_option><argument>'
|
||||||
(without whitespace), or `--<long_option>=<argument>'.
|
(without whitespace), or '--<long_option>=<argument>'.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class Arg_parser
|
class Arg_parser
|
||||||
|
@ -85,20 +85,20 @@ public:
|
||||||
Arg_parser( const char * const opt, const char * const arg,
|
Arg_parser( const char * const opt, const char * const arg,
|
||||||
const Option options[] );
|
const Option options[] );
|
||||||
|
|
||||||
const std::string & error() const throw() { return error_; }
|
const std::string & error() const { return error_; }
|
||||||
|
|
||||||
// The number of arguments parsed (may be different from argc)
|
// The number of arguments parsed (may be different from argc)
|
||||||
int arguments() const throw() { return data.size(); }
|
int arguments() const { return data.size(); }
|
||||||
|
|
||||||
// If code( i ) is 0, argument( i ) is a non-option.
|
// If code( i ) is 0, argument( i ) is a non-option.
|
||||||
// Else argument( i ) is the option's argument (or empty).
|
// Else argument( i ) is the option's argument (or empty).
|
||||||
int code( const int i ) const throw()
|
int code( const int i ) const
|
||||||
{
|
{
|
||||||
if( i >= 0 && i < arguments() ) return data[i].code;
|
if( i >= 0 && i < arguments() ) return data[i].code;
|
||||||
else return 0;
|
else return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string & argument( const int i ) const throw()
|
const std::string & argument( const int i ) const
|
||||||
{
|
{
|
||||||
if( i >= 0 && i < arguments() ) return data[i].argument;
|
if( i >= 0 && i < arguments() ) return data[i].argument;
|
||||||
else return error_;
|
else return error_;
|
||||||
|
|
45
compress.cc
45
compress.cc
|
@ -35,15 +35,42 @@
|
||||||
|
|
||||||
#include "plzip.h"
|
#include "plzip.h"
|
||||||
|
|
||||||
#ifndef LLONG_MAX
|
|
||||||
#define LLONG_MAX 0x7FFFFFFFFFFFFFFFLL
|
// Returns the number of bytes really read.
|
||||||
#endif
|
// If (returned value < size) and (errno == 0), means EOF was reached.
|
||||||
#ifndef LLONG_MIN
|
//
|
||||||
#define LLONG_MIN (-LLONG_MAX - 1LL)
|
int readblock( const int fd, uint8_t * const buf, const int size )
|
||||||
#endif
|
{
|
||||||
#ifndef ULLONG_MAX
|
int rest = size;
|
||||||
#define ULLONG_MAX 0xFFFFFFFFFFFFFFFFULL
|
errno = 0;
|
||||||
#endif
|
while( rest > 0 )
|
||||||
|
{
|
||||||
|
errno = 0;
|
||||||
|
const int n = read( fd, buf + size - rest, rest );
|
||||||
|
if( n > 0 ) rest -= n;
|
||||||
|
else if( n == 0 ) break;
|
||||||
|
else if( errno != EINTR && errno != EAGAIN ) break;
|
||||||
|
}
|
||||||
|
return ( rest > 0 ) ? size - rest : size;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Returns the number of bytes really written.
|
||||||
|
// If (returned value < size), it is always an error.
|
||||||
|
//
|
||||||
|
int writeblock( const int fd, const uint8_t * const buf, const int size )
|
||||||
|
{
|
||||||
|
int rest = size;
|
||||||
|
errno = 0;
|
||||||
|
while( rest > 0 )
|
||||||
|
{
|
||||||
|
errno = 0;
|
||||||
|
const int n = write( fd, buf + size - rest, rest );
|
||||||
|
if( n > 0 ) rest -= n;
|
||||||
|
else if( n < 0 && errno != EINTR && errno != EAGAIN ) break;
|
||||||
|
}
|
||||||
|
return ( rest > 0 ) ? size - rest : size;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void xinit( pthread_mutex_t * const mutex )
|
void xinit( pthread_mutex_t * const mutex )
|
||||||
|
|
64
configure
vendored
64
configure
vendored
|
@ -8,7 +8,7 @@
|
||||||
args=
|
args=
|
||||||
no_create=
|
no_create=
|
||||||
pkgname=plzip
|
pkgname=plzip
|
||||||
pkgversion=0.8
|
pkgversion=0.9
|
||||||
progname=plzip
|
progname=plzip
|
||||||
srctrigger=plzip.h
|
srctrigger=plzip.h
|
||||||
|
|
||||||
|
@ -19,10 +19,9 @@ srcdir=
|
||||||
prefix=/usr/local
|
prefix=/usr/local
|
||||||
exec_prefix='$(prefix)'
|
exec_prefix='$(prefix)'
|
||||||
bindir='$(exec_prefix)/bin'
|
bindir='$(exec_prefix)/bin'
|
||||||
datadir='$(prefix)/share'
|
datarootdir='$(prefix)/share'
|
||||||
infodir='$(datadir)/info'
|
infodir='$(datarootdir)/info'
|
||||||
mandir='$(datadir)/man'
|
mandir='$(datarootdir)/man'
|
||||||
sysconfdir='$(prefix)/etc'
|
|
||||||
CXX=
|
CXX=
|
||||||
CPPFLAGS=
|
CPPFLAGS=
|
||||||
CXXFLAGS='-Wall -W -O2'
|
CXXFLAGS='-Wall -W -O2'
|
||||||
|
@ -40,12 +39,12 @@ while [ -n "$1" ] ; do
|
||||||
|
|
||||||
# Split out the argument for options that take them
|
# Split out the argument for options that take them
|
||||||
case ${option} in
|
case ${option} in
|
||||||
*=*) optarg=`echo ${option} | sed -e 's,^[^=]*=,,'` ;;
|
*=*) optarg=`echo ${option} | sed -e 's,^[^=]*=,,;s,/$,,'` ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Process the options
|
# Process the options
|
||||||
case ${option} in
|
case ${option} in
|
||||||
--help | --he* | -h)
|
--help | -h)
|
||||||
echo "Usage: configure [options]"
|
echo "Usage: configure [options]"
|
||||||
echo
|
echo
|
||||||
echo "Options: [defaults in brackets]"
|
echo "Options: [defaults in brackets]"
|
||||||
|
@ -55,42 +54,31 @@ while [ -n "$1" ] ; do
|
||||||
echo " --prefix=DIR install into DIR [${prefix}]"
|
echo " --prefix=DIR install into DIR [${prefix}]"
|
||||||
echo " --exec-prefix=DIR base directory for arch-dependent files [${exec_prefix}]"
|
echo " --exec-prefix=DIR base directory for arch-dependent files [${exec_prefix}]"
|
||||||
echo " --bindir=DIR user executables directory [${bindir}]"
|
echo " --bindir=DIR user executables directory [${bindir}]"
|
||||||
echo " --datadir=DIR base directory for doc and data [${datadir}]"
|
echo " --datarootdir=DIR base directory for doc and data [${datarootdir}]"
|
||||||
echo " --infodir=DIR info files directory [${infodir}]"
|
echo " --infodir=DIR info files directory [${infodir}]"
|
||||||
echo " --mandir=DIR man pages directory [${mandir}]"
|
echo " --mandir=DIR man pages directory [${mandir}]"
|
||||||
echo " --sysconfdir=DIR read-only single-machine data directory [${sysconfdir}]"
|
|
||||||
echo " CXX=COMPILER C++ compiler to use [g++]"
|
echo " CXX=COMPILER C++ compiler to use [g++]"
|
||||||
echo " CPPFLAGS=OPTIONS command line options for the preprocessor [${CPPFLAGS}]"
|
echo " CPPFLAGS=OPTIONS command line options for the preprocessor [${CPPFLAGS}]"
|
||||||
echo " CXXFLAGS=OPTIONS command line options for the C++ compiler [${CXXFLAGS}]"
|
echo " CXXFLAGS=OPTIONS command line options for the C++ compiler [${CXXFLAGS}]"
|
||||||
echo " LDFLAGS=OPTIONS command line options for the linker [${LDFLAGS}]"
|
echo " LDFLAGS=OPTIONS command line options for the linker [${LDFLAGS}]"
|
||||||
echo
|
echo
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
--version | --ve* | -V)
|
--version | -V)
|
||||||
echo "Configure script for ${pkgname} version ${pkgversion}"
|
echo "Configure script for ${pkgname} version ${pkgversion}"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
--srcdir* | --sr*)
|
--srcdir=*) srcdir=${optarg} ;;
|
||||||
srcdir=`echo ${optarg} | sed -e 's,/$,,'` ;;
|
--prefix=*) prefix=${optarg} ;;
|
||||||
--prefix* | --pr*)
|
--exec-prefix=*) exec_prefix=${optarg} ;;
|
||||||
prefix=`echo ${optarg} | sed -e 's,/$,,'` ;;
|
--bindir=*) bindir=${optarg} ;;
|
||||||
--exec-prefix* | --ex*)
|
--datarootdir=*) datarootdir=${optarg} ;;
|
||||||
exec_prefix=`echo ${optarg} | sed -e 's,/$,,'` ;;
|
--infodir=*) infodir=${optarg} ;;
|
||||||
--bindir* | --bi*)
|
--mandir=*) mandir=${optarg} ;;
|
||||||
bindir=`echo ${optarg} | sed -e 's,/$,,'` ;;
|
--no-create) no_create=yes ;;
|
||||||
--datadir* | --da*)
|
|
||||||
datadir=`echo ${optarg} | sed -e 's,/$,,'` ;;
|
|
||||||
--infodir* | --inf*)
|
|
||||||
infodir=`echo ${optarg} | sed -e 's,/$,,'` ;;
|
|
||||||
--mandir* | --ma*)
|
|
||||||
mandir=`echo ${optarg} | sed -e 's,/$,,'` ;;
|
|
||||||
--sysconfdir* | --sy*)
|
|
||||||
sysconfdir=`echo ${optarg} | sed -e 's,/$,,'` ;;
|
|
||||||
--no-create | --no-c*)
|
|
||||||
no_create=yes ;;
|
|
||||||
|
|
||||||
CXX=*) CXX=${optarg} ;;
|
CXX=*) CXX=${optarg} ;;
|
||||||
CPPFLAGS=*) CPPFLAGS=${optarg} ;;
|
CPPFLAGS=*) CPPFLAGS=${optarg} ;;
|
||||||
CXXFLAGS=*) CXXFLAGS=${optarg} ;;
|
CXXFLAGS=*) CXXFLAGS=${optarg} ;;
|
||||||
LDFLAGS=*) LDFLAGS=${optarg} ;;
|
LDFLAGS=*) LDFLAGS=${optarg} ;;
|
||||||
|
|
||||||
--* | *=* | *-*-*) ;;
|
--* | *=* | *-*-*) ;;
|
||||||
*)
|
*)
|
||||||
|
@ -103,14 +91,14 @@ done
|
||||||
srcdirtext=
|
srcdirtext=
|
||||||
if [ -z "${srcdir}" ] ; then
|
if [ -z "${srcdir}" ] ; then
|
||||||
srcdirtext="or . or .." ; srcdir=.
|
srcdirtext="or . or .." ; srcdir=.
|
||||||
if [ ! -r ${srcdir}/${srctrigger} ] ; then srcdir=.. ; fi
|
if [ ! -r "${srcdir}/${srctrigger}" ] ; then srcdir=.. ; fi
|
||||||
if [ ! -r ${srcdir}/${srctrigger} ] ; then
|
if [ ! -r "${srcdir}/${srctrigger}" ] ; then
|
||||||
## the sed command below emulates the dirname command
|
## the sed command below emulates the dirname command
|
||||||
srcdir=`echo $0 | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
srcdir=`echo $0 | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -r ${srcdir}/${srctrigger} ] ; then
|
if [ ! -r "${srcdir}/${srctrigger}" ] ; then
|
||||||
exec 1>&2
|
exec 1>&2
|
||||||
echo
|
echo
|
||||||
echo "configure: Can't find sources in ${srcdir} ${srcdirtext}"
|
echo "configure: Can't find sources in ${srcdir} ${srcdirtext}"
|
||||||
|
@ -119,7 +107,7 @@ if [ ! -r ${srcdir}/${srctrigger} ] ; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set srcdir to . if that's what it is.
|
# Set srcdir to . if that's what it is.
|
||||||
if [ "`pwd`" = "`cd ${srcdir} ; pwd`" ] ; then srcdir=. ; fi
|
if [ "`pwd`" = "`cd "${srcdir}" ; pwd`" ] ; then srcdir=. ; fi
|
||||||
|
|
||||||
# checking whether we are using GNU C++.
|
# checking whether we are using GNU C++.
|
||||||
if [ -z "${CXX}" ] ; then # Let the user override the test.
|
if [ -z "${CXX}" ] ; then # Let the user override the test.
|
||||||
|
@ -154,10 +142,9 @@ echo "VPATH = ${srcdir}"
|
||||||
echo "prefix = ${prefix}"
|
echo "prefix = ${prefix}"
|
||||||
echo "exec_prefix = ${exec_prefix}"
|
echo "exec_prefix = ${exec_prefix}"
|
||||||
echo "bindir = ${bindir}"
|
echo "bindir = ${bindir}"
|
||||||
echo "datadir = ${datadir}"
|
echo "datarootdir = ${datarootdir}"
|
||||||
echo "infodir = ${infodir}"
|
echo "infodir = ${infodir}"
|
||||||
echo "mandir = ${mandir}"
|
echo "mandir = ${mandir}"
|
||||||
echo "sysconfdir = ${sysconfdir}"
|
|
||||||
echo "CXX = ${CXX}"
|
echo "CXX = ${CXX}"
|
||||||
echo "CPPFLAGS = ${CPPFLAGS}"
|
echo "CPPFLAGS = ${CPPFLAGS}"
|
||||||
echo "CXXFLAGS = ${CXXFLAGS}"
|
echo "CXXFLAGS = ${CXXFLAGS}"
|
||||||
|
@ -178,16 +165,15 @@ VPATH = ${srcdir}
|
||||||
prefix = ${prefix}
|
prefix = ${prefix}
|
||||||
exec_prefix = ${exec_prefix}
|
exec_prefix = ${exec_prefix}
|
||||||
bindir = ${bindir}
|
bindir = ${bindir}
|
||||||
datadir = ${datadir}
|
datarootdir = ${datarootdir}
|
||||||
infodir = ${infodir}
|
infodir = ${infodir}
|
||||||
mandir = ${mandir}
|
mandir = ${mandir}
|
||||||
sysconfdir = ${sysconfdir}
|
|
||||||
CXX = ${CXX}
|
CXX = ${CXX}
|
||||||
CPPFLAGS = ${CPPFLAGS}
|
CPPFLAGS = ${CPPFLAGS}
|
||||||
CXXFLAGS = ${CXXFLAGS}
|
CXXFLAGS = ${CXXFLAGS}
|
||||||
LDFLAGS = ${LDFLAGS}
|
LDFLAGS = ${LDFLAGS}
|
||||||
EOF
|
EOF
|
||||||
cat ${srcdir}/Makefile.in >> Makefile
|
cat "${srcdir}/Makefile.in" >> Makefile
|
||||||
|
|
||||||
echo "OK. Now you can run make."
|
echo "OK. Now you can run make."
|
||||||
echo "If make fails, verify that the lzlib compression library is correctly"
|
echo "If make fails, verify that the lzlib compression library is correctly"
|
||||||
|
|
|
@ -213,7 +213,7 @@ public:
|
||||||
// Search forward from 'pos' for "LZIP" (Boyer-Moore algorithm)
|
// Search forward from 'pos' for "LZIP" (Boyer-Moore algorithm)
|
||||||
// Return pos of found string or 'pos+size' if not found.
|
// Return pos of found string or 'pos+size' if not found.
|
||||||
//
|
//
|
||||||
int find_magic( const uint8_t * const buffer, const int pos, const int size ) throw()
|
int find_magic( const uint8_t * const buffer, const int pos, const int size )
|
||||||
{
|
{
|
||||||
const uint8_t table[256] = {
|
const uint8_t table[256] = {
|
||||||
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.\" 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 PLZIP "1" "January 2012" "Plzip 0.8" "User Commands"
|
.TH PLZIP "1" "March 2012" "Plzip 0.9" "User Commands"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
Plzip \- reduces the size of files
|
Plzip \- reduces the size of files
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
@ -79,7 +79,7 @@ Plzip home page: http://www.nongnu.org/lzip/plzip.html
|
||||||
Copyright \(co 2009 Laszlo Ersek.
|
Copyright \(co 2009 Laszlo Ersek.
|
||||||
.br
|
.br
|
||||||
Copyright \(co 2012 Antonio Diaz Diaz.
|
Copyright \(co 2012 Antonio Diaz Diaz.
|
||||||
Using Lzlib 1.3\-rc1
|
Using Lzlib 1.3
|
||||||
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
||||||
.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.
|
||||||
|
|
|
@ -12,7 +12,7 @@ File: plzip.info, Node: Top, Next: Introduction, Up: (dir)
|
||||||
Plzip Manual
|
Plzip Manual
|
||||||
************
|
************
|
||||||
|
|
||||||
This manual is for Plzip (version 0.8, 17 January 2012).
|
This manual is for Plzip (version 0.9, 1 March 2012).
|
||||||
|
|
||||||
* Menu:
|
* Menu:
|
||||||
|
|
||||||
|
@ -81,6 +81,13 @@ processed. Be aware, though, that the check occurs upon decompression,
|
||||||
so it can only tell you that something is wrong. It can't help you
|
so it can only tell you that something is wrong. It can't help you
|
||||||
recover the original uncompressed data.
|
recover the original uncompressed data.
|
||||||
|
|
||||||
|
WARNING! Even if plzip is bug-free, other causes may result in a
|
||||||
|
corrupt compressed file (bugs in the system libraries, memory errors,
|
||||||
|
etc). Therefore, if the data you are going to compress is important,
|
||||||
|
give the `--keep' option to plzip and do not remove the original file
|
||||||
|
until you verify the compressed file with a command like
|
||||||
|
`plzip -cd file.lz | cmp file -'.
|
||||||
|
|
||||||
Return values: 0 for a normal exit, 1 for environmental problems
|
Return values: 0 for a normal exit, 1 for environmental problems
|
||||||
(file not found, invalid flags, I/O errors, etc), 2 to indicate a
|
(file not found, invalid flags, I/O errors, etc), 2 to indicate a
|
||||||
corrupt or invalid input file, 3 for an internal consistency error (eg,
|
corrupt or invalid input file, 3 for an internal consistency error (eg,
|
||||||
|
@ -351,12 +358,12 @@ Concept Index
|
||||||
|
|
||||||
Tag Table:
|
Tag Table:
|
||||||
Node: Top223
|
Node: Top223
|
||||||
Node: Introduction845
|
Node: Introduction842
|
||||||
Node: Invoking Plzip3641
|
Node: Invoking Plzip4008
|
||||||
Node: Program Design8597
|
Node: Program Design8964
|
||||||
Node: File Format9259
|
Node: File Format9626
|
||||||
Node: Problems11254
|
Node: Problems11621
|
||||||
Node: Concept Index11783
|
Node: Concept Index12150
|
||||||
|
|
||||||
End Tag Table
|
End Tag Table
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
@finalout
|
@finalout
|
||||||
@c %**end of header
|
@c %**end of header
|
||||||
|
|
||||||
@set UPDATED 17 January 2012
|
@set UPDATED 1 March 2012
|
||||||
@set VERSION 0.8
|
@set VERSION 0.9
|
||||||
|
|
||||||
@dircategory Data Compression
|
@dircategory Data Compression
|
||||||
@direntry
|
@direntry
|
||||||
|
@ -102,6 +102,13 @@ the check occurs upon decompression, so it can only tell you that
|
||||||
something is wrong. It can't help you recover the original uncompressed
|
something is wrong. It can't help you recover the original uncompressed
|
||||||
data.
|
data.
|
||||||
|
|
||||||
|
WARNING! Even if plzip is bug-free, other causes may result in a corrupt
|
||||||
|
compressed file (bugs in the system libraries, memory errors, etc).
|
||||||
|
Therefore, if the data you are going to compress is important, give the
|
||||||
|
@samp{--keep} option to plzip and do not remove the original file until
|
||||||
|
you verify the compressed file with a command like
|
||||||
|
@w{@samp{plzip -cd file.lz | cmp file -}}.
|
||||||
|
|
||||||
Return values: 0 for a normal exit, 1 for environmental problems (file
|
Return values: 0 for a normal exit, 1 for environmental problems (file
|
||||||
not found, invalid flags, I/O errors, etc), 2 to indicate a corrupt or
|
not found, invalid flags, I/O errors, etc), 2 to indicate a corrupt or
|
||||||
invalid input file, 3 for an internal consistency error (eg, bug) which
|
invalid input file, 3 for an internal consistency error (eg, bug) which
|
||||||
|
|
87
main.cc
87
main.cc
|
@ -48,16 +48,6 @@
|
||||||
#error "Environments where CHAR_BIT != 8 are not supported."
|
#error "Environments where CHAR_BIT != 8 are not supported."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#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
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@ -87,13 +77,15 @@ enum Mode { m_compress, m_decompress, m_test };
|
||||||
|
|
||||||
std::string output_filename;
|
std::string output_filename;
|
||||||
int outfd = -1;
|
int outfd = -1;
|
||||||
mode_t outfd_mode = S_IRUSR | S_IWUSR;
|
const mode_t usr_rw = S_IRUSR | S_IWUSR;
|
||||||
|
const mode_t all_rw = usr_rw | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
|
||||||
|
mode_t outfd_mode = usr_rw;
|
||||||
bool delete_output_on_interrupt = false;
|
bool delete_output_on_interrupt = false;
|
||||||
pthread_t main_thread;
|
pthread_t main_thread;
|
||||||
pid_t main_thread_pid;
|
pid_t main_thread_pid;
|
||||||
|
|
||||||
|
|
||||||
void show_help() throw()
|
void show_help()
|
||||||
{
|
{
|
||||||
std::printf( "%s - A parallel compressor compatible with lzip.\n", Program_name );
|
std::printf( "%s - A parallel compressor compatible with lzip.\n", Program_name );
|
||||||
std::printf( "\nUsage: %s [options] [files]\n", invocation_name );
|
std::printf( "\nUsage: %s [options] [files]\n", invocation_name );
|
||||||
|
@ -133,7 +125,7 @@ void show_help() throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void show_version() throw()
|
void show_version()
|
||||||
{
|
{
|
||||||
std::printf( "%s %s\n", Program_name, PROGVERSION );
|
std::printf( "%s %s\n", Program_name, PROGVERSION );
|
||||||
std::printf( "Copyright (C) 2009 Laszlo Ersek.\n"
|
std::printf( "Copyright (C) 2009 Laszlo Ersek.\n"
|
||||||
|
@ -147,7 +139,7 @@ void show_version() throw()
|
||||||
|
|
||||||
long long getnum( const char * const ptr,
|
long long getnum( const char * const ptr,
|
||||||
const long long llimit = LLONG_MIN + 1,
|
const long long llimit = LLONG_MIN + 1,
|
||||||
const long long ulimit = LLONG_MAX ) throw()
|
const long long ulimit = LLONG_MAX )
|
||||||
{
|
{
|
||||||
errno = 0;
|
errno = 0;
|
||||||
char *tail;
|
char *tail;
|
||||||
|
@ -200,7 +192,7 @@ long long getnum( const char * const ptr,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int get_dict_size( const char * const arg ) throw()
|
int get_dict_size( const char * const arg )
|
||||||
{
|
{
|
||||||
char *tail;
|
char *tail;
|
||||||
int bits = std::strtol( arg, &tail, 0 );
|
int bits = std::strtol( arg, &tail, 0 );
|
||||||
|
@ -211,7 +203,7 @@ int get_dict_size( const char * const arg ) throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int extension_index( const std::string & name ) throw()
|
int extension_index( const std::string & name )
|
||||||
{
|
{
|
||||||
for( int i = 0; known_extensions[i].from; ++i )
|
for( int i = 0; known_extensions[i].from; ++i )
|
||||||
{
|
{
|
||||||
|
@ -226,7 +218,7 @@ int extension_index( const std::string & name ) throw()
|
||||||
|
|
||||||
int open_instream( const std::string & name, struct stat * const in_statsp,
|
int open_instream( const std::string & name, struct stat * const in_statsp,
|
||||||
const Mode program_mode, const int eindex,
|
const Mode program_mode, const int eindex,
|
||||||
const bool recompress, const bool to_stdout ) throw()
|
const bool recompress, const bool to_stdout )
|
||||||
{
|
{
|
||||||
int infd = -1;
|
int infd = -1;
|
||||||
if( program_mode == m_compress && !recompress && eindex >= 0 )
|
if( program_mode == m_compress && !recompress && eindex >= 0 )
|
||||||
|
@ -268,14 +260,14 @@ int open_instream( const std::string & name, struct stat * const in_statsp,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void set_c_outname( const std::string & name ) throw()
|
void set_c_outname( const std::string & name )
|
||||||
{
|
{
|
||||||
output_filename = name;
|
output_filename = name;
|
||||||
output_filename += known_extensions[0].from;
|
output_filename += known_extensions[0].from;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void set_d_outname( const std::string & name, const int i ) throw()
|
void set_d_outname( const std::string & name, const int i )
|
||||||
{
|
{
|
||||||
if( i >= 0 )
|
if( i >= 0 )
|
||||||
{
|
{
|
||||||
|
@ -294,7 +286,7 @@ void set_d_outname( const std::string & name, const int i ) throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool open_outstream( const bool force ) throw()
|
bool open_outstream( const bool force )
|
||||||
{
|
{
|
||||||
int flags = O_CREAT | O_WRONLY | o_binary;
|
int flags = O_CREAT | O_WRONLY | o_binary;
|
||||||
if( force ) flags |= O_TRUNC; else flags |= O_EXCL;
|
if( force ) flags |= O_TRUNC; else flags |= O_EXCL;
|
||||||
|
@ -313,7 +305,7 @@ bool open_outstream( const bool force ) throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool check_tty( const int infd, const Mode program_mode ) throw()
|
bool check_tty( const int infd, const Mode program_mode )
|
||||||
{
|
{
|
||||||
if( program_mode == m_compress && outfd >= 0 && isatty( outfd ) )
|
if( program_mode == m_compress && outfd >= 0 && isatty( outfd ) )
|
||||||
{
|
{
|
||||||
|
@ -330,7 +322,7 @@ bool check_tty( const int infd, const Mode program_mode ) throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void cleanup_and_fail( const int retval ) throw()
|
void cleanup_and_fail( const int retval )
|
||||||
{
|
{
|
||||||
if( delete_output_on_interrupt )
|
if( delete_output_on_interrupt )
|
||||||
{
|
{
|
||||||
|
@ -372,7 +364,7 @@ void close_and_set_permissions( const struct stat * const in_statsp )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extern "C" void signal_handler( int sig ) throw()
|
extern "C" void signal_handler( int sig )
|
||||||
{
|
{
|
||||||
if( !pthread_equal( pthread_self(), main_thread ) )
|
if( !pthread_equal( pthread_self(), main_thread ) )
|
||||||
kill( main_thread_pid, sig );
|
kill( main_thread_pid, sig );
|
||||||
|
@ -382,7 +374,7 @@ extern "C" void signal_handler( int sig ) throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void set_signals() throw()
|
void set_signals()
|
||||||
{
|
{
|
||||||
std::signal( SIGHUP, signal_handler );
|
std::signal( SIGHUP, signal_handler );
|
||||||
std::signal( SIGINT, signal_handler );
|
std::signal( SIGINT, signal_handler );
|
||||||
|
@ -402,7 +394,7 @@ int verbosity = 0;
|
||||||
void fatal() { signal_handler( SIGUSR1 ); }
|
void fatal() { signal_handler( SIGUSR1 ); }
|
||||||
|
|
||||||
|
|
||||||
void Pretty_print::operator()( const char * const msg ) const throw()
|
void Pretty_print::operator()( const char * const msg ) const
|
||||||
{
|
{
|
||||||
if( verbosity >= 0 )
|
if( verbosity >= 0 )
|
||||||
{
|
{
|
||||||
|
@ -419,7 +411,7 @@ void Pretty_print::operator()( const char * const msg ) const throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void show_error( const char * const msg, const int errcode, const bool help ) throw()
|
void show_error( const char * const msg, const int errcode, const bool help )
|
||||||
{
|
{
|
||||||
if( verbosity >= 0 )
|
if( verbosity >= 0 )
|
||||||
{
|
{
|
||||||
|
@ -437,7 +429,7 @@ void show_error( const char * const msg, const int errcode, const bool help ) th
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void internal_error( const char * const msg ) throw()
|
void internal_error( const char * const msg )
|
||||||
{
|
{
|
||||||
if( verbosity >= 0 )
|
if( verbosity >= 0 )
|
||||||
std::fprintf( stderr, "%s: internal error: %s.\n", program_name, msg );
|
std::fprintf( stderr, "%s: internal error: %s.\n", program_name, msg );
|
||||||
|
@ -445,43 +437,6 @@ void internal_error( const char * const msg ) throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Returns the number of bytes really read.
|
|
||||||
// If (returned value < size) and (errno == 0), means EOF was reached.
|
|
||||||
//
|
|
||||||
int readblock( const int fd, uint8_t * const buf, const int size ) throw()
|
|
||||||
{
|
|
||||||
int rest = size;
|
|
||||||
errno = 0;
|
|
||||||
while( rest > 0 )
|
|
||||||
{
|
|
||||||
errno = 0;
|
|
||||||
const int n = read( fd, buf + size - rest, rest );
|
|
||||||
if( n > 0 ) rest -= n;
|
|
||||||
else if( n == 0 ) break;
|
|
||||||
else if( errno != EINTR && errno != EAGAIN ) break;
|
|
||||||
}
|
|
||||||
return ( rest > 0 ) ? size - rest : size;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Returns the number of bytes really written.
|
|
||||||
// If (returned value < size), it is always an error.
|
|
||||||
//
|
|
||||||
int writeblock( const int fd, const uint8_t * const buf, const int size ) throw()
|
|
||||||
{
|
|
||||||
int rest = size;
|
|
||||||
errno = 0;
|
|
||||||
while( rest > 0 )
|
|
||||||
{
|
|
||||||
errno = 0;
|
|
||||||
const int n = write( fd, buf + size - rest, rest );
|
|
||||||
if( n > 0 ) rest -= n;
|
|
||||||
else if( n < 0 && errno != EINTR && errno != EAGAIN ) break;
|
|
||||||
}
|
|
||||||
return ( rest > 0 ) ? size - rest : size;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main( const int argc, const char * const argv[] )
|
int main( const int argc, const char * const argv[] )
|
||||||
{
|
{
|
||||||
// Mapping from gzip/bzip2 style 1..9 compression modes
|
// Mapping from gzip/bzip2 style 1..9 compression modes
|
||||||
|
@ -649,7 +604,7 @@ int main( const int argc, const char * const argv[] )
|
||||||
if( program_mode == m_compress )
|
if( program_mode == m_compress )
|
||||||
set_c_outname( default_output_filename );
|
set_c_outname( default_output_filename );
|
||||||
else output_filename = default_output_filename;
|
else output_filename = default_output_filename;
|
||||||
outfd_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
|
outfd_mode = all_rw;
|
||||||
if( !open_outstream( force ) )
|
if( !open_outstream( force ) )
|
||||||
{
|
{
|
||||||
if( outfd == -1 && retval < 1 ) retval = 1;
|
if( outfd == -1 && retval < 1 ) retval = 1;
|
||||||
|
@ -674,7 +629,7 @@ int main( const int argc, const char * const argv[] )
|
||||||
if( program_mode == m_compress )
|
if( program_mode == m_compress )
|
||||||
set_c_outname( input_filename );
|
set_c_outname( input_filename );
|
||||||
else set_d_outname( input_filename, eindex );
|
else set_d_outname( input_filename, eindex );
|
||||||
outfd_mode = S_IRUSR | S_IWUSR;
|
outfd_mode = usr_rw;
|
||||||
if( !open_outstream( force ) )
|
if( !open_outstream( force ) )
|
||||||
{
|
{
|
||||||
if( outfd == -1 && retval < 1 ) retval = 1;
|
if( outfd == -1 && retval < 1 ) retval = 1;
|
||||||
|
|
66
plzip.h
66
plzip.h
|
@ -16,6 +16,17 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
|
||||||
class Pretty_print
|
class Pretty_print
|
||||||
{
|
{
|
||||||
const char * const stdin_name;
|
const char * const stdin_name;
|
||||||
|
@ -44,14 +55,16 @@ public:
|
||||||
first_post = true;
|
first_post = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset() const throw() { if( name_.size() ) first_post = true; }
|
void reset() const { if( name_.size() ) first_post = true; }
|
||||||
const char * name() const throw() { return name_.c_str(); }
|
const char * name() const { return name_.c_str(); }
|
||||||
void operator()( const char * const msg = 0 ) const throw();
|
void operator()( const char * const msg = 0 ) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*--------------------- Defined in compress.cc ---------------------*/
|
/*--------------------- Defined in compress.cc ---------------------*/
|
||||||
|
|
||||||
|
int readblock( const int fd, uint8_t * const buf, const int size );
|
||||||
|
int writeblock( const int fd, const uint8_t * const buf, const int size );
|
||||||
void xinit( pthread_mutex_t * const mutex );
|
void xinit( pthread_mutex_t * const mutex );
|
||||||
void xinit( pthread_cond_t * const cond );
|
void xinit( pthread_cond_t * const cond );
|
||||||
void xdestroy( pthread_mutex_t * const mutex );
|
void xdestroy( pthread_mutex_t * const mutex );
|
||||||
|
@ -62,6 +75,28 @@ void xwait( pthread_cond_t * const cond, pthread_mutex_t * const mutex );
|
||||||
void xsignal( pthread_cond_t * const cond );
|
void xsignal( pthread_cond_t * const cond );
|
||||||
void xbroadcast( pthread_cond_t * const cond );
|
void xbroadcast( pthread_cond_t * const cond );
|
||||||
|
|
||||||
|
int compress( const int data_size, const int dictionary_size,
|
||||||
|
const int match_len_limit, const int num_workers,
|
||||||
|
const int infd, const int outfd,
|
||||||
|
const Pretty_print & pp, const int debug_level );
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------- Defined in decompress.cc --------------------*/
|
||||||
|
|
||||||
|
int decompress( const int num_workers, const int infd, const int outfd,
|
||||||
|
const Pretty_print & pp, const int debug_level,
|
||||||
|
const bool testing );
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------- Defined in main.cc -----------------------*/
|
||||||
|
|
||||||
|
extern int verbosity;
|
||||||
|
|
||||||
|
void fatal(); // terminate the program
|
||||||
|
|
||||||
|
void show_error( const char * const msg, const int errcode = 0, const bool help = false );
|
||||||
|
void internal_error( const char * const msg );
|
||||||
|
|
||||||
|
|
||||||
class Slot_tally
|
class Slot_tally
|
||||||
{
|
{
|
||||||
|
@ -104,28 +139,3 @@ public:
|
||||||
xunlock( &mutex );
|
xunlock( &mutex );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int compress( const int data_size, const int dictionary_size,
|
|
||||||
const int match_len_limit, const int num_workers,
|
|
||||||
const int infd, const int outfd,
|
|
||||||
const Pretty_print & pp, const int debug_level );
|
|
||||||
|
|
||||||
|
|
||||||
/*-------------------- Defined in decompress.cc --------------------*/
|
|
||||||
|
|
||||||
int decompress( const int num_workers, const int infd, const int outfd,
|
|
||||||
const Pretty_print & pp, const int debug_level,
|
|
||||||
const bool testing );
|
|
||||||
|
|
||||||
|
|
||||||
/*----------------------- Defined in main.cc -----------------------*/
|
|
||||||
|
|
||||||
extern int verbosity;
|
|
||||||
|
|
||||||
void fatal(); // terminate the program
|
|
||||||
|
|
||||||
void show_error( const char * const msg, const int errcode = 0, const bool help = false ) throw();
|
|
||||||
void internal_error( const char * const msg ) throw();
|
|
||||||
int readblock( const int fd, uint8_t * const buf, const int size ) throw();
|
|
||||||
int writeblock( const int fd, const uint8_t * const buf, const int size ) throw();
|
|
||||||
|
|
|
@ -28,17 +28,22 @@ fail=0
|
||||||
printf "testing plzip-%s..." "$2"
|
printf "testing plzip-%s..." "$2"
|
||||||
|
|
||||||
"${LZIP}" -t "${testdir}"/test_v0.lz || fail=1
|
"${LZIP}" -t "${testdir}"/test_v0.lz || fail=1
|
||||||
printf .
|
|
||||||
"${LZIP}" -cd "${testdir}"/test_v0.lz > copy || fail=1
|
"${LZIP}" -cd "${testdir}"/test_v0.lz > copy || fail=1
|
||||||
cmp in copy || fail=1
|
cmp in copy || fail=1
|
||||||
printf .
|
printf .
|
||||||
|
|
||||||
"${LZIP}" -t "${testdir}"/test_v1.lz || fail=1
|
"${LZIP}" -t "${testdir}"/test_v1.lz || fail=1
|
||||||
printf .
|
|
||||||
"${LZIP}" -cd "${testdir}"/test_v1.lz > copy || fail=1
|
"${LZIP}" -cd "${testdir}"/test_v1.lz > copy || fail=1
|
||||||
cmp in copy || fail=1
|
cmp in copy || fail=1
|
||||||
printf .
|
printf .
|
||||||
|
|
||||||
|
"${LZIP}" -cfq "${testdir}"/test_v1.lz > out
|
||||||
|
if [ $? != 1 ] ; then fail=1 ; printf - ; else printf . ; fi
|
||||||
|
"${LZIP}" -cF "${testdir}"/test_v1.lz > out || fail=1
|
||||||
|
"${LZIP}" -cd out | "${LZIP}" -d > copy || fail=1
|
||||||
|
cmp in copy || fail=1
|
||||||
|
printf .
|
||||||
|
|
||||||
for i in s4Ki 0 1 2 3 4 5 6 7 8 9 ; do
|
for i in s4Ki 0 1 2 3 4 5 6 7 8 9 ; do
|
||||||
"${LZIP}" -k -$i in || fail=1
|
"${LZIP}" -k -$i in || fail=1
|
||||||
mv -f in.lz copy.lz || fail=1
|
mv -f in.lz copy.lz || fail=1
|
||||||
|
@ -70,11 +75,6 @@ for i in s4Ki 0 1 2 3 4 5 6 7 8 9 ; do
|
||||||
printf .
|
printf .
|
||||||
done
|
done
|
||||||
|
|
||||||
"${LZIP}" < in > anyothername || fail=1
|
|
||||||
"${LZIP}" -d anyothername || fail=1
|
|
||||||
cmp in anyothername.out || fail=1
|
|
||||||
printf .
|
|
||||||
|
|
||||||
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
|
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
|
||||||
"${LZIP}" -s4Ki -B8Ki -n$i < in4 > out4 || fail=1
|
"${LZIP}" -s4Ki -B8Ki -n$i < in4 > out4 || fail=1
|
||||||
"${LZIP}" -d -n$i < out4 > copy4 || fail=1
|
"${LZIP}" -d -n$i < out4 > copy4 || fail=1
|
||||||
|
@ -82,6 +82,11 @@ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
|
||||||
printf .
|
printf .
|
||||||
done
|
done
|
||||||
|
|
||||||
|
"${LZIP}" < in > anyothername || fail=1
|
||||||
|
"${LZIP}" -d 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."
|
||||||
|
|
Loading…
Add table
Reference in a new issue