diff --git a/ChangeLog b/ChangeLog index df971f6..a456ecd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,28 @@ lrzip ChangeLog +NOVEMBER 2010, version 0.5 Con Kolivas +* Changed offset encoding in rzip stage to use variable byte width offsets +instead of 64 bits wide. Makes for better compression and slightly faster. +* Write the byte width into the file before each block. +* Shrunk match lengths to maximum of 16 bits again as per original rzip as the +larger offsets did not achieve greater compression and made final size larger. +* New file format not backwards compatible due to variable byte widths. +* Rewrote memory initialisation to have a pre-allocation stage to try and +find the maximum memory usable and defragment ram. +* Use reduced window size if allocating memory fails at higher size. +* Change use of malloc to mmap to make it possible to address up to 44 bit +sized offsets even on 32 bit machines on decompression. Still unable to use +greater than 2GB windows on 32 bit machines and unsure if this is fixable. +* Reworked the STDIN code to use an anonymous mmap and read in stdin into this +to make it possible to compress from STDIN without the need for temporary +files. As the file size is not known in advance, memory allocation is set to +large and byte width to equivalent size. +* Reallocation of ram where possible to minimise risk of running out of memory +in the middle of a compression phase, and flushing to disk to empty dirty ram +for the same reason. +* More robust fatal warnings. +* Numerous cleanups and tidying of code and addition of comments. +* Updated documentation to reflect changes. + OCTOBER 2010, version 0.47, Con Kolivas * Fix the symlinking problem when DESTDIR is in use reported by a billion people. diff --git a/README b/README index cf45c0f..44dc9e9 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -lrzip v0.50 +lrzip v0.5 Long Range ZIP or Lzma RZIP diff --git a/WHATS-NEW b/WHATS-NEW index 1a6552b..5e704b0 100644 --- a/WHATS-NEW +++ b/WHATS-NEW @@ -7,7 +7,8 @@ Updated a lot of the stdin code. The most common scenario of compression from stdin now works without temporary files. Lots more meaningful warnings if failure occurs. -Lots of code cleanups and tidying. +May be able to decompress files on 32 bit machines that were compressed on 64 +bit machines with >2GB windows now if there is enough ram. lrzip-0.46 diff --git a/configure b/configure index 593927e..9e27bc8 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for lrzip 0.47. +# Generated by GNU Autoconf 2.67 for lrzip 0.5. # # Report bugs to . # @@ -551,9 +551,9 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='lrzip' -PACKAGE_TARNAME='lrzip-0.47' -PACKAGE_VERSION='0.47' -PACKAGE_STRING='lrzip 0.47' +PACKAGE_TARNAME='lrzip-0.5' +PACKAGE_VERSION='0.5' +PACKAGE_STRING='lrzip 0.5' PACKAGE_BUGREPORT='kernel@kolivas.org' PACKAGE_URL='' @@ -1221,7 +1221,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures lrzip 0.47 to adapt to many kinds of systems. +\`configure' configures lrzip 0.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1269,7 +1269,7 @@ Fine tuning of the installation directories: --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/lrzip-0.47] + --docdir=DIR documentation root [DATAROOTDIR/doc/lrzip-0.5] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1286,7 +1286,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of lrzip 0.47:";; + short | recursive ) echo "Configuration of lrzip 0.5:";; esac cat <<\_ACEOF @@ -1375,7 +1375,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -lrzip configure 0.47 +lrzip configure 0.5 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2014,7 +2014,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by lrzip $as_me 0.47, which was +It was created by lrzip $as_me 0.5, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ @@ -5324,7 +5324,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by lrzip $as_me 0.47, which was +This file was extended by lrzip $as_me 0.5, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -5386,7 +5386,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -lrzip config.status 0.47 +lrzip config.status 0.5 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 715d32c..24fd771 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([lrzip],[0.47],[kernel@kolivas.org],[lrzip-0.47]) +AC_INIT([lrzip],[0.5],[kernel@kolivas.org],[lrzip-0.5]) AC_CONFIG_HEADER(config.h) # see what our system is! AC_CANONICAL_HOST diff --git a/main.c b/main.c index a99c026..d285a92 100644 --- a/main.c +++ b/main.c @@ -136,7 +136,7 @@ static void preserve_perms(int fd_in, int fd_out) fchown(fd_out, st.st_uid, st.st_gid); } -/* Open a temporary outputfile for stdout compression */ +/* Open a temporary outputfile to emulate stdout */ static int open_tmpoutfile(void) { int fd_out; @@ -563,9 +563,8 @@ int main(int argc, char *argv[]) control.suffix = ".lrz"; control.outdir = NULL; - if (strstr(argv[0], "lrunzip")) { + if (strstr(argv[0], "lrunzip")) control.flags |= FLAG_DECOMPRESS; - } control.compression_level = 7; control.ramsize = get_ram() / 104858ull; /* hundreds of megabytes */