mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-01 08:27:59 +00:00
Virgin import (trimmed) of Bzip2 version 1.0.1.
This commit is contained in:
commit
df9de0eba1
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/bzip2/dist/; revision=78556 svn path=/vendor/bzip2/1.0.1/; revision=78558; tag=vendor/bzip2/1.0.1
167
contrib/bzip2/CHANGES
Normal file
167
contrib/bzip2/CHANGES
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
|
||||
0.9.0
|
||||
~~~~~
|
||||
First version.
|
||||
|
||||
|
||||
0.9.0a
|
||||
~~~~~~
|
||||
Removed 'ranlib' from Makefile, since most modern Unix-es
|
||||
don't need it, or even know about it.
|
||||
|
||||
|
||||
0.9.0b
|
||||
~~~~~~
|
||||
Fixed a problem with error reporting in bzip2.c. This does not effect
|
||||
the library in any way. Problem is: versions 0.9.0 and 0.9.0a (of the
|
||||
program proper) compress and decompress correctly, but give misleading
|
||||
error messages (internal panics) when an I/O error occurs, instead of
|
||||
reporting the problem correctly. This shouldn't give any data loss
|
||||
(as far as I can see), but is confusing.
|
||||
|
||||
Made the inline declarations disappear for non-GCC compilers.
|
||||
|
||||
|
||||
0.9.0c
|
||||
~~~~~~
|
||||
Fixed some problems in the library pertaining to some boundary cases.
|
||||
This makes the library behave more correctly in those situations. The
|
||||
fixes apply only to features (calls and parameters) not used by
|
||||
bzip2.c, so the non-fixedness of them in previous versions has no
|
||||
effect on reliability of bzip2.c.
|
||||
|
||||
In bzlib.c:
|
||||
* made zero-length BZ_FLUSH work correctly in bzCompress().
|
||||
* fixed bzWrite/bzRead to ignore zero-length requests.
|
||||
* fixed bzread to correctly handle read requests after EOF.
|
||||
* wrong parameter order in call to bzDecompressInit in
|
||||
bzBuffToBuffDecompress. Fixed.
|
||||
|
||||
In compress.c:
|
||||
* changed setting of nGroups in sendMTFValues() so as to
|
||||
do a bit better on small files. This _does_ effect
|
||||
bzip2.c.
|
||||
|
||||
|
||||
0.9.5a
|
||||
~~~~~~
|
||||
Major change: add a fallback sorting algorithm (blocksort.c)
|
||||
to give reasonable behaviour even for very repetitive inputs.
|
||||
Nuked --repetitive-best and --repetitive-fast since they are
|
||||
no longer useful.
|
||||
|
||||
Minor changes: mostly a whole bunch of small changes/
|
||||
bugfixes in the driver (bzip2.c). Changes pertaining to the
|
||||
user interface are:
|
||||
|
||||
allow decompression of symlink'd files to stdout
|
||||
decompress/test files even without .bz2 extension
|
||||
give more accurate error messages for I/O errors
|
||||
when compressing/decompressing to stdout, don't catch control-C
|
||||
read flags from BZIP2 and BZIP environment variables
|
||||
decline to break hard links to a file unless forced with -f
|
||||
allow -c flag even with no filenames
|
||||
preserve file ownerships as far as possible
|
||||
make -s -1 give the expected block size (100k)
|
||||
add a flag -q --quiet to suppress nonessential warnings
|
||||
stop decoding flags after --, so files beginning in - can be handled
|
||||
resolved inconsistent naming: bzcat or bz2cat ?
|
||||
bzip2 --help now returns 0
|
||||
|
||||
Programming-level changes are:
|
||||
|
||||
fixed syntax error in GET_LL4 for Borland C++ 5.02
|
||||
let bzBuffToBuffDecompress return BZ_DATA_ERROR{_MAGIC}
|
||||
fix overshoot of mode-string end in bzopen_or_bzdopen
|
||||
wrapped bzlib.h in #ifdef __cplusplus ... extern "C" { ... }
|
||||
close file handles under all error conditions
|
||||
added minor mods so it compiles with DJGPP out of the box
|
||||
fixed Makefile so it doesn't give problems with BSD make
|
||||
fix uninitialised memory reads in dlltest.c
|
||||
|
||||
0.9.5b
|
||||
~~~~~~
|
||||
Open stdin/stdout in binary mode for DJGPP.
|
||||
|
||||
0.9.5c
|
||||
~~~~~~
|
||||
Changed BZ_N_OVERSHOOT to be ... + 2 instead of ... + 1. The + 1
|
||||
version could cause the sorted order to be wrong in some extremely
|
||||
obscure cases. Also changed setting of quadrant in blocksort.c.
|
||||
|
||||
0.9.5d
|
||||
~~~~~~
|
||||
The only functional change is to make bzlibVersion() in the library
|
||||
return the correct string. This has no effect whatsoever on the
|
||||
functioning of the bzip2 program or library. Added a couple of casts
|
||||
so the library compiles without warnings at level 3 in MS Visual
|
||||
Studio 6.0. Included a Y2K statement in the file Y2K_INFO. All other
|
||||
changes are minor documentation changes.
|
||||
|
||||
1.0
|
||||
~~~
|
||||
Several minor bugfixes and enhancements:
|
||||
|
||||
* Large file support. The library uses 64-bit counters to
|
||||
count the volume of data passing through it. bzip2.c
|
||||
is now compiled with -D_FILE_OFFSET_BITS=64 to get large
|
||||
file support from the C library. -v correctly prints out
|
||||
file sizes greater than 4 gigabytes. All these changes have
|
||||
been made without assuming a 64-bit platform or a C compiler
|
||||
which supports 64-bit ints, so, except for the C library
|
||||
aspect, they are fully portable.
|
||||
|
||||
* Decompression robustness. The library/program should be
|
||||
robust to any corruption of compressed data, detecting and
|
||||
handling _all_ corruption, instead of merely relying on
|
||||
the CRCs. What this means is that the program should
|
||||
never crash, given corrupted data, and the library should
|
||||
always return BZ_DATA_ERROR.
|
||||
|
||||
* Fixed an obscure race-condition bug only ever observed on
|
||||
Solaris, in which, if you were very unlucky and issued
|
||||
control-C at exactly the wrong time, both input and output
|
||||
files would be deleted.
|
||||
|
||||
* Don't run out of file handles on test/decompression when
|
||||
large numbers of files have invalid magic numbers.
|
||||
|
||||
* Avoid library namespace pollution. Prefix all exported
|
||||
symbols with BZ2_.
|
||||
|
||||
* Minor sorting enhancements from my DCC2000 paper.
|
||||
|
||||
* Advance the version number to 1.0, so as to counteract the
|
||||
(false-in-this-case) impression some people have that programs
|
||||
with version numbers less than 1.0 are in someway, experimental,
|
||||
pre-release versions.
|
||||
|
||||
* Create an initial Makefile-libbz2_so to build a shared library.
|
||||
Yes, I know I should really use libtool et al ...
|
||||
|
||||
* Make the program exit with 2 instead of 0 when decompression
|
||||
fails due to a bad magic number (ie, an invalid bzip2 header).
|
||||
Also exit with 1 (as the manual claims :-) whenever a diagnostic
|
||||
message would have been printed AND the corresponding operation
|
||||
is aborted, for example
|
||||
bzip2: Output file xx already exists.
|
||||
When a diagnostic message is printed but the operation is not
|
||||
aborted, for example
|
||||
bzip2: Can't guess original name for wurble -- using wurble.out
|
||||
then the exit value 0 is returned, unless some other problem is
|
||||
also detected.
|
||||
|
||||
I think it corresponds more closely to what the manual claims now.
|
||||
|
||||
|
||||
1.0.1
|
||||
~~~~~
|
||||
* Modified dlltest.c so it uses the new BZ2_ naming scheme.
|
||||
* Modified makefile-msc to fix minor build probs on Win2k.
|
||||
* Updated README.COMPILATION.PROBLEMS.
|
||||
|
||||
There are no functionality changes or bug fixes relative to version
|
||||
1.0.0. This is just a documentation update + a fix for minor Win32
|
||||
build problems. For almost everyone, upgrading from 1.0.0 to 1.0.1 is
|
||||
utterly pointless. Don't bother.
|
39
contrib/bzip2/LICENSE
Normal file
39
contrib/bzip2/LICENSE
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
This program, "bzip2" and associated library "libbzip2", are
|
||||
copyright (C) 1996-2000 Julian R Seward. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, Cambridge, UK.
|
||||
jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0 of 21 March 2000
|
||||
|
141
contrib/bzip2/Makefile
Normal file
141
contrib/bzip2/Makefile
Normal file
@ -0,0 +1,141 @@
|
||||
|
||||
SHELL=/bin/sh
|
||||
CC=gcc
|
||||
BIGFILES=-D_FILE_OFFSET_BITS=64
|
||||
CFLAGS=-Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce $(BIGFILES)
|
||||
|
||||
OBJS= blocksort.o \
|
||||
huffman.o \
|
||||
crctable.o \
|
||||
randtable.o \
|
||||
compress.o \
|
||||
decompress.o \
|
||||
bzlib.o
|
||||
|
||||
all: libbz2.a bzip2 bzip2recover test
|
||||
|
||||
bzip2: libbz2.a bzip2.o
|
||||
$(CC) $(CFLAGS) -o bzip2 bzip2.o -L. -lbz2
|
||||
|
||||
bzip2recover: bzip2recover.o
|
||||
$(CC) $(CFLAGS) -o bzip2recover bzip2recover.o
|
||||
|
||||
libbz2.a: $(OBJS)
|
||||
rm -f libbz2.a
|
||||
ar cq libbz2.a $(OBJS)
|
||||
@if ( test -f /usr/bin/ranlib -o -f /bin/ranlib -o \
|
||||
-f /usr/ccs/bin/ranlib ) ; then \
|
||||
echo ranlib libbz2.a ; \
|
||||
ranlib libbz2.a ; \
|
||||
fi
|
||||
|
||||
test: bzip2
|
||||
@cat words1
|
||||
./bzip2 -1 < sample1.ref > sample1.rb2
|
||||
./bzip2 -2 < sample2.ref > sample2.rb2
|
||||
./bzip2 -3 < sample3.ref > sample3.rb2
|
||||
./bzip2 -d < sample1.bz2 > sample1.tst
|
||||
./bzip2 -d < sample2.bz2 > sample2.tst
|
||||
./bzip2 -ds < sample3.bz2 > sample3.tst
|
||||
cmp sample1.bz2 sample1.rb2
|
||||
cmp sample2.bz2 sample2.rb2
|
||||
cmp sample3.bz2 sample3.rb2
|
||||
cmp sample1.tst sample1.ref
|
||||
cmp sample2.tst sample2.ref
|
||||
cmp sample3.tst sample3.ref
|
||||
@cat words3
|
||||
|
||||
PREFIX=/usr
|
||||
|
||||
install: bzip2 bzip2recover
|
||||
if ( test ! -d $(PREFIX)/bin ) ; then mkdir $(PREFIX)/bin ; fi
|
||||
if ( test ! -d $(PREFIX)/lib ) ; then mkdir $(PREFIX)/lib ; fi
|
||||
if ( test ! -d $(PREFIX)/man ) ; then mkdir $(PREFIX)/man ; fi
|
||||
if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir $(PREFIX)/man/man1 ; fi
|
||||
if ( test ! -d $(PREFIX)/include ) ; then mkdir $(PREFIX)/include ; fi
|
||||
cp -f bzip2 $(PREFIX)/bin/bzip2
|
||||
cp -f bzip2 $(PREFIX)/bin/bunzip2
|
||||
cp -f bzip2 $(PREFIX)/bin/bzcat
|
||||
cp -f bzip2recover $(PREFIX)/bin/bzip2recover
|
||||
chmod a+x $(PREFIX)/bin/bzip2
|
||||
chmod a+x $(PREFIX)/bin/bunzip2
|
||||
chmod a+x $(PREFIX)/bin/bzcat
|
||||
chmod a+x $(PREFIX)/bin/bzip2recover
|
||||
cp -f bzip2.1 $(PREFIX)/man/man1
|
||||
chmod a+r $(PREFIX)/man/man1/bzip2.1
|
||||
cp -f bzlib.h $(PREFIX)/include
|
||||
chmod a+r $(PREFIX)/include/bzlib.h
|
||||
cp -f libbz2.a $(PREFIX)/lib
|
||||
chmod a+r $(PREFIX)/lib/libbz2.a
|
||||
|
||||
clean:
|
||||
rm -f *.o libbz2.a bzip2 bzip2recover \
|
||||
sample1.rb2 sample2.rb2 sample3.rb2 \
|
||||
sample1.tst sample2.tst sample3.tst
|
||||
|
||||
blocksort.o: blocksort.c
|
||||
@cat words0
|
||||
$(CC) $(CFLAGS) -c blocksort.c
|
||||
huffman.o: huffman.c
|
||||
$(CC) $(CFLAGS) -c huffman.c
|
||||
crctable.o: crctable.c
|
||||
$(CC) $(CFLAGS) -c crctable.c
|
||||
randtable.o: randtable.c
|
||||
$(CC) $(CFLAGS) -c randtable.c
|
||||
compress.o: compress.c
|
||||
$(CC) $(CFLAGS) -c compress.c
|
||||
decompress.o: decompress.c
|
||||
$(CC) $(CFLAGS) -c decompress.c
|
||||
bzlib.o: bzlib.c
|
||||
$(CC) $(CFLAGS) -c bzlib.c
|
||||
bzip2.o: bzip2.c
|
||||
$(CC) $(CFLAGS) -c bzip2.c
|
||||
bzip2recover.o: bzip2recover.c
|
||||
$(CC) $(CFLAGS) -c bzip2recover.c
|
||||
|
||||
DISTNAME=bzip2-1.0.1
|
||||
tarfile:
|
||||
rm -f $(DISTNAME)
|
||||
ln -sf . $(DISTNAME)
|
||||
tar cvf $(DISTNAME).tar \
|
||||
$(DISTNAME)/blocksort.c \
|
||||
$(DISTNAME)/huffman.c \
|
||||
$(DISTNAME)/crctable.c \
|
||||
$(DISTNAME)/randtable.c \
|
||||
$(DISTNAME)/compress.c \
|
||||
$(DISTNAME)/decompress.c \
|
||||
$(DISTNAME)/bzlib.c \
|
||||
$(DISTNAME)/bzip2.c \
|
||||
$(DISTNAME)/bzip2recover.c \
|
||||
$(DISTNAME)/bzlib.h \
|
||||
$(DISTNAME)/bzlib_private.h \
|
||||
$(DISTNAME)/Makefile \
|
||||
$(DISTNAME)/manual.texi \
|
||||
$(DISTNAME)/manual.ps \
|
||||
$(DISTNAME)/LICENSE \
|
||||
$(DISTNAME)/bzip2.1 \
|
||||
$(DISTNAME)/bzip2.1.preformatted \
|
||||
$(DISTNAME)/bzip2.txt \
|
||||
$(DISTNAME)/words0 \
|
||||
$(DISTNAME)/words1 \
|
||||
$(DISTNAME)/words2 \
|
||||
$(DISTNAME)/words3 \
|
||||
$(DISTNAME)/sample1.ref \
|
||||
$(DISTNAME)/sample2.ref \
|
||||
$(DISTNAME)/sample3.ref \
|
||||
$(DISTNAME)/sample1.bz2 \
|
||||
$(DISTNAME)/sample2.bz2 \
|
||||
$(DISTNAME)/sample3.bz2 \
|
||||
$(DISTNAME)/dlltest.c \
|
||||
$(DISTNAME)/*.html \
|
||||
$(DISTNAME)/README \
|
||||
$(DISTNAME)/README.COMPILATION.PROBLEMS \
|
||||
$(DISTNAME)/CHANGES \
|
||||
$(DISTNAME)/libbz2.def \
|
||||
$(DISTNAME)/libbz2.dsp \
|
||||
$(DISTNAME)/dlltest.dsp \
|
||||
$(DISTNAME)/makefile.msc \
|
||||
$(DISTNAME)/Y2K_INFO \
|
||||
$(DISTNAME)/unzcrash.c \
|
||||
$(DISTNAME)/spewG.c \
|
||||
$(DISTNAME)/Makefile-libbz2_so
|
43
contrib/bzip2/Makefile-libbz2_so
Normal file
43
contrib/bzip2/Makefile-libbz2_so
Normal file
@ -0,0 +1,43 @@
|
||||
|
||||
# This Makefile builds a shared version of the library,
|
||||
# libbz2.so.1.0.1, with soname libbz2.so.1.0,
|
||||
# at least on x86-Linux (RedHat 5.2),
|
||||
# with gcc-2.7.2.3. Please see the README file for some
|
||||
# important info about building the library like this.
|
||||
|
||||
SHELL=/bin/sh
|
||||
CC=gcc
|
||||
BIGFILES=-D_FILE_OFFSET_BITS=64
|
||||
CFLAGS=-fpic -fPIC -Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce $(BIGFILES)
|
||||
|
||||
OBJS= blocksort.o \
|
||||
huffman.o \
|
||||
crctable.o \
|
||||
randtable.o \
|
||||
compress.o \
|
||||
decompress.o \
|
||||
bzlib.o
|
||||
|
||||
all: $(OBJS)
|
||||
$(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.1 $(OBJS)
|
||||
$(CC) $(CFLAGS) -o bzip2-shared bzip2.c libbz2.so.1.0.1
|
||||
rm -f libbz2.so.1.0
|
||||
ln -s libbz2.so.1.0.1 libbz2.so.1.0
|
||||
|
||||
clean:
|
||||
rm -f $(OBJS) bzip2.o libbz2.so.1.0.1 libbz2.so.1.0 bzip2-shared
|
||||
|
||||
blocksort.o: blocksort.c
|
||||
$(CC) $(CFLAGS) -c blocksort.c
|
||||
huffman.o: huffman.c
|
||||
$(CC) $(CFLAGS) -c huffman.c
|
||||
crctable.o: crctable.c
|
||||
$(CC) $(CFLAGS) -c crctable.c
|
||||
randtable.o: randtable.c
|
||||
$(CC) $(CFLAGS) -c randtable.c
|
||||
compress.o: compress.c
|
||||
$(CC) $(CFLAGS) -c compress.c
|
||||
decompress.o: decompress.c
|
||||
$(CC) $(CFLAGS) -c decompress.c
|
||||
bzlib.o: bzlib.c
|
||||
$(CC) $(CFLAGS) -c bzlib.c
|
166
contrib/bzip2/README
Normal file
166
contrib/bzip2/README
Normal file
@ -0,0 +1,166 @@
|
||||
|
||||
This is the README for bzip2, a block-sorting file compressor, version
|
||||
1.0. This version is fully compatible with the previous public
|
||||
releases, bzip2-0.1pl2, bzip2-0.9.0 and bzip2-0.9.5.
|
||||
|
||||
bzip2-1.0 is distributed under a BSD-style license. For details,
|
||||
see the file LICENSE.
|
||||
|
||||
Complete documentation is available in Postscript form (manual.ps) or
|
||||
html (manual_toc.html). A plain-text version of the manual page is
|
||||
available as bzip2.txt. A statement about Y2K issues is now included
|
||||
in the file Y2K_INFO.
|
||||
|
||||
|
||||
HOW TO BUILD -- UNIX
|
||||
|
||||
Type `make'. This builds the library libbz2.a and then the
|
||||
programs bzip2 and bzip2recover. Six self-tests are run.
|
||||
If the self-tests complete ok, carry on to installation:
|
||||
|
||||
To install in /usr/bin, /usr/lib, /usr/man and /usr/include, type
|
||||
make install
|
||||
To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type
|
||||
make install PREFIX=/xxx/yyy
|
||||
If you are (justifiably) paranoid and want to see what 'make install'
|
||||
is going to do, you can first do
|
||||
make -n install or
|
||||
make -n install PREFIX=/xxx/yyy respectively.
|
||||
The -n instructs make to show the commands it would execute, but
|
||||
not actually execute them.
|
||||
|
||||
|
||||
HOW TO BUILD -- UNIX, shared library libbz2.so.
|
||||
|
||||
Do 'make -f Makefile-libbz2_so'. This Makefile seems to work for
|
||||
Linux-ELF (RedHat 5.2 on an x86 box), with gcc. I make no claims
|
||||
that it works for any other platform, though I suspect it probably
|
||||
will work for most platforms employing both ELF and gcc.
|
||||
|
||||
bzip2-shared, a client of the shared library, is also build, but
|
||||
not self-tested. So I suggest you also build using the normal
|
||||
Makefile, since that conducts a self-test.
|
||||
|
||||
Important note for people upgrading .so's from 0.9.0/0.9.5 to
|
||||
version 1.0. All the functions in the library have been renamed,
|
||||
from (eg) bzCompress to BZ2_bzCompress, to avoid namespace pollution.
|
||||
Unfortunately this means that the libbz2.so created by
|
||||
Makefile-libbz2_so will not work with any program which used an
|
||||
older version of the library. Sorry. I do encourage library
|
||||
clients to make the effort to upgrade to use version 1.0, since
|
||||
it is both faster and more robust than previous versions.
|
||||
|
||||
|
||||
HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc.
|
||||
|
||||
It's difficult for me to support compilation on all these platforms.
|
||||
My approach is to collect binaries for these platforms, and put them
|
||||
on the master web page (http://sourceware.cygnus.com/bzip2). Look
|
||||
there. However (FWIW), bzip2-1.0 is very standard ANSI C and should
|
||||
compile unmodified with MS Visual C. For Win32, there is one
|
||||
important caveat: in bzip2.c, you must set BZ_UNIX to 0 and
|
||||
BZ_LCCWIN32 to 1 before building. If you have difficulties building,
|
||||
you might want to read README.COMPILATION.PROBLEMS.
|
||||
|
||||
|
||||
VALIDATION
|
||||
|
||||
Correct operation, in the sense that a compressed file can always be
|
||||
decompressed to reproduce the original, is obviously of paramount
|
||||
importance. To validate bzip2, I used a modified version of Mark
|
||||
Nelson's churn program. Churn is an automated test driver which
|
||||
recursively traverses a directory structure, using bzip2 to compress
|
||||
and then decompress each file it encounters, and checking that the
|
||||
decompressed data is the same as the original. There are more details
|
||||
in Section 4 of the user guide.
|
||||
|
||||
|
||||
|
||||
Please read and be aware of the following:
|
||||
|
||||
WARNING:
|
||||
|
||||
This program (attempts to) compress data by performing several
|
||||
non-trivial transformations on it. Unless you are 100% familiar
|
||||
with *all* the algorithms contained herein, and with the
|
||||
consequences of modifying them, you should NOT meddle with the
|
||||
compression or decompression machinery. Incorrect changes can and
|
||||
very likely *will* lead to disastrous loss of data.
|
||||
|
||||
|
||||
DISCLAIMER:
|
||||
|
||||
I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE
|
||||
USE OF THIS PROGRAM, HOWSOEVER CAUSED.
|
||||
|
||||
Every compression of a file implies an assumption that the
|
||||
compressed file can be decompressed to reproduce the original.
|
||||
Great efforts in design, coding and testing have been made to
|
||||
ensure that this program works correctly. However, the complexity
|
||||
of the algorithms, and, in particular, the presence of various
|
||||
special cases in the code which occur with very low but non-zero
|
||||
probability make it impossible to rule out the possibility of bugs
|
||||
remaining in the program. DO NOT COMPRESS ANY DATA WITH THIS
|
||||
PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER
|
||||
SMALL, THAT THE DATA WILL NOT BE RECOVERABLE.
|
||||
|
||||
That is not to say this program is inherently unreliable. Indeed,
|
||||
I very much hope the opposite is true. bzip2 has been carefully
|
||||
constructed and extensively tested.
|
||||
|
||||
|
||||
PATENTS:
|
||||
|
||||
To the best of my knowledge, bzip2 does not use any patented
|
||||
algorithms. However, I do not have the resources available to
|
||||
carry out a full patent search. Therefore I cannot give any
|
||||
guarantee of the above statement.
|
||||
|
||||
End of legalities.
|
||||
|
||||
|
||||
WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ?
|
||||
|
||||
* Approx 10% faster compression, 30% faster decompression
|
||||
* -t (test mode) is a lot quicker
|
||||
* Can decompress concatenated compressed files
|
||||
* Programming interface, so programs can directly read/write .bz2 files
|
||||
* Less restrictive (BSD-style) licensing
|
||||
* Flag handling more compatible with GNU gzip
|
||||
* Much more documentation, i.e., a proper user manual
|
||||
* Hopefully, improved portability (at least of the library)
|
||||
|
||||
WHAT'S NEW IN 0.9.5 ?
|
||||
|
||||
* Compression speed is much less sensitive to the input
|
||||
data than in previous versions. Specifically, the very
|
||||
slow performance caused by repetitive data is fixed.
|
||||
* Many small improvements in file and flag handling.
|
||||
* A Y2K statement.
|
||||
|
||||
WHAT'S NEW IN 1.0
|
||||
|
||||
See the CHANGES file.
|
||||
|
||||
I hope you find bzip2 useful. Feel free to contact me at
|
||||
jseward@acm.org
|
||||
if you have any suggestions or queries. Many people mailed me with
|
||||
comments, suggestions and patches after the releases of bzip-0.15,
|
||||
bzip-0.21, bzip2-0.1pl2 and bzip2-0.9.0, and the changes in bzip2 are
|
||||
largely a result of this feedback. I thank you for your comments.
|
||||
|
||||
At least for the time being, bzip2's "home" is (or can be reached via)
|
||||
http://www.muraroa.demon.co.uk.
|
||||
|
||||
Julian Seward
|
||||
jseward@acm.org
|
||||
|
||||
Cambridge, UK
|
||||
18 July 1996 (version 0.15)
|
||||
25 August 1996 (version 0.21)
|
||||
7 August 1997 (bzip2, version 0.1)
|
||||
29 August 1997 (bzip2, version 0.1pl2)
|
||||
23 August 1998 (bzip2, version 0.9.0)
|
||||
8 June 1999 (bzip2, version 0.9.5)
|
||||
4 Sept 1999 (bzip2, version 0.9.5d)
|
||||
5 May 2000 (bzip2, version 1.0pre8)
|
130
contrib/bzip2/README.COMPILATION.PROBLEMS
Normal file
130
contrib/bzip2/README.COMPILATION.PROBLEMS
Normal file
@ -0,0 +1,130 @@
|
||||
|
||||
bzip2-1.0 should compile without problems on the vast majority of
|
||||
platforms. Using the supplied Makefile, I've built and tested it
|
||||
myself for x86-linux, sparc-solaris, alpha-linux, x86-cygwin32 and
|
||||
alpha-tru64unix. With makefile.msc, Visual C++ 6.0 and nmake, you can
|
||||
build a native Win32 version too. Large file support seems to work
|
||||
correctly on at least alpha-tru64unix and x86-cygwin32 (on Windows
|
||||
2000).
|
||||
|
||||
When I say "large file" I mean a file of size 2,147,483,648 (2^31)
|
||||
bytes or above. Many older OSs can't handle files above this size,
|
||||
but many newer ones can. Large files are pretty huge -- most files
|
||||
you'll encounter are not Large Files.
|
||||
|
||||
Earlier versions of bzip2 (0.1, 0.9.0, 0.9.5) compiled on a wide
|
||||
variety of platforms without difficulty, and I hope this version will
|
||||
continue in that tradition. However, in order to support large files,
|
||||
I've had to include the define -D_FILE_OFFSET_BITS=64 in the Makefile.
|
||||
This can cause problems.
|
||||
|
||||
The technique of adding -D_FILE_OFFSET_BITS=64 to get large file
|
||||
support is, as far as I know, the Recommended Way to get correct large
|
||||
file support. For more details, see the Large File Support
|
||||
Specification, published by the Large File Summit, at
|
||||
http://www.sas.com/standard/large.file/
|
||||
|
||||
As a general comment, if you get compilation errors which you think
|
||||
are related to large file support, try removing the above define from
|
||||
the Makefile, ie, delete the line
|
||||
BIGFILES=-D_FILE_OFFSET_BITS=64
|
||||
from the Makefile, and do 'make clean ; make'. This will give you a
|
||||
version of bzip2 without large file support, which, for most
|
||||
applications, is probably not a problem.
|
||||
|
||||
Alternatively, try some of the platform-specific hints listed below.
|
||||
|
||||
You can use the spewG.c program to generate huge files to test bzip2's
|
||||
large file support, if you are feeling paranoid. Be aware though that
|
||||
any compilation problems which affect bzip2 will also affect spewG.c,
|
||||
alas.
|
||||
|
||||
|
||||
Known problems as of 1.0pre8:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* HP/UX 10.20 and 11.00, using gcc (2.7.2.3 and 2.95.2): A large
|
||||
number of warnings appear, including the following:
|
||||
|
||||
/usr/include/sys/resource.h: In function `getrlimit':
|
||||
/usr/include/sys/resource.h:168:
|
||||
warning: implicit declaration of function `__getrlimit64'
|
||||
/usr/include/sys/resource.h: In function `setrlimit':
|
||||
/usr/include/sys/resource.h:170:
|
||||
warning: implicit declaration of function `__setrlimit64'
|
||||
|
||||
This would appear to be a problem with large file support, header
|
||||
files and gcc. gcc may or may not give up at this point. If it
|
||||
fails, you might be able to improve matters by adding
|
||||
-D__STDC_EXT__=1
|
||||
to the BIGFILES variable in the Makefile (ie, change its definition
|
||||
to
|
||||
BIGFILES=-D_FILE_OFFSET_BITS=64 -D__STDC_EXT__=1
|
||||
|
||||
Even if gcc does produce a binary which appears to work (ie passes
|
||||
its self-tests), you might want to test it to see if it works properly
|
||||
on large files.
|
||||
|
||||
|
||||
* HP/UX 10.20 and 11.00, using HP's cc compiler.
|
||||
|
||||
No specific problems for this combination, except that you'll need to
|
||||
specify the -Ae flag, and zap the gcc-specific stuff
|
||||
-Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce.
|
||||
You should retain -D_FILE_OFFSET_BITS=64 in order to get large
|
||||
file support -- which is reported to work ok for this HP/UX + cc
|
||||
combination.
|
||||
|
||||
|
||||
* SunOS 4.1.X.
|
||||
|
||||
Amazingly, there are still people out there using this venerable old
|
||||
banger. I shouldn't be too rude -- I started life on SunOS, and
|
||||
it was a pretty darn good OS, way back then. Anyway:
|
||||
|
||||
SunOS doesn't seem to have strerror(), so you'll have to use
|
||||
perror(), perhaps by doing adding this (warning: UNTESTED CODE):
|
||||
|
||||
char* strerror ( int errnum )
|
||||
{
|
||||
if (errnum < 0 || errnum >= sys_nerr)
|
||||
return "Unknown error";
|
||||
else
|
||||
return sys_errlist[errnum];
|
||||
}
|
||||
|
||||
Or you could comment out the relevant calls to strerror; they're
|
||||
not mission-critical. Or you could upgrade to Solaris. Ha ha ha!
|
||||
(what?? you think I've got Bad Attitude?)
|
||||
|
||||
|
||||
* Making a shared library on Solaris. (Not really a compilation
|
||||
problem, but many people ask ...)
|
||||
|
||||
Firstly, if you have Solaris 8, either you have libbz2.so already
|
||||
on your system, or you can install it from the Solaris CD.
|
||||
|
||||
Secondly, be aware that there are potential naming conflicts
|
||||
between the .so file supplied with Solaris 8, and the .so file
|
||||
which Makefile-libbz2_so will make. Makefile-libbz2_so creates
|
||||
a .so which has the names which I intend to be "official" as
|
||||
of version 1.0.0 and onwards. Unfortunately, the .so in
|
||||
Solaris 8 appeared before I decided on the final names, so
|
||||
the two libraries are incompatible. We have since communicated
|
||||
and I hope that the problems will have been solved in the next
|
||||
version of Solaris, whenever that might appear.
|
||||
|
||||
All that said: you might be able to get somewhere
|
||||
by finding the line in Makefile-libbz2_so which says
|
||||
|
||||
$(CC) -shared -Wl,-soname -Wl,libbz2.so.1.0 -o libbz2.so.1.0.1 $(OBJS)
|
||||
|
||||
and replacing with
|
||||
|
||||
($CC) -G -shared -o libbz2.so.1.0.1 -h libbz2.so.1.0 $(OBJS)
|
||||
|
||||
If gcc objects to the combination -fpic -fPIC, get rid of
|
||||
the second one, leaving just "-fpic".
|
||||
|
||||
|
||||
That's the end of the currently known compilation problems.
|
34
contrib/bzip2/Y2K_INFO
Normal file
34
contrib/bzip2/Y2K_INFO
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
Y2K status of bzip2 and libbzip2, versions 0.1, 0.9.0 and 0.9.5
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Informally speaking:
|
||||
bzip2 is a compression program built on top of libbzip2,
|
||||
a library which does the real work of compression and
|
||||
decompression. As far as I am aware, libbzip2 does not have
|
||||
any date-related code at all.
|
||||
|
||||
bzip2 itself copies dates from source to destination files
|
||||
when compressing or decompressing, using the 'stat' and 'utime'
|
||||
UNIX system calls. It doesn't examine, manipulate or store the
|
||||
dates in any way. So as far as I can see, there shouldn't be any
|
||||
problem with bzip2 providing 'stat' and 'utime' work correctly
|
||||
on your system.
|
||||
|
||||
On non-unix platforms (those for which BZ_UNIX in bzip2.c is
|
||||
not set to 1), bzip2 doesn't even do the date copying.
|
||||
|
||||
Overall, informally speaking, I don't think bzip2 or libbzip2
|
||||
have a Y2K problem.
|
||||
|
||||
Formally speaking:
|
||||
I am not prepared to offer you any assurance whatsoever
|
||||
regarding Y2K issues in my software. You alone assume the
|
||||
entire risk of using the software. The disclaimer of liability
|
||||
in the LICENSE file in the bzip2 source distribution continues
|
||||
to apply on this issue as with every other issue pertaining
|
||||
to the software.
|
||||
|
||||
Julian Seward
|
||||
Cambridge, UK
|
||||
25 August 1999
|
1134
contrib/bzip2/blocksort.c
Normal file
1134
contrib/bzip2/blocksort.c
Normal file
File diff suppressed because it is too large
Load Diff
439
contrib/bzip2/bzip2.1
Normal file
439
contrib/bzip2/bzip2.1
Normal file
@ -0,0 +1,439 @@
|
||||
.PU
|
||||
.TH bzip2 1
|
||||
.SH NAME
|
||||
bzip2, bunzip2 \- a block-sorting file compressor, v1.0
|
||||
.br
|
||||
bzcat \- decompresses files to stdout
|
||||
.br
|
||||
bzip2recover \- recovers data from damaged bzip2 files
|
||||
|
||||
.SH SYNOPSIS
|
||||
.ll +8
|
||||
.B bzip2
|
||||
.RB [ " \-cdfkqstvzVL123456789 " ]
|
||||
[
|
||||
.I "filenames \&..."
|
||||
]
|
||||
.ll -8
|
||||
.br
|
||||
.B bunzip2
|
||||
.RB [ " \-fkvsVL " ]
|
||||
[
|
||||
.I "filenames \&..."
|
||||
]
|
||||
.br
|
||||
.B bzcat
|
||||
.RB [ " \-s " ]
|
||||
[
|
||||
.I "filenames \&..."
|
||||
]
|
||||
.br
|
||||
.B bzip2recover
|
||||
.I "filename"
|
||||
|
||||
.SH DESCRIPTION
|
||||
.I bzip2
|
||||
compresses files using the Burrows-Wheeler block sorting
|
||||
text compression algorithm, and Huffman coding. Compression is
|
||||
generally considerably better than that achieved by more conventional
|
||||
LZ77/LZ78-based compressors, and approaches the performance of the PPM
|
||||
family of statistical compressors.
|
||||
|
||||
The command-line options are deliberately very similar to
|
||||
those of
|
||||
.I GNU gzip,
|
||||
but they are not identical.
|
||||
|
||||
.I bzip2
|
||||
expects a list of file names to accompany the
|
||||
command-line flags. Each file is replaced by a compressed version of
|
||||
itself, with the name "original_name.bz2".
|
||||
Each compressed file
|
||||
has the same modification date, permissions, and, when possible,
|
||||
ownership as the corresponding original, so that these properties can
|
||||
be correctly restored at decompression time. File name handling is
|
||||
naive in the sense that there is no mechanism for preserving original
|
||||
file names, permissions, ownerships or dates in filesystems which lack
|
||||
these concepts, or have serious file name length restrictions, such as
|
||||
MS-DOS.
|
||||
|
||||
.I bzip2
|
||||
and
|
||||
.I bunzip2
|
||||
will by default not overwrite existing
|
||||
files. If you want this to happen, specify the \-f flag.
|
||||
|
||||
If no file names are specified,
|
||||
.I bzip2
|
||||
compresses from standard
|
||||
input to standard output. In this case,
|
||||
.I bzip2
|
||||
will decline to
|
||||
write compressed output to a terminal, as this would be entirely
|
||||
incomprehensible and therefore pointless.
|
||||
|
||||
.I bunzip2
|
||||
(or
|
||||
.I bzip2 \-d)
|
||||
decompresses all
|
||||
specified files. Files which were not created by
|
||||
.I bzip2
|
||||
will be detected and ignored, and a warning issued.
|
||||
.I bzip2
|
||||
attempts to guess the filename for the decompressed file
|
||||
from that of the compressed file as follows:
|
||||
|
||||
filename.bz2 becomes filename
|
||||
filename.bz becomes filename
|
||||
filename.tbz2 becomes filename.tar
|
||||
filename.tbz becomes filename.tar
|
||||
anyothername becomes anyothername.out
|
||||
|
||||
If the file does not end in one of the recognised endings,
|
||||
.I .bz2,
|
||||
.I .bz,
|
||||
.I .tbz2
|
||||
or
|
||||
.I .tbz,
|
||||
.I bzip2
|
||||
complains that it cannot
|
||||
guess the name of the original file, and uses the original name
|
||||
with
|
||||
.I .out
|
||||
appended.
|
||||
|
||||
As with compression, supplying no
|
||||
filenames causes decompression from
|
||||
standard input to standard output.
|
||||
|
||||
.I bunzip2
|
||||
will correctly decompress a file which is the
|
||||
concatenation of two or more compressed files. The result is the
|
||||
concatenation of the corresponding uncompressed files. Integrity
|
||||
testing (\-t)
|
||||
of concatenated
|
||||
compressed files is also supported.
|
||||
|
||||
You can also compress or decompress files to the standard output by
|
||||
giving the \-c flag. Multiple files may be compressed and
|
||||
decompressed like this. The resulting outputs are fed sequentially to
|
||||
stdout. Compression of multiple files
|
||||
in this manner generates a stream
|
||||
containing multiple compressed file representations. Such a stream
|
||||
can be decompressed correctly only by
|
||||
.I bzip2
|
||||
version 0.9.0 or
|
||||
later. Earlier versions of
|
||||
.I bzip2
|
||||
will stop after decompressing
|
||||
the first file in the stream.
|
||||
|
||||
.I bzcat
|
||||
(or
|
||||
.I bzip2 -dc)
|
||||
decompresses all specified files to
|
||||
the standard output.
|
||||
|
||||
.I bzip2
|
||||
will read arguments from the environment variables
|
||||
.I BZIP2
|
||||
and
|
||||
.I BZIP,
|
||||
in that order, and will process them
|
||||
before any arguments read from the command line. This gives a
|
||||
convenient way to supply default arguments.
|
||||
|
||||
Compression is always performed, even if the compressed
|
||||
file is slightly
|
||||
larger than the original. Files of less than about one hundred bytes
|
||||
tend to get larger, since the compression mechanism has a constant
|
||||
overhead in the region of 50 bytes. Random data (including the output
|
||||
of most file compressors) is coded at about 8.05 bits per byte, giving
|
||||
an expansion of around 0.5%.
|
||||
|
||||
As a self-check for your protection,
|
||||
.I
|
||||
bzip2
|
||||
uses 32-bit CRCs to
|
||||
make sure that the decompressed version of a file is identical to the
|
||||
original. This guards against corruption of the compressed data, and
|
||||
against undetected bugs in
|
||||
.I bzip2
|
||||
(hopefully very unlikely). The
|
||||
chances of data corruption going undetected is microscopic, about one
|
||||
chance in four billion for each file 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
|
||||
recover the original uncompressed
|
||||
data. You can use
|
||||
.I bzip2recover
|
||||
to try to recover data from
|
||||
damaged files.
|
||||
|
||||
Return values: 0 for a normal exit, 1 for environmental problems (file
|
||||
not found, invalid flags, I/O errors, &c), 2 to indicate a corrupt
|
||||
compressed file, 3 for an internal consistency error (eg, bug) which
|
||||
caused
|
||||
.I bzip2
|
||||
to panic.
|
||||
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-c --stdout
|
||||
Compress or decompress to standard output.
|
||||
.TP
|
||||
.B \-d --decompress
|
||||
Force decompression.
|
||||
.I bzip2,
|
||||
.I bunzip2
|
||||
and
|
||||
.I bzcat
|
||||
are
|
||||
really the same program, and the decision about what actions to take is
|
||||
done on the basis of which name is used. This flag overrides that
|
||||
mechanism, and forces
|
||||
.I bzip2
|
||||
to decompress.
|
||||
.TP
|
||||
.B \-z --compress
|
||||
The complement to \-d: forces compression, regardless of the
|
||||
invokation name.
|
||||
.TP
|
||||
.B \-t --test
|
||||
Check integrity of the specified file(s), but don't decompress them.
|
||||
This really performs a trial decompression and throws away the result.
|
||||
.TP
|
||||
.B \-f --force
|
||||
Force overwrite of output files. Normally,
|
||||
.I bzip2
|
||||
will not overwrite
|
||||
existing output files. Also forces
|
||||
.I bzip2
|
||||
to break hard links
|
||||
to files, which it otherwise wouldn't do.
|
||||
.TP
|
||||
.B \-k --keep
|
||||
Keep (don't delete) input files during compression
|
||||
or decompression.
|
||||
.TP
|
||||
.B \-s --small
|
||||
Reduce memory usage, for compression, decompression and testing. Files
|
||||
are decompressed and tested using a modified algorithm which only
|
||||
requires 2.5 bytes per block byte. This means any file can be
|
||||
decompressed in 2300k of memory, albeit at about half the normal speed.
|
||||
|
||||
During compression, \-s selects a block size of 200k, which limits
|
||||
memory use to around the same figure, at the expense of your compression
|
||||
ratio. In short, if your machine is low on memory (8 megabytes or
|
||||
less), use \-s for everything. See MEMORY MANAGEMENT below.
|
||||
.TP
|
||||
.B \-q --quiet
|
||||
Suppress non-essential warning messages. Messages pertaining to
|
||||
I/O errors and other critical events will not be suppressed.
|
||||
.TP
|
||||
.B \-v --verbose
|
||||
Verbose mode -- show the compression ratio for each file processed.
|
||||
Further \-v's increase the verbosity level, spewing out lots of
|
||||
information which is primarily of interest for diagnostic purposes.
|
||||
.TP
|
||||
.B \-L --license -V --version
|
||||
Display the software version, license terms and conditions.
|
||||
.TP
|
||||
.B \-1 to \-9
|
||||
Set the block size to 100 k, 200 k .. 900 k when compressing. Has no
|
||||
effect when decompressing. See MEMORY MANAGEMENT below.
|
||||
.TP
|
||||
.B \--
|
||||
Treats all subsequent arguments as file names, even if they start
|
||||
with a dash. This is so you can handle files with names beginning
|
||||
with a dash, for example: bzip2 \-- \-myfilename.
|
||||
.TP
|
||||
.B \--repetitive-fast --repetitive-best
|
||||
These flags are redundant in versions 0.9.5 and above. They provided
|
||||
some coarse control over the behaviour of the sorting algorithm in
|
||||
earlier versions, which was sometimes useful. 0.9.5 and above have an
|
||||
improved algorithm which renders these flags irrelevant.
|
||||
|
||||
.SH MEMORY MANAGEMENT
|
||||
.I bzip2
|
||||
compresses large files in blocks. The block size affects
|
||||
both the compression ratio achieved, and the amount of memory needed for
|
||||
compression and decompression. The flags \-1 through \-9
|
||||
specify the block size to be 100,000 bytes through 900,000 bytes (the
|
||||
default) respectively. At decompression time, the block size used for
|
||||
compression is read from the header of the compressed file, and
|
||||
.I bunzip2
|
||||
then allocates itself just enough memory to decompress
|
||||
the file. Since block sizes are stored in compressed files, it follows
|
||||
that the flags \-1 to \-9 are irrelevant to and so ignored
|
||||
during decompression.
|
||||
|
||||
Compression and decompression requirements,
|
||||
in bytes, can be estimated as:
|
||||
|
||||
Compression: 400k + ( 8 x block size )
|
||||
|
||||
Decompression: 100k + ( 4 x block size ), or
|
||||
100k + ( 2.5 x block size )
|
||||
|
||||
Larger block sizes give rapidly diminishing marginal returns. Most of
|
||||
the compression comes from the first two or three hundred k of block
|
||||
size, a fact worth bearing in mind when using
|
||||
.I bzip2
|
||||
on small machines.
|
||||
It is also important to appreciate that the decompression memory
|
||||
requirement is set at compression time by the choice of block size.
|
||||
|
||||
For files compressed with the default 900k block size,
|
||||
.I bunzip2
|
||||
will require about 3700 kbytes to decompress. To support decompression
|
||||
of any file on a 4 megabyte machine,
|
||||
.I bunzip2
|
||||
has an option to
|
||||
decompress using approximately half this amount of memory, about 2300
|
||||
kbytes. Decompression speed is also halved, so you should use this
|
||||
option only where necessary. The relevant flag is -s.
|
||||
|
||||
In general, try and use the largest block size memory constraints allow,
|
||||
since that maximises the compression achieved. Compression and
|
||||
decompression speed are virtually unaffected by block size.
|
||||
|
||||
Another significant point applies to files which fit in a single block
|
||||
-- that means most files you'd encounter using a large block size. The
|
||||
amount of real memory touched is proportional to the size of the file,
|
||||
since the file is smaller than a block. For example, compressing a file
|
||||
20,000 bytes long with the flag -9 will cause the compressor to
|
||||
allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560
|
||||
kbytes of it. Similarly, the decompressor will allocate 3700k but only
|
||||
touch 100k + 20000 * 4 = 180 kbytes.
|
||||
|
||||
Here is a table which summarises the maximum memory usage for different
|
||||
block sizes. Also recorded is the total compressed size for 14 files of
|
||||
the Calgary Text Compression Corpus totalling 3,141,622 bytes. This
|
||||
column gives some feel for how compression varies with block size.
|
||||
These figures tend to understate the advantage of larger block sizes for
|
||||
larger files, since the Corpus is dominated by smaller files.
|
||||
|
||||
Compress Decompress Decompress Corpus
|
||||
Flag usage usage -s usage Size
|
||||
|
||||
-1 1200k 500k 350k 914704
|
||||
-2 2000k 900k 600k 877703
|
||||
-3 2800k 1300k 850k 860338
|
||||
-4 3600k 1700k 1100k 846899
|
||||
-5 4400k 2100k 1350k 845160
|
||||
-6 5200k 2500k 1600k 838626
|
||||
-7 6100k 2900k 1850k 834096
|
||||
-8 6800k 3300k 2100k 828642
|
||||
-9 7600k 3700k 2350k 828642
|
||||
|
||||
.SH RECOVERING DATA FROM DAMAGED FILES
|
||||
.I bzip2
|
||||
compresses files in blocks, usually 900kbytes long. Each
|
||||
block is handled independently. If a media or transmission error causes
|
||||
a multi-block .bz2
|
||||
file to become damaged, it may be possible to
|
||||
recover data from the undamaged blocks in the file.
|
||||
|
||||
The compressed representation of each block is delimited by a 48-bit
|
||||
pattern, which makes it possible to find the block boundaries with
|
||||
reasonable certainty. Each block also carries its own 32-bit CRC, so
|
||||
damaged blocks can be distinguished from undamaged ones.
|
||||
|
||||
.I bzip2recover
|
||||
is a simple program whose purpose is to search for
|
||||
blocks in .bz2 files, and write each block out into its own .bz2
|
||||
file. You can then use
|
||||
.I bzip2
|
||||
\-t
|
||||
to test the
|
||||
integrity of the resulting files, and decompress those which are
|
||||
undamaged.
|
||||
|
||||
.I bzip2recover
|
||||
takes a single argument, the name of the damaged file,
|
||||
and writes a number of files "rec0001file.bz2",
|
||||
"rec0002file.bz2", etc, containing the extracted blocks.
|
||||
The output filenames are designed so that the use of
|
||||
wildcards in subsequent processing -- for example,
|
||||
"bzip2 -dc rec*file.bz2 > recovered_data" -- lists the files in
|
||||
the correct order.
|
||||
|
||||
.I bzip2recover
|
||||
should be of most use dealing with large .bz2
|
||||
files, as these will contain many blocks. It is clearly
|
||||
futile to use it on damaged single-block files, since a
|
||||
damaged block cannot be recovered. If you wish to minimise
|
||||
any potential data loss through media or transmission errors,
|
||||
you might consider compressing with a smaller
|
||||
block size.
|
||||
|
||||
.SH PERFORMANCE NOTES
|
||||
The sorting phase of compression gathers together similar strings in the
|
||||
file. Because of this, files containing very long runs of repeated
|
||||
symbols, like "aabaabaabaab ..." (repeated several hundred times) may
|
||||
compress more slowly than normal. Versions 0.9.5 and above fare much
|
||||
better than previous versions in this respect. The ratio between
|
||||
worst-case and average-case compression time is in the region of 10:1.
|
||||
For previous versions, this figure was more like 100:1. You can use the
|
||||
\-vvvv option to monitor progress in great detail, if you want.
|
||||
|
||||
Decompression speed is unaffected by these phenomena.
|
||||
|
||||
.I bzip2
|
||||
usually allocates several megabytes of memory to operate
|
||||
in, and then charges all over it in a fairly random fashion. This means
|
||||
that performance, both for compressing and decompressing, is largely
|
||||
determined by the speed at which your machine can service cache misses.
|
||||
Because of this, small changes to the code to reduce the miss rate have
|
||||
been observed to give disproportionately large performance improvements.
|
||||
I imagine
|
||||
.I bzip2
|
||||
will perform best on machines with very large caches.
|
||||
|
||||
.SH CAVEATS
|
||||
I/O error messages are not as helpful as they could be.
|
||||
.I bzip2
|
||||
tries hard to detect I/O errors and exit cleanly, but the details of
|
||||
what the problem is sometimes seem rather misleading.
|
||||
|
||||
This manual page pertains to version 1.0 of
|
||||
.I bzip2.
|
||||
Compressed
|
||||
data created by this version is entirely forwards and backwards
|
||||
compatible with the previous public releases, versions 0.1pl2, 0.9.0
|
||||
and 0.9.5,
|
||||
but with the following exception: 0.9.0 and above can correctly
|
||||
decompress multiple concatenated compressed files. 0.1pl2 cannot do
|
||||
this; it will stop after decompressing just the first file in the
|
||||
stream.
|
||||
|
||||
.I bzip2recover
|
||||
uses 32-bit integers to represent bit positions in
|
||||
compressed files, so it cannot handle compressed files more than 512
|
||||
megabytes long. This could easily be fixed.
|
||||
|
||||
.SH AUTHOR
|
||||
Julian Seward, jseward@acm.org.
|
||||
|
||||
http://sourceware.cygnus.com/bzip2
|
||||
http://www.muraroa.demon.co.uk
|
||||
|
||||
The ideas embodied in
|
||||
.I bzip2
|
||||
are due to (at least) the following
|
||||
people: Michael Burrows and David Wheeler (for the block sorting
|
||||
transformation), David Wheeler (again, for the Huffman coder), Peter
|
||||
Fenwick (for the structured coding model in the original
|
||||
.I bzip,
|
||||
and many refinements), and Alistair Moffat, Radford Neal and Ian Witten
|
||||
(for the arithmetic coder in the original
|
||||
.I bzip).
|
||||
I am much
|
||||
indebted for their help, support and advice. See the manual in the
|
||||
source distribution for pointers to sources of documentation. Christian
|
||||
von Roques encouraged me to look for faster sorting algorithms, so as to
|
||||
speed up compression. Bela Lubkin encouraged me to improve the
|
||||
worst-case compression performance. Many people sent patches, helped
|
||||
with portability problems, lent machines, gave advice and were generally
|
||||
helpful.
|
2044
contrib/bzip2/bzip2.c
Normal file
2044
contrib/bzip2/bzip2.c
Normal file
File diff suppressed because it is too large
Load Diff
435
contrib/bzip2/bzip2recover.c
Normal file
435
contrib/bzip2/bzip2recover.c
Normal file
@ -0,0 +1,435 @@
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
/*--- Block recoverer program for bzip2 ---*/
|
||||
/*--- bzip2recover.c ---*/
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*--
|
||||
This program is bzip2recover, a program to attempt data
|
||||
salvage from damaged files created by the accompanying
|
||||
bzip2-1.0 program.
|
||||
|
||||
Copyright (C) 1996-2000 Julian R Seward. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, Cambridge, UK.
|
||||
jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0 of 21 March 2000
|
||||
--*/
|
||||
|
||||
/*--
|
||||
This program is a complete hack and should be rewritten
|
||||
properly. It isn't very complicated.
|
||||
--*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef unsigned int UInt32;
|
||||
typedef int Int32;
|
||||
typedef unsigned char UChar;
|
||||
typedef char Char;
|
||||
typedef unsigned char Bool;
|
||||
#define True ((Bool)1)
|
||||
#define False ((Bool)0)
|
||||
|
||||
|
||||
Char inFileName[2000];
|
||||
Char outFileName[2000];
|
||||
Char progName[2000];
|
||||
|
||||
UInt32 bytesOut = 0;
|
||||
UInt32 bytesIn = 0;
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
/*--- I/O errors ---*/
|
||||
/*---------------------------------------------------*/
|
||||
|
||||
/*---------------------------------------------*/
|
||||
void readError ( void )
|
||||
{
|
||||
fprintf ( stderr,
|
||||
"%s: I/O error reading `%s', possible reason follows.\n",
|
||||
progName, inFileName );
|
||||
perror ( progName );
|
||||
fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
|
||||
progName );
|
||||
exit ( 1 );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
void writeError ( void )
|
||||
{
|
||||
fprintf ( stderr,
|
||||
"%s: I/O error reading `%s', possible reason follows.\n",
|
||||
progName, inFileName );
|
||||
perror ( progName );
|
||||
fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
|
||||
progName );
|
||||
exit ( 1 );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
void mallocFail ( Int32 n )
|
||||
{
|
||||
fprintf ( stderr,
|
||||
"%s: malloc failed on request for %d bytes.\n",
|
||||
progName, n );
|
||||
fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
|
||||
progName );
|
||||
exit ( 1 );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
/*--- Bit stream I/O ---*/
|
||||
/*---------------------------------------------------*/
|
||||
|
||||
typedef
|
||||
struct {
|
||||
FILE* handle;
|
||||
Int32 buffer;
|
||||
Int32 buffLive;
|
||||
Char mode;
|
||||
}
|
||||
BitStream;
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
BitStream* bsOpenReadStream ( FILE* stream )
|
||||
{
|
||||
BitStream *bs = malloc ( sizeof(BitStream) );
|
||||
if (bs == NULL) mallocFail ( sizeof(BitStream) );
|
||||
bs->handle = stream;
|
||||
bs->buffer = 0;
|
||||
bs->buffLive = 0;
|
||||
bs->mode = 'r';
|
||||
return bs;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
BitStream* bsOpenWriteStream ( FILE* stream )
|
||||
{
|
||||
BitStream *bs = malloc ( sizeof(BitStream) );
|
||||
if (bs == NULL) mallocFail ( sizeof(BitStream) );
|
||||
bs->handle = stream;
|
||||
bs->buffer = 0;
|
||||
bs->buffLive = 0;
|
||||
bs->mode = 'w';
|
||||
return bs;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
void bsPutBit ( BitStream* bs, Int32 bit )
|
||||
{
|
||||
if (bs->buffLive == 8) {
|
||||
Int32 retVal = putc ( (UChar) bs->buffer, bs->handle );
|
||||
if (retVal == EOF) writeError();
|
||||
bytesOut++;
|
||||
bs->buffLive = 1;
|
||||
bs->buffer = bit & 0x1;
|
||||
} else {
|
||||
bs->buffer = ( (bs->buffer << 1) | (bit & 0x1) );
|
||||
bs->buffLive++;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
/*--
|
||||
Returns 0 or 1, or 2 to indicate EOF.
|
||||
--*/
|
||||
Int32 bsGetBit ( BitStream* bs )
|
||||
{
|
||||
if (bs->buffLive > 0) {
|
||||
bs->buffLive --;
|
||||
return ( ((bs->buffer) >> (bs->buffLive)) & 0x1 );
|
||||
} else {
|
||||
Int32 retVal = getc ( bs->handle );
|
||||
if ( retVal == EOF ) {
|
||||
if (errno != 0) readError();
|
||||
return 2;
|
||||
}
|
||||
bs->buffLive = 7;
|
||||
bs->buffer = retVal;
|
||||
return ( ((bs->buffer) >> 7) & 0x1 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
void bsClose ( BitStream* bs )
|
||||
{
|
||||
Int32 retVal;
|
||||
|
||||
if ( bs->mode == 'w' ) {
|
||||
while ( bs->buffLive < 8 ) {
|
||||
bs->buffLive++;
|
||||
bs->buffer <<= 1;
|
||||
};
|
||||
retVal = putc ( (UChar) (bs->buffer), bs->handle );
|
||||
if (retVal == EOF) writeError();
|
||||
bytesOut++;
|
||||
retVal = fflush ( bs->handle );
|
||||
if (retVal == EOF) writeError();
|
||||
}
|
||||
retVal = fclose ( bs->handle );
|
||||
if (retVal == EOF) {
|
||||
if (bs->mode == 'w') writeError(); else readError();
|
||||
}
|
||||
free ( bs );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
void bsPutUChar ( BitStream* bs, UChar c )
|
||||
{
|
||||
Int32 i;
|
||||
for (i = 7; i >= 0; i--)
|
||||
bsPutBit ( bs, (((UInt32) c) >> i) & 0x1 );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
void bsPutUInt32 ( BitStream* bs, UInt32 c )
|
||||
{
|
||||
Int32 i;
|
||||
|
||||
for (i = 31; i >= 0; i--)
|
||||
bsPutBit ( bs, (c >> i) & 0x1 );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
Bool endsInBz2 ( Char* name )
|
||||
{
|
||||
Int32 n = strlen ( name );
|
||||
if (n <= 4) return False;
|
||||
return
|
||||
(name[n-4] == '.' &&
|
||||
name[n-3] == 'b' &&
|
||||
name[n-2] == 'z' &&
|
||||
name[n-1] == '2');
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
/*--- ---*/
|
||||
/*---------------------------------------------------*/
|
||||
|
||||
#define BLOCK_HEADER_HI 0x00003141UL
|
||||
#define BLOCK_HEADER_LO 0x59265359UL
|
||||
|
||||
#define BLOCK_ENDMARK_HI 0x00001772UL
|
||||
#define BLOCK_ENDMARK_LO 0x45385090UL
|
||||
|
||||
|
||||
UInt32 bStart[20000];
|
||||
UInt32 bEnd[20000];
|
||||
UInt32 rbStart[20000];
|
||||
UInt32 rbEnd[20000];
|
||||
|
||||
Int32 main ( Int32 argc, Char** argv )
|
||||
{
|
||||
FILE* inFile;
|
||||
FILE* outFile;
|
||||
BitStream* bsIn, *bsWr;
|
||||
Int32 currBlock, b, wrBlock;
|
||||
UInt32 bitsRead;
|
||||
Int32 rbCtr;
|
||||
|
||||
|
||||
UInt32 buffHi, buffLo, blockCRC;
|
||||
Char* p;
|
||||
|
||||
strcpy ( progName, argv[0] );
|
||||
inFileName[0] = outFileName[0] = 0;
|
||||
|
||||
fprintf ( stderr, "bzip2recover 1.0: extracts blocks from damaged .bz2 files.\n" );
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n",
|
||||
progName, progName );
|
||||
exit(1);
|
||||
}
|
||||
|
||||
strcpy ( inFileName, argv[1] );
|
||||
|
||||
inFile = fopen ( inFileName, "rb" );
|
||||
if (inFile == NULL) {
|
||||
fprintf ( stderr, "%s: can't read `%s'\n", progName, inFileName );
|
||||
exit(1);
|
||||
}
|
||||
|
||||
bsIn = bsOpenReadStream ( inFile );
|
||||
fprintf ( stderr, "%s: searching for block boundaries ...\n", progName );
|
||||
|
||||
bitsRead = 0;
|
||||
buffHi = buffLo = 0;
|
||||
currBlock = 0;
|
||||
bStart[currBlock] = 0;
|
||||
|
||||
rbCtr = 0;
|
||||
|
||||
while (True) {
|
||||
b = bsGetBit ( bsIn );
|
||||
bitsRead++;
|
||||
if (b == 2) {
|
||||
if (bitsRead >= bStart[currBlock] &&
|
||||
(bitsRead - bStart[currBlock]) >= 40) {
|
||||
bEnd[currBlock] = bitsRead-1;
|
||||
if (currBlock > 0)
|
||||
fprintf ( stderr, " block %d runs from %d to %d (incomplete)\n",
|
||||
currBlock, bStart[currBlock], bEnd[currBlock] );
|
||||
} else
|
||||
currBlock--;
|
||||
break;
|
||||
}
|
||||
buffHi = (buffHi << 1) | (buffLo >> 31);
|
||||
buffLo = (buffLo << 1) | (b & 1);
|
||||
if ( ( (buffHi & 0x0000ffff) == BLOCK_HEADER_HI
|
||||
&& buffLo == BLOCK_HEADER_LO)
|
||||
||
|
||||
( (buffHi & 0x0000ffff) == BLOCK_ENDMARK_HI
|
||||
&& buffLo == BLOCK_ENDMARK_LO)
|
||||
) {
|
||||
if (bitsRead > 49)
|
||||
bEnd[currBlock] = bitsRead-49; else
|
||||
bEnd[currBlock] = 0;
|
||||
if (currBlock > 0 &&
|
||||
(bEnd[currBlock] - bStart[currBlock]) >= 130) {
|
||||
fprintf ( stderr, " block %d runs from %d to %d\n",
|
||||
rbCtr+1, bStart[currBlock], bEnd[currBlock] );
|
||||
rbStart[rbCtr] = bStart[currBlock];
|
||||
rbEnd[rbCtr] = bEnd[currBlock];
|
||||
rbCtr++;
|
||||
}
|
||||
currBlock++;
|
||||
|
||||
bStart[currBlock] = bitsRead;
|
||||
}
|
||||
}
|
||||
|
||||
bsClose ( bsIn );
|
||||
|
||||
/*-- identified blocks run from 1 to rbCtr inclusive. --*/
|
||||
|
||||
if (rbCtr < 1) {
|
||||
fprintf ( stderr,
|
||||
"%s: sorry, I couldn't find any block boundaries.\n",
|
||||
progName );
|
||||
exit(1);
|
||||
};
|
||||
|
||||
fprintf ( stderr, "%s: splitting into blocks\n", progName );
|
||||
|
||||
inFile = fopen ( inFileName, "rb" );
|
||||
if (inFile == NULL) {
|
||||
fprintf ( stderr, "%s: can't open `%s'\n", progName, inFileName );
|
||||
exit(1);
|
||||
}
|
||||
bsIn = bsOpenReadStream ( inFile );
|
||||
|
||||
/*-- placate gcc's dataflow analyser --*/
|
||||
blockCRC = 0; bsWr = 0;
|
||||
|
||||
bitsRead = 0;
|
||||
outFile = NULL;
|
||||
wrBlock = 0;
|
||||
while (True) {
|
||||
b = bsGetBit(bsIn);
|
||||
if (b == 2) break;
|
||||
buffHi = (buffHi << 1) | (buffLo >> 31);
|
||||
buffLo = (buffLo << 1) | (b & 1);
|
||||
if (bitsRead == 47+rbStart[wrBlock])
|
||||
blockCRC = (buffHi << 16) | (buffLo >> 16);
|
||||
|
||||
if (outFile != NULL && bitsRead >= rbStart[wrBlock]
|
||||
&& bitsRead <= rbEnd[wrBlock]) {
|
||||
bsPutBit ( bsWr, b );
|
||||
}
|
||||
|
||||
bitsRead++;
|
||||
|
||||
if (bitsRead == rbEnd[wrBlock]+1) {
|
||||
if (outFile != NULL) {
|
||||
bsPutUChar ( bsWr, 0x17 ); bsPutUChar ( bsWr, 0x72 );
|
||||
bsPutUChar ( bsWr, 0x45 ); bsPutUChar ( bsWr, 0x38 );
|
||||
bsPutUChar ( bsWr, 0x50 ); bsPutUChar ( bsWr, 0x90 );
|
||||
bsPutUInt32 ( bsWr, blockCRC );
|
||||
bsClose ( bsWr );
|
||||
}
|
||||
if (wrBlock >= rbCtr) break;
|
||||
wrBlock++;
|
||||
} else
|
||||
if (bitsRead == rbStart[wrBlock]) {
|
||||
outFileName[0] = 0;
|
||||
sprintf ( outFileName, "rec%4d", wrBlock+1 );
|
||||
for (p = outFileName; *p != 0; p++) if (*p == ' ') *p = '0';
|
||||
strcat ( outFileName, inFileName );
|
||||
if ( !endsInBz2(outFileName)) strcat ( outFileName, ".bz2" );
|
||||
|
||||
fprintf ( stderr, " writing block %d to `%s' ...\n",
|
||||
wrBlock+1, outFileName );
|
||||
|
||||
outFile = fopen ( outFileName, "wb" );
|
||||
if (outFile == NULL) {
|
||||
fprintf ( stderr, "%s: can't write `%s'\n",
|
||||
progName, outFileName );
|
||||
exit(1);
|
||||
}
|
||||
bsWr = bsOpenWriteStream ( outFile );
|
||||
bsPutUChar ( bsWr, 'B' ); bsPutUChar ( bsWr, 'Z' );
|
||||
bsPutUChar ( bsWr, 'h' ); bsPutUChar ( bsWr, '9' );
|
||||
bsPutUChar ( bsWr, 0x31 ); bsPutUChar ( bsWr, 0x41 );
|
||||
bsPutUChar ( bsWr, 0x59 ); bsPutUChar ( bsWr, 0x26 );
|
||||
bsPutUChar ( bsWr, 0x53 ); bsPutUChar ( bsWr, 0x59 );
|
||||
}
|
||||
}
|
||||
|
||||
fprintf ( stderr, "%s: finished\n", progName );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
/*--- end bzip2recover.c ---*/
|
||||
/*-----------------------------------------------------------*/
|
1564
contrib/bzip2/bzlib.c
Normal file
1564
contrib/bzip2/bzlib.c
Normal file
File diff suppressed because it is too large
Load Diff
319
contrib/bzip2/bzlib.h
Normal file
319
contrib/bzip2/bzlib.h
Normal file
@ -0,0 +1,319 @@
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- Public header file for the library. ---*/
|
||||
/*--- bzlib.h ---*/
|
||||
/*-------------------------------------------------------------*/
|
||||
|
||||
/*--
|
||||
This file is a part of bzip2 and/or libbzip2, a program and
|
||||
library for lossless, block-sorting data compression.
|
||||
|
||||
Copyright (C) 1996-2000 Julian R Seward. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, Cambridge, UK.
|
||||
jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0 of 21 March 2000
|
||||
|
||||
This program is based on (at least) the work of:
|
||||
Mike Burrows
|
||||
David Wheeler
|
||||
Peter Fenwick
|
||||
Alistair Moffat
|
||||
Radford Neal
|
||||
Ian H. Witten
|
||||
Robert Sedgewick
|
||||
Jon L. Bentley
|
||||
|
||||
For more information on these sources, see the manual.
|
||||
--*/
|
||||
|
||||
|
||||
#ifndef _BZLIB_H
|
||||
#define _BZLIB_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define BZ_RUN 0
|
||||
#define BZ_FLUSH 1
|
||||
#define BZ_FINISH 2
|
||||
|
||||
#define BZ_OK 0
|
||||
#define BZ_RUN_OK 1
|
||||
#define BZ_FLUSH_OK 2
|
||||
#define BZ_FINISH_OK 3
|
||||
#define BZ_STREAM_END 4
|
||||
#define BZ_SEQUENCE_ERROR (-1)
|
||||
#define BZ_PARAM_ERROR (-2)
|
||||
#define BZ_MEM_ERROR (-3)
|
||||
#define BZ_DATA_ERROR (-4)
|
||||
#define BZ_DATA_ERROR_MAGIC (-5)
|
||||
#define BZ_IO_ERROR (-6)
|
||||
#define BZ_UNEXPECTED_EOF (-7)
|
||||
#define BZ_OUTBUFF_FULL (-8)
|
||||
#define BZ_CONFIG_ERROR (-9)
|
||||
|
||||
typedef
|
||||
struct {
|
||||
char *next_in;
|
||||
unsigned int avail_in;
|
||||
unsigned int total_in_lo32;
|
||||
unsigned int total_in_hi32;
|
||||
|
||||
char *next_out;
|
||||
unsigned int avail_out;
|
||||
unsigned int total_out_lo32;
|
||||
unsigned int total_out_hi32;
|
||||
|
||||
void *state;
|
||||
|
||||
void *(*bzalloc)(void *,int,int);
|
||||
void (*bzfree)(void *,void *);
|
||||
void *opaque;
|
||||
}
|
||||
bz_stream;
|
||||
|
||||
|
||||
#ifndef BZ_IMPORT
|
||||
#define BZ_EXPORT
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <stdio.h>
|
||||
# include <windows.h>
|
||||
# ifdef small
|
||||
/* windows.h define small to char */
|
||||
# undef small
|
||||
# endif
|
||||
# ifdef BZ_EXPORT
|
||||
# define BZ_API(func) WINAPI func
|
||||
# define BZ_EXTERN extern
|
||||
# else
|
||||
/* import windows dll dynamically */
|
||||
# define BZ_API(func) (WINAPI * func)
|
||||
# define BZ_EXTERN
|
||||
# endif
|
||||
#else
|
||||
# define BZ_API(func) func
|
||||
# define BZ_EXTERN extern
|
||||
#endif
|
||||
|
||||
|
||||
/*-- Core (low-level) library functions --*/
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzCompressInit) (
|
||||
bz_stream* strm,
|
||||
int blockSize100k,
|
||||
int verbosity,
|
||||
int workFactor
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzCompress) (
|
||||
bz_stream* strm,
|
||||
int action
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) (
|
||||
bz_stream* strm
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) (
|
||||
bz_stream *strm,
|
||||
int verbosity,
|
||||
int small
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzDecompress) (
|
||||
bz_stream* strm
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) (
|
||||
bz_stream *strm
|
||||
);
|
||||
|
||||
|
||||
|
||||
/*-- High(er) level library functions --*/
|
||||
|
||||
#ifndef BZ_NO_STDIO
|
||||
#define BZ_MAX_UNUSED 5000
|
||||
|
||||
typedef void BZFILE;
|
||||
|
||||
BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) (
|
||||
int* bzerror,
|
||||
FILE* f,
|
||||
int verbosity,
|
||||
int small,
|
||||
void* unused,
|
||||
int nUnused
|
||||
);
|
||||
|
||||
BZ_EXTERN void BZ_API(BZ2_bzReadClose) (
|
||||
int* bzerror,
|
||||
BZFILE* b
|
||||
);
|
||||
|
||||
BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) (
|
||||
int* bzerror,
|
||||
BZFILE* b,
|
||||
void** unused,
|
||||
int* nUnused
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzRead) (
|
||||
int* bzerror,
|
||||
BZFILE* b,
|
||||
void* buf,
|
||||
int len
|
||||
);
|
||||
|
||||
BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) (
|
||||
int* bzerror,
|
||||
FILE* f,
|
||||
int blockSize100k,
|
||||
int verbosity,
|
||||
int workFactor
|
||||
);
|
||||
|
||||
BZ_EXTERN void BZ_API(BZ2_bzWrite) (
|
||||
int* bzerror,
|
||||
BZFILE* b,
|
||||
void* buf,
|
||||
int len
|
||||
);
|
||||
|
||||
BZ_EXTERN void BZ_API(BZ2_bzWriteClose) (
|
||||
int* bzerror,
|
||||
BZFILE* b,
|
||||
int abandon,
|
||||
unsigned int* nbytes_in,
|
||||
unsigned int* nbytes_out
|
||||
);
|
||||
|
||||
BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) (
|
||||
int* bzerror,
|
||||
BZFILE* b,
|
||||
int abandon,
|
||||
unsigned int* nbytes_in_lo32,
|
||||
unsigned int* nbytes_in_hi32,
|
||||
unsigned int* nbytes_out_lo32,
|
||||
unsigned int* nbytes_out_hi32
|
||||
);
|
||||
#endif
|
||||
|
||||
|
||||
/*-- Utility functions --*/
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) (
|
||||
char* dest,
|
||||
unsigned int* destLen,
|
||||
char* source,
|
||||
unsigned int sourceLen,
|
||||
int blockSize100k,
|
||||
int verbosity,
|
||||
int workFactor
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) (
|
||||
char* dest,
|
||||
unsigned int* destLen,
|
||||
char* source,
|
||||
unsigned int sourceLen,
|
||||
int small,
|
||||
int verbosity
|
||||
);
|
||||
|
||||
|
||||
/*--
|
||||
Code contributed by Yoshioka Tsuneo
|
||||
(QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.jp),
|
||||
to support better zlib compatibility.
|
||||
This code is not _officially_ part of libbzip2 (yet);
|
||||
I haven't tested it, documented it, or considered the
|
||||
threading-safeness of it.
|
||||
If this code breaks, please contact both Yoshioka and me.
|
||||
--*/
|
||||
|
||||
BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
|
||||
void
|
||||
);
|
||||
|
||||
#ifndef BZ_NO_STDIO
|
||||
BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
|
||||
const char *path,
|
||||
const char *mode
|
||||
);
|
||||
|
||||
BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
|
||||
int fd,
|
||||
const char *mode
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzread) (
|
||||
BZFILE* b,
|
||||
void* buf,
|
||||
int len
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzwrite) (
|
||||
BZFILE* b,
|
||||
void* buf,
|
||||
int len
|
||||
);
|
||||
|
||||
BZ_EXTERN int BZ_API(BZ2_bzflush) (
|
||||
BZFILE* b
|
||||
);
|
||||
|
||||
BZ_EXTERN void BZ_API(BZ2_bzclose) (
|
||||
BZFILE* b
|
||||
);
|
||||
|
||||
BZ_EXTERN const char * BZ_API(BZ2_bzerror) (
|
||||
BZFILE *b,
|
||||
int *errnum
|
||||
);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- end bzlib.h ---*/
|
||||
/*-------------------------------------------------------------*/
|
530
contrib/bzip2/bzlib_private.h
Normal file
530
contrib/bzip2/bzlib_private.h
Normal file
@ -0,0 +1,530 @@
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- Private header file for the library. ---*/
|
||||
/*--- bzlib_private.h ---*/
|
||||
/*-------------------------------------------------------------*/
|
||||
|
||||
/*--
|
||||
This file is a part of bzip2 and/or libbzip2, a program and
|
||||
library for lossless, block-sorting data compression.
|
||||
|
||||
Copyright (C) 1996-2000 Julian R Seward. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, Cambridge, UK.
|
||||
jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0 of 21 March 2000
|
||||
|
||||
This program is based on (at least) the work of:
|
||||
Mike Burrows
|
||||
David Wheeler
|
||||
Peter Fenwick
|
||||
Alistair Moffat
|
||||
Radford Neal
|
||||
Ian H. Witten
|
||||
Robert Sedgewick
|
||||
Jon L. Bentley
|
||||
|
||||
For more information on these sources, see the manual.
|
||||
--*/
|
||||
|
||||
|
||||
#ifndef _BZLIB_PRIVATE_H
|
||||
#define _BZLIB_PRIVATE_H
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifndef BZ_NO_STDIO
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#include "bzlib.h"
|
||||
|
||||
|
||||
|
||||
/*-- General stuff. --*/
|
||||
|
||||
#define BZ_VERSION "1.0.1, 23-June-2000"
|
||||
|
||||
typedef char Char;
|
||||
typedef unsigned char Bool;
|
||||
typedef unsigned char UChar;
|
||||
typedef int Int32;
|
||||
typedef unsigned int UInt32;
|
||||
typedef short Int16;
|
||||
typedef unsigned short UInt16;
|
||||
|
||||
#define True ((Bool)1)
|
||||
#define False ((Bool)0)
|
||||
|
||||
#ifndef __GNUC__
|
||||
#define __inline__ /* */
|
||||
#endif
|
||||
|
||||
#ifndef BZ_NO_STDIO
|
||||
extern void BZ2_bz__AssertH__fail ( int errcode );
|
||||
#define AssertH(cond,errcode) \
|
||||
{ if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
|
||||
#if BZ_DEBUG
|
||||
#define AssertD(cond,msg) \
|
||||
{ if (!(cond)) { \
|
||||
fprintf ( stderr, \
|
||||
"\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
|
||||
exit(1); \
|
||||
}}
|
||||
#else
|
||||
#define AssertD(cond,msg) /* */
|
||||
#endif
|
||||
#define VPrintf0(zf) \
|
||||
fprintf(stderr,zf)
|
||||
#define VPrintf1(zf,za1) \
|
||||
fprintf(stderr,zf,za1)
|
||||
#define VPrintf2(zf,za1,za2) \
|
||||
fprintf(stderr,zf,za1,za2)
|
||||
#define VPrintf3(zf,za1,za2,za3) \
|
||||
fprintf(stderr,zf,za1,za2,za3)
|
||||
#define VPrintf4(zf,za1,za2,za3,za4) \
|
||||
fprintf(stderr,zf,za1,za2,za3,za4)
|
||||
#define VPrintf5(zf,za1,za2,za3,za4,za5) \
|
||||
fprintf(stderr,zf,za1,za2,za3,za4,za5)
|
||||
#else
|
||||
extern void bz_internal_error ( int errcode );
|
||||
#define AssertH(cond,errcode) \
|
||||
{ if (!(cond)) bz_internal_error ( errcode ); }
|
||||
#define AssertD(cond,msg) /* */
|
||||
#define VPrintf0(zf) /* */
|
||||
#define VPrintf1(zf,za1) /* */
|
||||
#define VPrintf2(zf,za1,za2) /* */
|
||||
#define VPrintf3(zf,za1,za2,za3) /* */
|
||||
#define VPrintf4(zf,za1,za2,za3,za4) /* */
|
||||
#define VPrintf5(zf,za1,za2,za3,za4,za5) /* */
|
||||
#endif
|
||||
|
||||
|
||||
#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
|
||||
#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp))
|
||||
|
||||
|
||||
/*-- Constants for the back end. --*/
|
||||
|
||||
#define BZ_MAX_ALPHA_SIZE 258
|
||||
#define BZ_MAX_CODE_LEN 23
|
||||
|
||||
#define BZ_RUNA 0
|
||||
#define BZ_RUNB 1
|
||||
|
||||
#define BZ_N_GROUPS 6
|
||||
#define BZ_G_SIZE 50
|
||||
#define BZ_N_ITERS 4
|
||||
|
||||
#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
|
||||
|
||||
|
||||
|
||||
/*-- Stuff for randomising repetitive blocks. --*/
|
||||
|
||||
extern Int32 BZ2_rNums[512];
|
||||
|
||||
#define BZ_RAND_DECLS \
|
||||
Int32 rNToGo; \
|
||||
Int32 rTPos \
|
||||
|
||||
#define BZ_RAND_INIT_MASK \
|
||||
s->rNToGo = 0; \
|
||||
s->rTPos = 0 \
|
||||
|
||||
#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
|
||||
|
||||
#define BZ_RAND_UPD_MASK \
|
||||
if (s->rNToGo == 0) { \
|
||||
s->rNToGo = BZ2_rNums[s->rTPos]; \
|
||||
s->rTPos++; \
|
||||
if (s->rTPos == 512) s->rTPos = 0; \
|
||||
} \
|
||||
s->rNToGo--;
|
||||
|
||||
|
||||
|
||||
/*-- Stuff for doing CRCs. --*/
|
||||
|
||||
extern UInt32 BZ2_crc32Table[256];
|
||||
|
||||
#define BZ_INITIALISE_CRC(crcVar) \
|
||||
{ \
|
||||
crcVar = 0xffffffffL; \
|
||||
}
|
||||
|
||||
#define BZ_FINALISE_CRC(crcVar) \
|
||||
{ \
|
||||
crcVar = ~(crcVar); \
|
||||
}
|
||||
|
||||
#define BZ_UPDATE_CRC(crcVar,cha) \
|
||||
{ \
|
||||
crcVar = (crcVar << 8) ^ \
|
||||
BZ2_crc32Table[(crcVar >> 24) ^ \
|
||||
((UChar)cha)]; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-- States and modes for compression. --*/
|
||||
|
||||
#define BZ_M_IDLE 1
|
||||
#define BZ_M_RUNNING 2
|
||||
#define BZ_M_FLUSHING 3
|
||||
#define BZ_M_FINISHING 4
|
||||
|
||||
#define BZ_S_OUTPUT 1
|
||||
#define BZ_S_INPUT 2
|
||||
|
||||
#define BZ_N_RADIX 2
|
||||
#define BZ_N_QSORT 12
|
||||
#define BZ_N_SHELL 18
|
||||
#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
|
||||
|
||||
|
||||
|
||||
|
||||
/*-- Structure holding all the compression-side stuff. --*/
|
||||
|
||||
typedef
|
||||
struct {
|
||||
/* pointer back to the struct bz_stream */
|
||||
bz_stream* strm;
|
||||
|
||||
/* mode this stream is in, and whether inputting */
|
||||
/* or outputting data */
|
||||
Int32 mode;
|
||||
Int32 state;
|
||||
|
||||
/* remembers avail_in when flush/finish requested */
|
||||
UInt32 avail_in_expect;
|
||||
|
||||
/* for doing the block sorting */
|
||||
UInt32* arr1;
|
||||
UInt32* arr2;
|
||||
UInt32* ftab;
|
||||
Int32 origPtr;
|
||||
|
||||
/* aliases for arr1 and arr2 */
|
||||
UInt32* ptr;
|
||||
UChar* block;
|
||||
UInt16* mtfv;
|
||||
UChar* zbits;
|
||||
|
||||
/* for deciding when to use the fallback sorting algorithm */
|
||||
Int32 workFactor;
|
||||
|
||||
/* run-length-encoding of the input */
|
||||
UInt32 state_in_ch;
|
||||
Int32 state_in_len;
|
||||
BZ_RAND_DECLS;
|
||||
|
||||
/* input and output limits and current posns */
|
||||
Int32 nblock;
|
||||
Int32 nblockMAX;
|
||||
Int32 numZ;
|
||||
Int32 state_out_pos;
|
||||
|
||||
/* map of bytes used in block */
|
||||
Int32 nInUse;
|
||||
Bool inUse[256];
|
||||
UChar unseqToSeq[256];
|
||||
|
||||
/* the buffer for bit stream creation */
|
||||
UInt32 bsBuff;
|
||||
Int32 bsLive;
|
||||
|
||||
/* block and combined CRCs */
|
||||
UInt32 blockCRC;
|
||||
UInt32 combinedCRC;
|
||||
|
||||
/* misc administratium */
|
||||
Int32 verbosity;
|
||||
Int32 blockNo;
|
||||
Int32 blockSize100k;
|
||||
|
||||
/* stuff for coding the MTF values */
|
||||
Int32 nMTF;
|
||||
Int32 mtfFreq [BZ_MAX_ALPHA_SIZE];
|
||||
UChar selector [BZ_MAX_SELECTORS];
|
||||
UChar selectorMtf[BZ_MAX_SELECTORS];
|
||||
|
||||
UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
/* second dimension: only 3 needed; 4 makes index calculations faster */
|
||||
UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4];
|
||||
|
||||
}
|
||||
EState;
|
||||
|
||||
|
||||
|
||||
/*-- externs for compression. --*/
|
||||
|
||||
extern void
|
||||
BZ2_blockSort ( EState* );
|
||||
|
||||
extern void
|
||||
BZ2_compressBlock ( EState*, Bool );
|
||||
|
||||
extern void
|
||||
BZ2_bsInitWrite ( EState* );
|
||||
|
||||
extern void
|
||||
BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
|
||||
|
||||
extern void
|
||||
BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
|
||||
|
||||
|
||||
|
||||
/*-- states for decompression. --*/
|
||||
|
||||
#define BZ_X_IDLE 1
|
||||
#define BZ_X_OUTPUT 2
|
||||
|
||||
#define BZ_X_MAGIC_1 10
|
||||
#define BZ_X_MAGIC_2 11
|
||||
#define BZ_X_MAGIC_3 12
|
||||
#define BZ_X_MAGIC_4 13
|
||||
#define BZ_X_BLKHDR_1 14
|
||||
#define BZ_X_BLKHDR_2 15
|
||||
#define BZ_X_BLKHDR_3 16
|
||||
#define BZ_X_BLKHDR_4 17
|
||||
#define BZ_X_BLKHDR_5 18
|
||||
#define BZ_X_BLKHDR_6 19
|
||||
#define BZ_X_BCRC_1 20
|
||||
#define BZ_X_BCRC_2 21
|
||||
#define BZ_X_BCRC_3 22
|
||||
#define BZ_X_BCRC_4 23
|
||||
#define BZ_X_RANDBIT 24
|
||||
#define BZ_X_ORIGPTR_1 25
|
||||
#define BZ_X_ORIGPTR_2 26
|
||||
#define BZ_X_ORIGPTR_3 27
|
||||
#define BZ_X_MAPPING_1 28
|
||||
#define BZ_X_MAPPING_2 29
|
||||
#define BZ_X_SELECTOR_1 30
|
||||
#define BZ_X_SELECTOR_2 31
|
||||
#define BZ_X_SELECTOR_3 32
|
||||
#define BZ_X_CODING_1 33
|
||||
#define BZ_X_CODING_2 34
|
||||
#define BZ_X_CODING_3 35
|
||||
#define BZ_X_MTF_1 36
|
||||
#define BZ_X_MTF_2 37
|
||||
#define BZ_X_MTF_3 38
|
||||
#define BZ_X_MTF_4 39
|
||||
#define BZ_X_MTF_5 40
|
||||
#define BZ_X_MTF_6 41
|
||||
#define BZ_X_ENDHDR_2 42
|
||||
#define BZ_X_ENDHDR_3 43
|
||||
#define BZ_X_ENDHDR_4 44
|
||||
#define BZ_X_ENDHDR_5 45
|
||||
#define BZ_X_ENDHDR_6 46
|
||||
#define BZ_X_CCRC_1 47
|
||||
#define BZ_X_CCRC_2 48
|
||||
#define BZ_X_CCRC_3 49
|
||||
#define BZ_X_CCRC_4 50
|
||||
|
||||
|
||||
|
||||
/*-- Constants for the fast MTF decoder. --*/
|
||||
|
||||
#define MTFA_SIZE 4096
|
||||
#define MTFL_SIZE 16
|
||||
|
||||
|
||||
|
||||
/*-- Structure holding all the decompression-side stuff. --*/
|
||||
|
||||
typedef
|
||||
struct {
|
||||
/* pointer back to the struct bz_stream */
|
||||
bz_stream* strm;
|
||||
|
||||
/* state indicator for this stream */
|
||||
Int32 state;
|
||||
|
||||
/* for doing the final run-length decoding */
|
||||
UChar state_out_ch;
|
||||
Int32 state_out_len;
|
||||
Bool blockRandomised;
|
||||
BZ_RAND_DECLS;
|
||||
|
||||
/* the buffer for bit stream reading */
|
||||
UInt32 bsBuff;
|
||||
Int32 bsLive;
|
||||
|
||||
/* misc administratium */
|
||||
Int32 blockSize100k;
|
||||
Bool smallDecompress;
|
||||
Int32 currBlockNo;
|
||||
Int32 verbosity;
|
||||
|
||||
/* for undoing the Burrows-Wheeler transform */
|
||||
Int32 origPtr;
|
||||
UInt32 tPos;
|
||||
Int32 k0;
|
||||
Int32 unzftab[256];
|
||||
Int32 nblock_used;
|
||||
Int32 cftab[257];
|
||||
Int32 cftabCopy[257];
|
||||
|
||||
/* for undoing the Burrows-Wheeler transform (FAST) */
|
||||
UInt32 *tt;
|
||||
|
||||
/* for undoing the Burrows-Wheeler transform (SMALL) */
|
||||
UInt16 *ll16;
|
||||
UChar *ll4;
|
||||
|
||||
/* stored and calculated CRCs */
|
||||
UInt32 storedBlockCRC;
|
||||
UInt32 storedCombinedCRC;
|
||||
UInt32 calculatedBlockCRC;
|
||||
UInt32 calculatedCombinedCRC;
|
||||
|
||||
/* map of bytes used in block */
|
||||
Int32 nInUse;
|
||||
Bool inUse[256];
|
||||
Bool inUse16[16];
|
||||
UChar seqToUnseq[256];
|
||||
|
||||
/* for decoding the MTF values */
|
||||
UChar mtfa [MTFA_SIZE];
|
||||
Int32 mtfbase[256 / MTFL_SIZE];
|
||||
UChar selector [BZ_MAX_SELECTORS];
|
||||
UChar selectorMtf[BZ_MAX_SELECTORS];
|
||||
UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
|
||||
Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
Int32 minLens[BZ_N_GROUPS];
|
||||
|
||||
/* save area for scalars in the main decompress code */
|
||||
Int32 save_i;
|
||||
Int32 save_j;
|
||||
Int32 save_t;
|
||||
Int32 save_alphaSize;
|
||||
Int32 save_nGroups;
|
||||
Int32 save_nSelectors;
|
||||
Int32 save_EOB;
|
||||
Int32 save_groupNo;
|
||||
Int32 save_groupPos;
|
||||
Int32 save_nextSym;
|
||||
Int32 save_nblockMAX;
|
||||
Int32 save_nblock;
|
||||
Int32 save_es;
|
||||
Int32 save_N;
|
||||
Int32 save_curr;
|
||||
Int32 save_zt;
|
||||
Int32 save_zn;
|
||||
Int32 save_zvec;
|
||||
Int32 save_zj;
|
||||
Int32 save_gSel;
|
||||
Int32 save_gMinlen;
|
||||
Int32* save_gLimit;
|
||||
Int32* save_gBase;
|
||||
Int32* save_gPerm;
|
||||
|
||||
}
|
||||
DState;
|
||||
|
||||
|
||||
|
||||
/*-- Macros for decompression. --*/
|
||||
|
||||
#define BZ_GET_FAST(cccc) \
|
||||
s->tPos = s->tt[s->tPos]; \
|
||||
cccc = (UChar)(s->tPos & 0xff); \
|
||||
s->tPos >>= 8;
|
||||
|
||||
#define BZ_GET_FAST_C(cccc) \
|
||||
c_tPos = c_tt[c_tPos]; \
|
||||
cccc = (UChar)(c_tPos & 0xff); \
|
||||
c_tPos >>= 8;
|
||||
|
||||
#define SET_LL4(i,n) \
|
||||
{ if (((i) & 0x1) == 0) \
|
||||
s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \
|
||||
s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \
|
||||
}
|
||||
|
||||
#define GET_LL4(i) \
|
||||
((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
|
||||
|
||||
#define SET_LL(i,n) \
|
||||
{ s->ll16[i] = (UInt16)(n & 0x0000ffff); \
|
||||
SET_LL4(i, n >> 16); \
|
||||
}
|
||||
|
||||
#define GET_LL(i) \
|
||||
(((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
|
||||
|
||||
#define BZ_GET_SMALL(cccc) \
|
||||
cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \
|
||||
s->tPos = GET_LL(s->tPos);
|
||||
|
||||
|
||||
/*-- externs for decompression. --*/
|
||||
|
||||
extern Int32
|
||||
BZ2_indexIntoF ( Int32, Int32* );
|
||||
|
||||
extern Int32
|
||||
BZ2_decompress ( DState* );
|
||||
|
||||
extern void
|
||||
BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
|
||||
Int32, Int32, Int32 );
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/
|
||||
|
||||
#ifdef BZ_NO_STDIO
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- end bzlib_private.h ---*/
|
||||
/*-------------------------------------------------------------*/
|
714
contrib/bzip2/compress.c
Normal file
714
contrib/bzip2/compress.c
Normal file
@ -0,0 +1,714 @@
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- Compression machinery (not incl block sorting) ---*/
|
||||
/*--- compress.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
||||
|
||||
/*--
|
||||
This file is a part of bzip2 and/or libbzip2, a program and
|
||||
library for lossless, block-sorting data compression.
|
||||
|
||||
Copyright (C) 1996-2000 Julian R Seward. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, Cambridge, UK.
|
||||
jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0 of 21 March 2000
|
||||
|
||||
This program is based on (at least) the work of:
|
||||
Mike Burrows
|
||||
David Wheeler
|
||||
Peter Fenwick
|
||||
Alistair Moffat
|
||||
Radford Neal
|
||||
Ian H. Witten
|
||||
Robert Sedgewick
|
||||
Jon L. Bentley
|
||||
|
||||
For more information on these sources, see the manual.
|
||||
--*/
|
||||
|
||||
/*--
|
||||
CHANGES
|
||||
~~~~~~~
|
||||
0.9.0 -- original version.
|
||||
|
||||
0.9.0a/b -- no changes in this file.
|
||||
|
||||
0.9.0c
|
||||
* changed setting of nGroups in sendMTFValues() so as to
|
||||
do a bit better on small files
|
||||
--*/
|
||||
|
||||
#include "bzlib_private.h"
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
/*--- Bit stream I/O ---*/
|
||||
/*---------------------------------------------------*/
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
void BZ2_bsInitWrite ( EState* s )
|
||||
{
|
||||
s->bsLive = 0;
|
||||
s->bsBuff = 0;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
static
|
||||
void bsFinishWrite ( EState* s )
|
||||
{
|
||||
while (s->bsLive > 0) {
|
||||
s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
|
||||
s->numZ++;
|
||||
s->bsBuff <<= 8;
|
||||
s->bsLive -= 8;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
#define bsNEEDW(nz) \
|
||||
{ \
|
||||
while (s->bsLive >= 8) { \
|
||||
s->zbits[s->numZ] \
|
||||
= (UChar)(s->bsBuff >> 24); \
|
||||
s->numZ++; \
|
||||
s->bsBuff <<= 8; \
|
||||
s->bsLive -= 8; \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
static
|
||||
__inline__
|
||||
void bsW ( EState* s, Int32 n, UInt32 v )
|
||||
{
|
||||
bsNEEDW ( n );
|
||||
s->bsBuff |= (v << (32 - s->bsLive - n));
|
||||
s->bsLive += n;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
static
|
||||
void bsPutUInt32 ( EState* s, UInt32 u )
|
||||
{
|
||||
bsW ( s, 8, (u >> 24) & 0xffL );
|
||||
bsW ( s, 8, (u >> 16) & 0xffL );
|
||||
bsW ( s, 8, (u >> 8) & 0xffL );
|
||||
bsW ( s, 8, u & 0xffL );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
static
|
||||
void bsPutUChar ( EState* s, UChar c )
|
||||
{
|
||||
bsW( s, 8, (UInt32)c );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
/*--- The back end proper ---*/
|
||||
/*---------------------------------------------------*/
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
static
|
||||
void makeMaps_e ( EState* s )
|
||||
{
|
||||
Int32 i;
|
||||
s->nInUse = 0;
|
||||
for (i = 0; i < 256; i++)
|
||||
if (s->inUse[i]) {
|
||||
s->unseqToSeq[i] = s->nInUse;
|
||||
s->nInUse++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
static
|
||||
void generateMTFValues ( EState* s )
|
||||
{
|
||||
UChar yy[256];
|
||||
Int32 i, j;
|
||||
Int32 zPend;
|
||||
Int32 wr;
|
||||
Int32 EOB;
|
||||
|
||||
/*
|
||||
After sorting (eg, here),
|
||||
s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,
|
||||
and
|
||||
((UChar*)s->arr2) [ 0 .. s->nblock-1 ]
|
||||
holds the original block data.
|
||||
|
||||
The first thing to do is generate the MTF values,
|
||||
and put them in
|
||||
((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].
|
||||
Because there are strictly fewer or equal MTF values
|
||||
than block values, ptr values in this area are overwritten
|
||||
with MTF values only when they are no longer needed.
|
||||
|
||||
The final compressed bitstream is generated into the
|
||||
area starting at
|
||||
(UChar*) (&((UChar*)s->arr2)[s->nblock])
|
||||
|
||||
These storage aliases are set up in bzCompressInit(),
|
||||
except for the last one, which is arranged in
|
||||
compressBlock().
|
||||
*/
|
||||
UInt32* ptr = s->ptr;
|
||||
UChar* block = s->block;
|
||||
UInt16* mtfv = s->mtfv;
|
||||
|
||||
makeMaps_e ( s );
|
||||
EOB = s->nInUse+1;
|
||||
|
||||
for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;
|
||||
|
||||
wr = 0;
|
||||
zPend = 0;
|
||||
for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;
|
||||
|
||||
for (i = 0; i < s->nblock; i++) {
|
||||
UChar ll_i;
|
||||
AssertD ( wr <= i, "generateMTFValues(1)" );
|
||||
j = ptr[i]-1; if (j < 0) j += s->nblock;
|
||||
ll_i = s->unseqToSeq[block[j]];
|
||||
AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" );
|
||||
|
||||
if (yy[0] == ll_i) {
|
||||
zPend++;
|
||||
} else {
|
||||
|
||||
if (zPend > 0) {
|
||||
zPend--;
|
||||
while (True) {
|
||||
if (zPend & 1) {
|
||||
mtfv[wr] = BZ_RUNB; wr++;
|
||||
s->mtfFreq[BZ_RUNB]++;
|
||||
} else {
|
||||
mtfv[wr] = BZ_RUNA; wr++;
|
||||
s->mtfFreq[BZ_RUNA]++;
|
||||
}
|
||||
if (zPend < 2) break;
|
||||
zPend = (zPend - 2) / 2;
|
||||
};
|
||||
zPend = 0;
|
||||
}
|
||||
{
|
||||
register UChar rtmp;
|
||||
register UChar* ryy_j;
|
||||
register UChar rll_i;
|
||||
rtmp = yy[1];
|
||||
yy[1] = yy[0];
|
||||
ryy_j = &(yy[1]);
|
||||
rll_i = ll_i;
|
||||
while ( rll_i != rtmp ) {
|
||||
register UChar rtmp2;
|
||||
ryy_j++;
|
||||
rtmp2 = rtmp;
|
||||
rtmp = *ryy_j;
|
||||
*ryy_j = rtmp2;
|
||||
};
|
||||
yy[0] = rtmp;
|
||||
j = ryy_j - &(yy[0]);
|
||||
mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (zPend > 0) {
|
||||
zPend--;
|
||||
while (True) {
|
||||
if (zPend & 1) {
|
||||
mtfv[wr] = BZ_RUNB; wr++;
|
||||
s->mtfFreq[BZ_RUNB]++;
|
||||
} else {
|
||||
mtfv[wr] = BZ_RUNA; wr++;
|
||||
s->mtfFreq[BZ_RUNA]++;
|
||||
}
|
||||
if (zPend < 2) break;
|
||||
zPend = (zPend - 2) / 2;
|
||||
};
|
||||
zPend = 0;
|
||||
}
|
||||
|
||||
mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;
|
||||
|
||||
s->nMTF = wr;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
#define BZ_LESSER_ICOST 0
|
||||
#define BZ_GREATER_ICOST 15
|
||||
|
||||
static
|
||||
void sendMTFValues ( EState* s )
|
||||
{
|
||||
Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;
|
||||
Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
|
||||
Int32 nGroups, nBytes;
|
||||
|
||||
/*--
|
||||
UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
is a global since the decoder also needs it.
|
||||
|
||||
Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
|
||||
are also globals only used in this proc.
|
||||
Made global to keep stack frame size small.
|
||||
--*/
|
||||
|
||||
|
||||
UInt16 cost[BZ_N_GROUPS];
|
||||
Int32 fave[BZ_N_GROUPS];
|
||||
|
||||
UInt16* mtfv = s->mtfv;
|
||||
|
||||
if (s->verbosity >= 3)
|
||||
VPrintf3( " %d in block, %d after MTF & 1-2 coding, "
|
||||
"%d+2 syms in use\n",
|
||||
s->nblock, s->nMTF, s->nInUse );
|
||||
|
||||
alphaSize = s->nInUse+2;
|
||||
for (t = 0; t < BZ_N_GROUPS; t++)
|
||||
for (v = 0; v < alphaSize; v++)
|
||||
s->len[t][v] = BZ_GREATER_ICOST;
|
||||
|
||||
/*--- Decide how many coding tables to use ---*/
|
||||
AssertH ( s->nMTF > 0, 3001 );
|
||||
if (s->nMTF < 200) nGroups = 2; else
|
||||
if (s->nMTF < 600) nGroups = 3; else
|
||||
if (s->nMTF < 1200) nGroups = 4; else
|
||||
if (s->nMTF < 2400) nGroups = 5; else
|
||||
nGroups = 6;
|
||||
|
||||
/*--- Generate an initial set of coding tables ---*/
|
||||
{
|
||||
Int32 nPart, remF, tFreq, aFreq;
|
||||
|
||||
nPart = nGroups;
|
||||
remF = s->nMTF;
|
||||
gs = 0;
|
||||
while (nPart > 0) {
|
||||
tFreq = remF / nPart;
|
||||
ge = gs-1;
|
||||
aFreq = 0;
|
||||
while (aFreq < tFreq && ge < alphaSize-1) {
|
||||
ge++;
|
||||
aFreq += s->mtfFreq[ge];
|
||||
}
|
||||
|
||||
if (ge > gs
|
||||
&& nPart != nGroups && nPart != 1
|
||||
&& ((nGroups-nPart) % 2 == 1)) {
|
||||
aFreq -= s->mtfFreq[ge];
|
||||
ge--;
|
||||
}
|
||||
|
||||
if (s->verbosity >= 3)
|
||||
VPrintf5( " initial group %d, [%d .. %d], "
|
||||
"has %d syms (%4.1f%%)\n",
|
||||
nPart, gs, ge, aFreq,
|
||||
(100.0 * (float)aFreq) / (float)(s->nMTF) );
|
||||
|
||||
for (v = 0; v < alphaSize; v++)
|
||||
if (v >= gs && v <= ge)
|
||||
s->len[nPart-1][v] = BZ_LESSER_ICOST; else
|
||||
s->len[nPart-1][v] = BZ_GREATER_ICOST;
|
||||
|
||||
nPart--;
|
||||
gs = ge+1;
|
||||
remF -= aFreq;
|
||||
}
|
||||
}
|
||||
|
||||
/*---
|
||||
Iterate up to BZ_N_ITERS times to improve the tables.
|
||||
---*/
|
||||
for (iter = 0; iter < BZ_N_ITERS; iter++) {
|
||||
|
||||
for (t = 0; t < nGroups; t++) fave[t] = 0;
|
||||
|
||||
for (t = 0; t < nGroups; t++)
|
||||
for (v = 0; v < alphaSize; v++)
|
||||
s->rfreq[t][v] = 0;
|
||||
|
||||
/*---
|
||||
Set up an auxiliary length table which is used to fast-track
|
||||
the common case (nGroups == 6).
|
||||
---*/
|
||||
if (nGroups == 6) {
|
||||
for (v = 0; v < alphaSize; v++) {
|
||||
s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
|
||||
s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
|
||||
s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
|
||||
}
|
||||
}
|
||||
|
||||
nSelectors = 0;
|
||||
totc = 0;
|
||||
gs = 0;
|
||||
while (True) {
|
||||
|
||||
/*--- Set group start & end marks. --*/
|
||||
if (gs >= s->nMTF) break;
|
||||
ge = gs + BZ_G_SIZE - 1;
|
||||
if (ge >= s->nMTF) ge = s->nMTF-1;
|
||||
|
||||
/*--
|
||||
Calculate the cost of this group as coded
|
||||
by each of the coding tables.
|
||||
--*/
|
||||
for (t = 0; t < nGroups; t++) cost[t] = 0;
|
||||
|
||||
if (nGroups == 6 && 50 == ge-gs+1) {
|
||||
/*--- fast track the common case ---*/
|
||||
register UInt32 cost01, cost23, cost45;
|
||||
register UInt16 icv;
|
||||
cost01 = cost23 = cost45 = 0;
|
||||
|
||||
# define BZ_ITER(nn) \
|
||||
icv = mtfv[gs+(nn)]; \
|
||||
cost01 += s->len_pack[icv][0]; \
|
||||
cost23 += s->len_pack[icv][1]; \
|
||||
cost45 += s->len_pack[icv][2]; \
|
||||
|
||||
BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4);
|
||||
BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9);
|
||||
BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);
|
||||
BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);
|
||||
BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);
|
||||
BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);
|
||||
BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);
|
||||
BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);
|
||||
BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);
|
||||
BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);
|
||||
|
||||
# undef BZ_ITER
|
||||
|
||||
cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
|
||||
cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
|
||||
cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;
|
||||
|
||||
} else {
|
||||
/*--- slow version which correctly handles all situations ---*/
|
||||
for (i = gs; i <= ge; i++) {
|
||||
UInt16 icv = mtfv[i];
|
||||
for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
|
||||
}
|
||||
}
|
||||
|
||||
/*--
|
||||
Find the coding table which is best for this group,
|
||||
and record its identity in the selector table.
|
||||
--*/
|
||||
bc = 999999999; bt = -1;
|
||||
for (t = 0; t < nGroups; t++)
|
||||
if (cost[t] < bc) { bc = cost[t]; bt = t; };
|
||||
totc += bc;
|
||||
fave[bt]++;
|
||||
s->selector[nSelectors] = bt;
|
||||
nSelectors++;
|
||||
|
||||
/*--
|
||||
Increment the symbol frequencies for the selected table.
|
||||
--*/
|
||||
if (nGroups == 6 && 50 == ge-gs+1) {
|
||||
/*--- fast track the common case ---*/
|
||||
|
||||
# define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++
|
||||
|
||||
BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4);
|
||||
BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9);
|
||||
BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);
|
||||
BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);
|
||||
BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);
|
||||
BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);
|
||||
BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);
|
||||
BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);
|
||||
BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);
|
||||
BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);
|
||||
|
||||
# undef BZ_ITUR
|
||||
|
||||
} else {
|
||||
/*--- slow version which correctly handles all situations ---*/
|
||||
for (i = gs; i <= ge; i++)
|
||||
s->rfreq[bt][ mtfv[i] ]++;
|
||||
}
|
||||
|
||||
gs = ge+1;
|
||||
}
|
||||
if (s->verbosity >= 3) {
|
||||
VPrintf2 ( " pass %d: size is %d, grp uses are ",
|
||||
iter+1, totc/8 );
|
||||
for (t = 0; t < nGroups; t++)
|
||||
VPrintf1 ( "%d ", fave[t] );
|
||||
VPrintf0 ( "\n" );
|
||||
}
|
||||
|
||||
/*--
|
||||
Recompute the tables based on the accumulated frequencies.
|
||||
--*/
|
||||
for (t = 0; t < nGroups; t++)
|
||||
BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]),
|
||||
alphaSize, 20 );
|
||||
}
|
||||
|
||||
|
||||
AssertH( nGroups < 8, 3002 );
|
||||
AssertH( nSelectors < 32768 &&
|
||||
nSelectors <= (2 + (900000 / BZ_G_SIZE)),
|
||||
3003 );
|
||||
|
||||
|
||||
/*--- Compute MTF values for the selectors. ---*/
|
||||
{
|
||||
UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;
|
||||
for (i = 0; i < nGroups; i++) pos[i] = i;
|
||||
for (i = 0; i < nSelectors; i++) {
|
||||
ll_i = s->selector[i];
|
||||
j = 0;
|
||||
tmp = pos[j];
|
||||
while ( ll_i != tmp ) {
|
||||
j++;
|
||||
tmp2 = tmp;
|
||||
tmp = pos[j];
|
||||
pos[j] = tmp2;
|
||||
};
|
||||
pos[0] = tmp;
|
||||
s->selectorMtf[i] = j;
|
||||
}
|
||||
};
|
||||
|
||||
/*--- Assign actual codes for the tables. --*/
|
||||
for (t = 0; t < nGroups; t++) {
|
||||
minLen = 32;
|
||||
maxLen = 0;
|
||||
for (i = 0; i < alphaSize; i++) {
|
||||
if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
|
||||
if (s->len[t][i] < minLen) minLen = s->len[t][i];
|
||||
}
|
||||
AssertH ( !(maxLen > 20), 3004 );
|
||||
AssertH ( !(minLen < 1), 3005 );
|
||||
BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]),
|
||||
minLen, maxLen, alphaSize );
|
||||
}
|
||||
|
||||
/*--- Transmit the mapping table. ---*/
|
||||
{
|
||||
Bool inUse16[16];
|
||||
for (i = 0; i < 16; i++) {
|
||||
inUse16[i] = False;
|
||||
for (j = 0; j < 16; j++)
|
||||
if (s->inUse[i * 16 + j]) inUse16[i] = True;
|
||||
}
|
||||
|
||||
nBytes = s->numZ;
|
||||
for (i = 0; i < 16; i++)
|
||||
if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
if (inUse16[i])
|
||||
for (j = 0; j < 16; j++) {
|
||||
if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
|
||||
}
|
||||
|
||||
if (s->verbosity >= 3)
|
||||
VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes );
|
||||
}
|
||||
|
||||
/*--- Now the selectors. ---*/
|
||||
nBytes = s->numZ;
|
||||
bsW ( s, 3, nGroups );
|
||||
bsW ( s, 15, nSelectors );
|
||||
for (i = 0; i < nSelectors; i++) {
|
||||
for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
|
||||
bsW(s,1,0);
|
||||
}
|
||||
if (s->verbosity >= 3)
|
||||
VPrintf1( "selectors %d, ", s->numZ-nBytes );
|
||||
|
||||
/*--- Now the coding tables. ---*/
|
||||
nBytes = s->numZ;
|
||||
|
||||
for (t = 0; t < nGroups; t++) {
|
||||
Int32 curr = s->len[t][0];
|
||||
bsW ( s, 5, curr );
|
||||
for (i = 0; i < alphaSize; i++) {
|
||||
while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };
|
||||
while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };
|
||||
bsW ( s, 1, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
if (s->verbosity >= 3)
|
||||
VPrintf1 ( "code lengths %d, ", s->numZ-nBytes );
|
||||
|
||||
/*--- And finally, the block data proper ---*/
|
||||
nBytes = s->numZ;
|
||||
selCtr = 0;
|
||||
gs = 0;
|
||||
while (True) {
|
||||
if (gs >= s->nMTF) break;
|
||||
ge = gs + BZ_G_SIZE - 1;
|
||||
if (ge >= s->nMTF) ge = s->nMTF-1;
|
||||
AssertH ( s->selector[selCtr] < nGroups, 3006 );
|
||||
|
||||
if (nGroups == 6 && 50 == ge-gs+1) {
|
||||
/*--- fast track the common case ---*/
|
||||
UInt16 mtfv_i;
|
||||
UChar* s_len_sel_selCtr
|
||||
= &(s->len[s->selector[selCtr]][0]);
|
||||
Int32* s_code_sel_selCtr
|
||||
= &(s->code[s->selector[selCtr]][0]);
|
||||
|
||||
# define BZ_ITAH(nn) \
|
||||
mtfv_i = mtfv[gs+(nn)]; \
|
||||
bsW ( s, \
|
||||
s_len_sel_selCtr[mtfv_i], \
|
||||
s_code_sel_selCtr[mtfv_i] )
|
||||
|
||||
BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4);
|
||||
BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9);
|
||||
BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);
|
||||
BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);
|
||||
BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);
|
||||
BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);
|
||||
BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);
|
||||
BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);
|
||||
BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);
|
||||
BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);
|
||||
|
||||
# undef BZ_ITAH
|
||||
|
||||
} else {
|
||||
/*--- slow version which correctly handles all situations ---*/
|
||||
for (i = gs; i <= ge; i++) {
|
||||
bsW ( s,
|
||||
s->len [s->selector[selCtr]] [mtfv[i]],
|
||||
s->code [s->selector[selCtr]] [mtfv[i]] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
gs = ge+1;
|
||||
selCtr++;
|
||||
}
|
||||
AssertH( selCtr == nSelectors, 3007 );
|
||||
|
||||
if (s->verbosity >= 3)
|
||||
VPrintf1( "codes %d\n", s->numZ-nBytes );
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
void BZ2_compressBlock ( EState* s, Bool is_last_block )
|
||||
{
|
||||
if (s->nblock > 0) {
|
||||
|
||||
BZ_FINALISE_CRC ( s->blockCRC );
|
||||
s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
|
||||
s->combinedCRC ^= s->blockCRC;
|
||||
if (s->blockNo > 1) s->numZ = 0;
|
||||
|
||||
if (s->verbosity >= 2)
|
||||
VPrintf4( " block %d: crc = 0x%8x, "
|
||||
"combined CRC = 0x%8x, size = %d\n",
|
||||
s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );
|
||||
|
||||
BZ2_blockSort ( s );
|
||||
}
|
||||
|
||||
s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);
|
||||
|
||||
/*-- If this is the first block, create the stream header. --*/
|
||||
if (s->blockNo == 1) {
|
||||
BZ2_bsInitWrite ( s );
|
||||
bsPutUChar ( s, 'B' );
|
||||
bsPutUChar ( s, 'Z' );
|
||||
bsPutUChar ( s, 'h' );
|
||||
bsPutUChar ( s, (UChar)('0' + s->blockSize100k) );
|
||||
}
|
||||
|
||||
if (s->nblock > 0) {
|
||||
|
||||
bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
|
||||
bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
|
||||
bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );
|
||||
|
||||
/*-- Now the block's CRC, so it is in a known place. --*/
|
||||
bsPutUInt32 ( s, s->blockCRC );
|
||||
|
||||
/*--
|
||||
Now a single bit indicating (non-)randomisation.
|
||||
As of version 0.9.5, we use a better sorting algorithm
|
||||
which makes randomisation unnecessary. So always set
|
||||
the randomised bit to 'no'. Of course, the decoder
|
||||
still needs to be able to handle randomised blocks
|
||||
so as to maintain backwards compatibility with
|
||||
older versions of bzip2.
|
||||
--*/
|
||||
bsW(s,1,0);
|
||||
|
||||
bsW ( s, 24, s->origPtr );
|
||||
generateMTFValues ( s );
|
||||
sendMTFValues ( s );
|
||||
}
|
||||
|
||||
|
||||
/*-- If this is the last block, add the stream trailer. --*/
|
||||
if (is_last_block) {
|
||||
|
||||
bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
|
||||
bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
|
||||
bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
|
||||
bsPutUInt32 ( s, s->combinedCRC );
|
||||
if (s->verbosity >= 2)
|
||||
VPrintf1( " final combined CRC = 0x%x\n ", s->combinedCRC );
|
||||
bsFinishWrite ( s );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- end compress.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
144
contrib/bzip2/crctable.c
Normal file
144
contrib/bzip2/crctable.c
Normal file
@ -0,0 +1,144 @@
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- Table for doing CRCs ---*/
|
||||
/*--- crctable.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
||||
|
||||
/*--
|
||||
This file is a part of bzip2 and/or libbzip2, a program and
|
||||
library for lossless, block-sorting data compression.
|
||||
|
||||
Copyright (C) 1996-2000 Julian R Seward. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, Cambridge, UK.
|
||||
jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0 of 21 March 2000
|
||||
|
||||
This program is based on (at least) the work of:
|
||||
Mike Burrows
|
||||
David Wheeler
|
||||
Peter Fenwick
|
||||
Alistair Moffat
|
||||
Radford Neal
|
||||
Ian H. Witten
|
||||
Robert Sedgewick
|
||||
Jon L. Bentley
|
||||
|
||||
For more information on these sources, see the manual.
|
||||
--*/
|
||||
|
||||
|
||||
#include "bzlib_private.h"
|
||||
|
||||
/*--
|
||||
I think this is an implementation of the AUTODIN-II,
|
||||
Ethernet & FDDI 32-bit CRC standard. Vaguely derived
|
||||
from code by Rob Warnock, in Section 51 of the
|
||||
comp.compression FAQ.
|
||||
--*/
|
||||
|
||||
UInt32 BZ2_crc32Table[256] = {
|
||||
|
||||
/*-- Ugly, innit? --*/
|
||||
|
||||
0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
|
||||
0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
|
||||
0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
|
||||
0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
|
||||
0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
|
||||
0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
|
||||
0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
|
||||
0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
|
||||
0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
|
||||
0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
|
||||
0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
|
||||
0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
|
||||
0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
|
||||
0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
|
||||
0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
|
||||
0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
|
||||
0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
|
||||
0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
|
||||
0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
|
||||
0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
|
||||
0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
|
||||
0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
|
||||
0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
|
||||
0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
|
||||
0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
|
||||
0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
|
||||
0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
|
||||
0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
|
||||
0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
|
||||
0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
|
||||
0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
|
||||
0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
|
||||
0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
|
||||
0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
|
||||
0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
|
||||
0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
|
||||
0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
|
||||
0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
|
||||
0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
|
||||
0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
|
||||
0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
|
||||
0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
|
||||
0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
|
||||
0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
|
||||
0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
|
||||
0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
|
||||
0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
|
||||
0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
|
||||
0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
|
||||
0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
|
||||
0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
|
||||
0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
|
||||
0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
|
||||
0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
|
||||
0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
|
||||
0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
|
||||
0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
|
||||
0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
|
||||
0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
|
||||
0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
|
||||
0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
|
||||
0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
|
||||
0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
|
||||
0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
|
||||
};
|
||||
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- end crctable.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
660
contrib/bzip2/decompress.c
Normal file
660
contrib/bzip2/decompress.c
Normal file
@ -0,0 +1,660 @@
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- Decompression machinery ---*/
|
||||
/*--- decompress.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
||||
|
||||
/*--
|
||||
This file is a part of bzip2 and/or libbzip2, a program and
|
||||
library for lossless, block-sorting data compression.
|
||||
|
||||
Copyright (C) 1996-2000 Julian R Seward. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, Cambridge, UK.
|
||||
jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0 of 21 March 2000
|
||||
|
||||
This program is based on (at least) the work of:
|
||||
Mike Burrows
|
||||
David Wheeler
|
||||
Peter Fenwick
|
||||
Alistair Moffat
|
||||
Radford Neal
|
||||
Ian H. Witten
|
||||
Robert Sedgewick
|
||||
Jon L. Bentley
|
||||
|
||||
For more information on these sources, see the manual.
|
||||
--*/
|
||||
|
||||
|
||||
#include "bzlib_private.h"
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
static
|
||||
void makeMaps_d ( DState* s )
|
||||
{
|
||||
Int32 i;
|
||||
s->nInUse = 0;
|
||||
for (i = 0; i < 256; i++)
|
||||
if (s->inUse[i]) {
|
||||
s->seqToUnseq[s->nInUse] = i;
|
||||
s->nInUse++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
#define RETURN(rrr) \
|
||||
{ retVal = rrr; goto save_state_and_return; };
|
||||
|
||||
#define GET_BITS(lll,vvv,nnn) \
|
||||
case lll: s->state = lll; \
|
||||
while (True) { \
|
||||
if (s->bsLive >= nnn) { \
|
||||
UInt32 v; \
|
||||
v = (s->bsBuff >> \
|
||||
(s->bsLive-nnn)) & ((1 << nnn)-1); \
|
||||
s->bsLive -= nnn; \
|
||||
vvv = v; \
|
||||
break; \
|
||||
} \
|
||||
if (s->strm->avail_in == 0) RETURN(BZ_OK); \
|
||||
s->bsBuff \
|
||||
= (s->bsBuff << 8) | \
|
||||
((UInt32) \
|
||||
(*((UChar*)(s->strm->next_in)))); \
|
||||
s->bsLive += 8; \
|
||||
s->strm->next_in++; \
|
||||
s->strm->avail_in--; \
|
||||
s->strm->total_in_lo32++; \
|
||||
if (s->strm->total_in_lo32 == 0) \
|
||||
s->strm->total_in_hi32++; \
|
||||
}
|
||||
|
||||
#define GET_UCHAR(lll,uuu) \
|
||||
GET_BITS(lll,uuu,8)
|
||||
|
||||
#define GET_BIT(lll,uuu) \
|
||||
GET_BITS(lll,uuu,1)
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
#define GET_MTF_VAL(label1,label2,lval) \
|
||||
{ \
|
||||
if (groupPos == 0) { \
|
||||
groupNo++; \
|
||||
if (groupNo >= nSelectors) \
|
||||
RETURN(BZ_DATA_ERROR); \
|
||||
groupPos = BZ_G_SIZE; \
|
||||
gSel = s->selector[groupNo]; \
|
||||
gMinlen = s->minLens[gSel]; \
|
||||
gLimit = &(s->limit[gSel][0]); \
|
||||
gPerm = &(s->perm[gSel][0]); \
|
||||
gBase = &(s->base[gSel][0]); \
|
||||
} \
|
||||
groupPos--; \
|
||||
zn = gMinlen; \
|
||||
GET_BITS(label1, zvec, zn); \
|
||||
while (1) { \
|
||||
if (zn > 20 /* the longest code */) \
|
||||
RETURN(BZ_DATA_ERROR); \
|
||||
if (zvec <= gLimit[zn]) break; \
|
||||
zn++; \
|
||||
GET_BIT(label2, zj); \
|
||||
zvec = (zvec << 1) | zj; \
|
||||
}; \
|
||||
if (zvec - gBase[zn] < 0 \
|
||||
|| zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \
|
||||
RETURN(BZ_DATA_ERROR); \
|
||||
lval = gPerm[zvec - gBase[zn]]; \
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
Int32 BZ2_decompress ( DState* s )
|
||||
{
|
||||
UChar uc;
|
||||
Int32 retVal;
|
||||
Int32 minLen, maxLen;
|
||||
bz_stream* strm = s->strm;
|
||||
|
||||
/* stuff that needs to be saved/restored */
|
||||
Int32 i;
|
||||
Int32 j;
|
||||
Int32 t;
|
||||
Int32 alphaSize;
|
||||
Int32 nGroups;
|
||||
Int32 nSelectors;
|
||||
Int32 EOB;
|
||||
Int32 groupNo;
|
||||
Int32 groupPos;
|
||||
Int32 nextSym;
|
||||
Int32 nblockMAX;
|
||||
Int32 nblock;
|
||||
Int32 es;
|
||||
Int32 N;
|
||||
Int32 curr;
|
||||
Int32 zt;
|
||||
Int32 zn;
|
||||
Int32 zvec;
|
||||
Int32 zj;
|
||||
Int32 gSel;
|
||||
Int32 gMinlen;
|
||||
Int32* gLimit;
|
||||
Int32* gBase;
|
||||
Int32* gPerm;
|
||||
|
||||
if (s->state == BZ_X_MAGIC_1) {
|
||||
/*initialise the save area*/
|
||||
s->save_i = 0;
|
||||
s->save_j = 0;
|
||||
s->save_t = 0;
|
||||
s->save_alphaSize = 0;
|
||||
s->save_nGroups = 0;
|
||||
s->save_nSelectors = 0;
|
||||
s->save_EOB = 0;
|
||||
s->save_groupNo = 0;
|
||||
s->save_groupPos = 0;
|
||||
s->save_nextSym = 0;
|
||||
s->save_nblockMAX = 0;
|
||||
s->save_nblock = 0;
|
||||
s->save_es = 0;
|
||||
s->save_N = 0;
|
||||
s->save_curr = 0;
|
||||
s->save_zt = 0;
|
||||
s->save_zn = 0;
|
||||
s->save_zvec = 0;
|
||||
s->save_zj = 0;
|
||||
s->save_gSel = 0;
|
||||
s->save_gMinlen = 0;
|
||||
s->save_gLimit = NULL;
|
||||
s->save_gBase = NULL;
|
||||
s->save_gPerm = NULL;
|
||||
}
|
||||
|
||||
/*restore from the save area*/
|
||||
i = s->save_i;
|
||||
j = s->save_j;
|
||||
t = s->save_t;
|
||||
alphaSize = s->save_alphaSize;
|
||||
nGroups = s->save_nGroups;
|
||||
nSelectors = s->save_nSelectors;
|
||||
EOB = s->save_EOB;
|
||||
groupNo = s->save_groupNo;
|
||||
groupPos = s->save_groupPos;
|
||||
nextSym = s->save_nextSym;
|
||||
nblockMAX = s->save_nblockMAX;
|
||||
nblock = s->save_nblock;
|
||||
es = s->save_es;
|
||||
N = s->save_N;
|
||||
curr = s->save_curr;
|
||||
zt = s->save_zt;
|
||||
zn = s->save_zn;
|
||||
zvec = s->save_zvec;
|
||||
zj = s->save_zj;
|
||||
gSel = s->save_gSel;
|
||||
gMinlen = s->save_gMinlen;
|
||||
gLimit = s->save_gLimit;
|
||||
gBase = s->save_gBase;
|
||||
gPerm = s->save_gPerm;
|
||||
|
||||
retVal = BZ_OK;
|
||||
|
||||
switch (s->state) {
|
||||
|
||||
GET_UCHAR(BZ_X_MAGIC_1, uc);
|
||||
if (uc != 'B') RETURN(BZ_DATA_ERROR_MAGIC);
|
||||
|
||||
GET_UCHAR(BZ_X_MAGIC_2, uc);
|
||||
if (uc != 'Z') RETURN(BZ_DATA_ERROR_MAGIC);
|
||||
|
||||
GET_UCHAR(BZ_X_MAGIC_3, uc)
|
||||
if (uc != 'h') RETURN(BZ_DATA_ERROR_MAGIC);
|
||||
|
||||
GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)
|
||||
if (s->blockSize100k < '1' ||
|
||||
s->blockSize100k > '9') RETURN(BZ_DATA_ERROR_MAGIC);
|
||||
s->blockSize100k -= '0';
|
||||
|
||||
if (s->smallDecompress) {
|
||||
s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
|
||||
s->ll4 = BZALLOC(
|
||||
((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar)
|
||||
);
|
||||
if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
|
||||
} else {
|
||||
s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
|
||||
if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
|
||||
}
|
||||
|
||||
GET_UCHAR(BZ_X_BLKHDR_1, uc);
|
||||
|
||||
if (uc == 0x17) goto endhdr_2;
|
||||
if (uc != 0x31) RETURN(BZ_DATA_ERROR);
|
||||
GET_UCHAR(BZ_X_BLKHDR_2, uc);
|
||||
if (uc != 0x41) RETURN(BZ_DATA_ERROR);
|
||||
GET_UCHAR(BZ_X_BLKHDR_3, uc);
|
||||
if (uc != 0x59) RETURN(BZ_DATA_ERROR);
|
||||
GET_UCHAR(BZ_X_BLKHDR_4, uc);
|
||||
if (uc != 0x26) RETURN(BZ_DATA_ERROR);
|
||||
GET_UCHAR(BZ_X_BLKHDR_5, uc);
|
||||
if (uc != 0x53) RETURN(BZ_DATA_ERROR);
|
||||
GET_UCHAR(BZ_X_BLKHDR_6, uc);
|
||||
if (uc != 0x59) RETURN(BZ_DATA_ERROR);
|
||||
|
||||
s->currBlockNo++;
|
||||
if (s->verbosity >= 2)
|
||||
VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo );
|
||||
|
||||
s->storedBlockCRC = 0;
|
||||
GET_UCHAR(BZ_X_BCRC_1, uc);
|
||||
s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
|
||||
GET_UCHAR(BZ_X_BCRC_2, uc);
|
||||
s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
|
||||
GET_UCHAR(BZ_X_BCRC_3, uc);
|
||||
s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
|
||||
GET_UCHAR(BZ_X_BCRC_4, uc);
|
||||
s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
|
||||
|
||||
GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);
|
||||
|
||||
s->origPtr = 0;
|
||||
GET_UCHAR(BZ_X_ORIGPTR_1, uc);
|
||||
s->origPtr = (s->origPtr << 8) | ((Int32)uc);
|
||||
GET_UCHAR(BZ_X_ORIGPTR_2, uc);
|
||||
s->origPtr = (s->origPtr << 8) | ((Int32)uc);
|
||||
GET_UCHAR(BZ_X_ORIGPTR_3, uc);
|
||||
s->origPtr = (s->origPtr << 8) | ((Int32)uc);
|
||||
|
||||
if (s->origPtr < 0)
|
||||
RETURN(BZ_DATA_ERROR);
|
||||
if (s->origPtr > 10 + 100000*s->blockSize100k)
|
||||
RETURN(BZ_DATA_ERROR);
|
||||
|
||||
/*--- Receive the mapping table ---*/
|
||||
for (i = 0; i < 16; i++) {
|
||||
GET_BIT(BZ_X_MAPPING_1, uc);
|
||||
if (uc == 1)
|
||||
s->inUse16[i] = True; else
|
||||
s->inUse16[i] = False;
|
||||
}
|
||||
|
||||
for (i = 0; i < 256; i++) s->inUse[i] = False;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
if (s->inUse16[i])
|
||||
for (j = 0; j < 16; j++) {
|
||||
GET_BIT(BZ_X_MAPPING_2, uc);
|
||||
if (uc == 1) s->inUse[i * 16 + j] = True;
|
||||
}
|
||||
makeMaps_d ( s );
|
||||
if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
|
||||
alphaSize = s->nInUse+2;
|
||||
|
||||
/*--- Now the selectors ---*/
|
||||
GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
|
||||
if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
|
||||
GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
|
||||
if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
|
||||
for (i = 0; i < nSelectors; i++) {
|
||||
j = 0;
|
||||
while (True) {
|
||||
GET_BIT(BZ_X_SELECTOR_3, uc);
|
||||
if (uc == 0) break;
|
||||
j++;
|
||||
if (j >= nGroups) RETURN(BZ_DATA_ERROR);
|
||||
}
|
||||
s->selectorMtf[i] = j;
|
||||
}
|
||||
|
||||
/*--- Undo the MTF values for the selectors. ---*/
|
||||
{
|
||||
UChar pos[BZ_N_GROUPS], tmp, v;
|
||||
for (v = 0; v < nGroups; v++) pos[v] = v;
|
||||
|
||||
for (i = 0; i < nSelectors; i++) {
|
||||
v = s->selectorMtf[i];
|
||||
tmp = pos[v];
|
||||
while (v > 0) { pos[v] = pos[v-1]; v--; }
|
||||
pos[0] = tmp;
|
||||
s->selector[i] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
/*--- Now the coding tables ---*/
|
||||
for (t = 0; t < nGroups; t++) {
|
||||
GET_BITS(BZ_X_CODING_1, curr, 5);
|
||||
for (i = 0; i < alphaSize; i++) {
|
||||
while (True) {
|
||||
if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
|
||||
GET_BIT(BZ_X_CODING_2, uc);
|
||||
if (uc == 0) break;
|
||||
GET_BIT(BZ_X_CODING_3, uc);
|
||||
if (uc == 0) curr++; else curr--;
|
||||
}
|
||||
s->len[t][i] = curr;
|
||||
}
|
||||
}
|
||||
|
||||
/*--- Create the Huffman decoding tables ---*/
|
||||
for (t = 0; t < nGroups; t++) {
|
||||
minLen = 32;
|
||||
maxLen = 0;
|
||||
for (i = 0; i < alphaSize; i++) {
|
||||
if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
|
||||
if (s->len[t][i] < minLen) minLen = s->len[t][i];
|
||||
}
|
||||
BZ2_hbCreateDecodeTables (
|
||||
&(s->limit[t][0]),
|
||||
&(s->base[t][0]),
|
||||
&(s->perm[t][0]),
|
||||
&(s->len[t][0]),
|
||||
minLen, maxLen, alphaSize
|
||||
);
|
||||
s->minLens[t] = minLen;
|
||||
}
|
||||
|
||||
/*--- Now the MTF values ---*/
|
||||
|
||||
EOB = s->nInUse+1;
|
||||
nblockMAX = 100000 * s->blockSize100k;
|
||||
groupNo = -1;
|
||||
groupPos = 0;
|
||||
|
||||
for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
|
||||
|
||||
/*-- MTF init --*/
|
||||
{
|
||||
Int32 ii, jj, kk;
|
||||
kk = MTFA_SIZE-1;
|
||||
for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
|
||||
for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
|
||||
s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
|
||||
kk--;
|
||||
}
|
||||
s->mtfbase[ii] = kk + 1;
|
||||
}
|
||||
}
|
||||
/*-- end MTF init --*/
|
||||
|
||||
nblock = 0;
|
||||
GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);
|
||||
|
||||
while (True) {
|
||||
|
||||
if (nextSym == EOB) break;
|
||||
|
||||
if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {
|
||||
|
||||
es = -1;
|
||||
N = 1;
|
||||
do {
|
||||
if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
|
||||
if (nextSym == BZ_RUNB) es = es + (1+1) * N;
|
||||
N = N * 2;
|
||||
GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);
|
||||
}
|
||||
while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);
|
||||
|
||||
es++;
|
||||
uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
|
||||
s->unzftab[uc] += es;
|
||||
|
||||
if (s->smallDecompress)
|
||||
while (es > 0) {
|
||||
if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
|
||||
s->ll16[nblock] = (UInt16)uc;
|
||||
nblock++;
|
||||
es--;
|
||||
}
|
||||
else
|
||||
while (es > 0) {
|
||||
if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
|
||||
s->tt[nblock] = (UInt32)uc;
|
||||
nblock++;
|
||||
es--;
|
||||
};
|
||||
|
||||
continue;
|
||||
|
||||
} else {
|
||||
|
||||
if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
|
||||
|
||||
/*-- uc = MTF ( nextSym-1 ) --*/
|
||||
{
|
||||
Int32 ii, jj, kk, pp, lno, off;
|
||||
UInt32 nn;
|
||||
nn = (UInt32)(nextSym - 1);
|
||||
|
||||
if (nn < MTFL_SIZE) {
|
||||
/* avoid general-case expense */
|
||||
pp = s->mtfbase[0];
|
||||
uc = s->mtfa[pp+nn];
|
||||
while (nn > 3) {
|
||||
Int32 z = pp+nn;
|
||||
s->mtfa[(z) ] = s->mtfa[(z)-1];
|
||||
s->mtfa[(z)-1] = s->mtfa[(z)-2];
|
||||
s->mtfa[(z)-2] = s->mtfa[(z)-3];
|
||||
s->mtfa[(z)-3] = s->mtfa[(z)-4];
|
||||
nn -= 4;
|
||||
}
|
||||
while (nn > 0) {
|
||||
s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--;
|
||||
};
|
||||
s->mtfa[pp] = uc;
|
||||
} else {
|
||||
/* general case */
|
||||
lno = nn / MTFL_SIZE;
|
||||
off = nn % MTFL_SIZE;
|
||||
pp = s->mtfbase[lno] + off;
|
||||
uc = s->mtfa[pp];
|
||||
while (pp > s->mtfbase[lno]) {
|
||||
s->mtfa[pp] = s->mtfa[pp-1]; pp--;
|
||||
};
|
||||
s->mtfbase[lno]++;
|
||||
while (lno > 0) {
|
||||
s->mtfbase[lno]--;
|
||||
s->mtfa[s->mtfbase[lno]]
|
||||
= s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
|
||||
lno--;
|
||||
}
|
||||
s->mtfbase[0]--;
|
||||
s->mtfa[s->mtfbase[0]] = uc;
|
||||
if (s->mtfbase[0] == 0) {
|
||||
kk = MTFA_SIZE-1;
|
||||
for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
|
||||
for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
|
||||
s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
|
||||
kk--;
|
||||
}
|
||||
s->mtfbase[ii] = kk + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*-- end uc = MTF ( nextSym-1 ) --*/
|
||||
|
||||
s->unzftab[s->seqToUnseq[uc]]++;
|
||||
if (s->smallDecompress)
|
||||
s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
|
||||
s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]);
|
||||
nblock++;
|
||||
|
||||
GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Now we know what nblock is, we can do a better sanity
|
||||
check on s->origPtr.
|
||||
*/
|
||||
if (s->origPtr < 0 || s->origPtr >= nblock)
|
||||
RETURN(BZ_DATA_ERROR);
|
||||
|
||||
s->state_out_len = 0;
|
||||
s->state_out_ch = 0;
|
||||
BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
|
||||
s->state = BZ_X_OUTPUT;
|
||||
if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
|
||||
|
||||
/*-- Set up cftab to facilitate generation of T^(-1) --*/
|
||||
s->cftab[0] = 0;
|
||||
for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
|
||||
for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
|
||||
|
||||
if (s->smallDecompress) {
|
||||
|
||||
/*-- Make a copy of cftab, used in generation of T --*/
|
||||
for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
|
||||
|
||||
/*-- compute the T vector --*/
|
||||
for (i = 0; i < nblock; i++) {
|
||||
uc = (UChar)(s->ll16[i]);
|
||||
SET_LL(i, s->cftabCopy[uc]);
|
||||
s->cftabCopy[uc]++;
|
||||
}
|
||||
|
||||
/*-- Compute T^(-1) by pointer reversal on T --*/
|
||||
i = s->origPtr;
|
||||
j = GET_LL(i);
|
||||
do {
|
||||
Int32 tmp = GET_LL(j);
|
||||
SET_LL(j, i);
|
||||
i = j;
|
||||
j = tmp;
|
||||
}
|
||||
while (i != s->origPtr);
|
||||
|
||||
s->tPos = s->origPtr;
|
||||
s->nblock_used = 0;
|
||||
if (s->blockRandomised) {
|
||||
BZ_RAND_INIT_MASK;
|
||||
BZ_GET_SMALL(s->k0); s->nblock_used++;
|
||||
BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
|
||||
} else {
|
||||
BZ_GET_SMALL(s->k0); s->nblock_used++;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
/*-- compute the T^(-1) vector --*/
|
||||
for (i = 0; i < nblock; i++) {
|
||||
uc = (UChar)(s->tt[i] & 0xff);
|
||||
s->tt[s->cftab[uc]] |= (i << 8);
|
||||
s->cftab[uc]++;
|
||||
}
|
||||
|
||||
s->tPos = s->tt[s->origPtr] >> 8;
|
||||
s->nblock_used = 0;
|
||||
if (s->blockRandomised) {
|
||||
BZ_RAND_INIT_MASK;
|
||||
BZ_GET_FAST(s->k0); s->nblock_used++;
|
||||
BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
|
||||
} else {
|
||||
BZ_GET_FAST(s->k0); s->nblock_used++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
RETURN(BZ_OK);
|
||||
|
||||
|
||||
|
||||
endhdr_2:
|
||||
|
||||
GET_UCHAR(BZ_X_ENDHDR_2, uc);
|
||||
if (uc != 0x72) RETURN(BZ_DATA_ERROR);
|
||||
GET_UCHAR(BZ_X_ENDHDR_3, uc);
|
||||
if (uc != 0x45) RETURN(BZ_DATA_ERROR);
|
||||
GET_UCHAR(BZ_X_ENDHDR_4, uc);
|
||||
if (uc != 0x38) RETURN(BZ_DATA_ERROR);
|
||||
GET_UCHAR(BZ_X_ENDHDR_5, uc);
|
||||
if (uc != 0x50) RETURN(BZ_DATA_ERROR);
|
||||
GET_UCHAR(BZ_X_ENDHDR_6, uc);
|
||||
if (uc != 0x90) RETURN(BZ_DATA_ERROR);
|
||||
|
||||
s->storedCombinedCRC = 0;
|
||||
GET_UCHAR(BZ_X_CCRC_1, uc);
|
||||
s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
|
||||
GET_UCHAR(BZ_X_CCRC_2, uc);
|
||||
s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
|
||||
GET_UCHAR(BZ_X_CCRC_3, uc);
|
||||
s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
|
||||
GET_UCHAR(BZ_X_CCRC_4, uc);
|
||||
s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
|
||||
|
||||
s->state = BZ_X_IDLE;
|
||||
RETURN(BZ_STREAM_END);
|
||||
|
||||
default: AssertH ( False, 4001 );
|
||||
}
|
||||
|
||||
AssertH ( False, 4002 );
|
||||
|
||||
save_state_and_return:
|
||||
|
||||
s->save_i = i;
|
||||
s->save_j = j;
|
||||
s->save_t = t;
|
||||
s->save_alphaSize = alphaSize;
|
||||
s->save_nGroups = nGroups;
|
||||
s->save_nSelectors = nSelectors;
|
||||
s->save_EOB = EOB;
|
||||
s->save_groupNo = groupNo;
|
||||
s->save_groupPos = groupPos;
|
||||
s->save_nextSym = nextSym;
|
||||
s->save_nblockMAX = nblockMAX;
|
||||
s->save_nblock = nblock;
|
||||
s->save_es = es;
|
||||
s->save_N = N;
|
||||
s->save_curr = curr;
|
||||
s->save_zt = zt;
|
||||
s->save_zn = zn;
|
||||
s->save_zvec = zvec;
|
||||
s->save_zj = zj;
|
||||
s->save_gSel = gSel;
|
||||
s->save_gMinlen = gMinlen;
|
||||
s->save_gLimit = gLimit;
|
||||
s->save_gBase = gBase;
|
||||
s->save_gPerm = gPerm;
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- end decompress.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
176
contrib/bzip2/dlltest.c
Normal file
176
contrib/bzip2/dlltest.c
Normal file
@ -0,0 +1,176 @@
|
||||
/*
|
||||
minibz2
|
||||
libbz2.dll test program.
|
||||
by Yoshioka Tsuneo(QWF00133@nifty.ne.jp/tsuneo-y@is.aist-nara.ac.jp)
|
||||
This file is Public Domain.
|
||||
welcome any email to me.
|
||||
|
||||
usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]
|
||||
*/
|
||||
|
||||
#define BZ_IMPORT
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "bzlib.h"
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#define BZ2_LIBNAME "libbz2-1.0.0.DLL"
|
||||
|
||||
#include <windows.h>
|
||||
static int BZ2DLLLoaded = 0;
|
||||
static HINSTANCE BZ2DLLhLib;
|
||||
int BZ2DLLLoadLibrary(void)
|
||||
{
|
||||
HINSTANCE hLib;
|
||||
|
||||
if(BZ2DLLLoaded==1){return 0;}
|
||||
hLib=LoadLibrary(BZ2_LIBNAME);
|
||||
if(hLib == NULL){
|
||||
fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME);
|
||||
return -1;
|
||||
}
|
||||
BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion");
|
||||
BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen");
|
||||
BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen");
|
||||
BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread");
|
||||
BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite");
|
||||
BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush");
|
||||
BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose");
|
||||
BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror");
|
||||
|
||||
if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen
|
||||
|| !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush
|
||||
|| !BZ2_bzclose || !BZ2_bzerror) {
|
||||
fprintf(stderr,"GetProcAddress failed.\n");
|
||||
return -1;
|
||||
}
|
||||
BZ2DLLLoaded=1;
|
||||
BZ2DLLhLib=hLib;
|
||||
return 0;
|
||||
|
||||
}
|
||||
int BZ2DLLFreeLibrary(void)
|
||||
{
|
||||
if(BZ2DLLLoaded==0){return 0;}
|
||||
FreeLibrary(BZ2DLLhLib);
|
||||
BZ2DLLLoaded=0;
|
||||
}
|
||||
#endif /* WIN32 */
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]");
|
||||
}
|
||||
|
||||
int main(int argc,char *argv[])
|
||||
{
|
||||
int decompress = 0;
|
||||
int level = 9;
|
||||
char *fn_r = NULL;
|
||||
char *fn_w = NULL;
|
||||
|
||||
#ifdef _WIN32
|
||||
if(BZ2DLLLoadLibrary()<0){
|
||||
fprintf(stderr,"Loading of %s failed. Giving up.\n", BZ2_LIBNAME);
|
||||
exit(1);
|
||||
}
|
||||
printf("Loading of %s succeeded. Library version is %s.\n",
|
||||
BZ2_LIBNAME, BZ2_bzlibVersion() );
|
||||
#endif
|
||||
while(++argv,--argc){
|
||||
if(**argv =='-' || **argv=='/'){
|
||||
char *p;
|
||||
|
||||
for(p=*argv+1;*p;p++){
|
||||
if(*p=='d'){
|
||||
decompress = 1;
|
||||
}else if('1'<=*p && *p<='9'){
|
||||
level = *p - '0';
|
||||
}else{
|
||||
usage();
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(argc>=1){
|
||||
fn_r = *argv;
|
||||
argc--;argv++;
|
||||
}else{
|
||||
fn_r = NULL;
|
||||
}
|
||||
if(argc>=1){
|
||||
fn_w = *argv;
|
||||
argc--;argv++;
|
||||
}else{
|
||||
fn_w = NULL;
|
||||
}
|
||||
{
|
||||
int len;
|
||||
char buff[0x1000];
|
||||
char mode[10];
|
||||
|
||||
if(decompress){
|
||||
BZFILE *BZ2fp_r = NULL;
|
||||
FILE *fp_w = NULL;
|
||||
|
||||
if(fn_w){
|
||||
if((fp_w = fopen(fn_w,"wb"))==NULL){
|
||||
printf("can't open [%s]\n",fn_w);
|
||||
perror("reason:");
|
||||
exit(1);
|
||||
}
|
||||
}else{
|
||||
fp_w = stdout;
|
||||
}
|
||||
if((BZ2fp_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)
|
||||
|| (BZ2fp_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){
|
||||
printf("can't bz2openstream\n");
|
||||
exit(1);
|
||||
}
|
||||
while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){
|
||||
fwrite(buff,1,len,fp_w);
|
||||
}
|
||||
BZ2_bzclose(BZ2fp_r);
|
||||
if(fp_w != stdout) fclose(fp_w);
|
||||
}else{
|
||||
BZFILE *BZ2fp_w = NULL;
|
||||
FILE *fp_r = NULL;
|
||||
|
||||
if(fn_r){
|
||||
if((fp_r = fopen(fn_r,"rb"))==NULL){
|
||||
printf("can't open [%s]\n",fn_r);
|
||||
perror("reason:");
|
||||
exit(1);
|
||||
}
|
||||
}else{
|
||||
fp_r = stdin;
|
||||
}
|
||||
mode[0]='w';
|
||||
mode[1] = '0' + level;
|
||||
mode[2] = '\0';
|
||||
|
||||
if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)
|
||||
|| (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){
|
||||
printf("can't bz2openstream\n");
|
||||
exit(1);
|
||||
}
|
||||
while((len=fread(buff,1,0x1000,fp_r))>0){
|
||||
BZ2_bzwrite(BZ2fp_w,buff,len);
|
||||
}
|
||||
BZ2_bzclose(BZ2fp_w);
|
||||
if(fp_r!=stdin)fclose(fp_r);
|
||||
}
|
||||
}
|
||||
#ifdef _WIN32
|
||||
BZ2DLLFreeLibrary();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
228
contrib/bzip2/huffman.c
Normal file
228
contrib/bzip2/huffman.c
Normal file
@ -0,0 +1,228 @@
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- Huffman coding low-level stuff ---*/
|
||||
/*--- huffman.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
||||
|
||||
/*--
|
||||
This file is a part of bzip2 and/or libbzip2, a program and
|
||||
library for lossless, block-sorting data compression.
|
||||
|
||||
Copyright (C) 1996-2000 Julian R Seward. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, Cambridge, UK.
|
||||
jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0 of 21 March 2000
|
||||
|
||||
This program is based on (at least) the work of:
|
||||
Mike Burrows
|
||||
David Wheeler
|
||||
Peter Fenwick
|
||||
Alistair Moffat
|
||||
Radford Neal
|
||||
Ian H. Witten
|
||||
Robert Sedgewick
|
||||
Jon L. Bentley
|
||||
|
||||
For more information on these sources, see the manual.
|
||||
--*/
|
||||
|
||||
|
||||
#include "bzlib_private.h"
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
#define WEIGHTOF(zz0) ((zz0) & 0xffffff00)
|
||||
#define DEPTHOF(zz1) ((zz1) & 0x000000ff)
|
||||
#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))
|
||||
|
||||
#define ADDWEIGHTS(zw1,zw2) \
|
||||
(WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \
|
||||
(1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))
|
||||
|
||||
#define UPHEAP(z) \
|
||||
{ \
|
||||
Int32 zz, tmp; \
|
||||
zz = z; tmp = heap[zz]; \
|
||||
while (weight[tmp] < weight[heap[zz >> 1]]) { \
|
||||
heap[zz] = heap[zz >> 1]; \
|
||||
zz >>= 1; \
|
||||
} \
|
||||
heap[zz] = tmp; \
|
||||
}
|
||||
|
||||
#define DOWNHEAP(z) \
|
||||
{ \
|
||||
Int32 zz, yy, tmp; \
|
||||
zz = z; tmp = heap[zz]; \
|
||||
while (True) { \
|
||||
yy = zz << 1; \
|
||||
if (yy > nHeap) break; \
|
||||
if (yy < nHeap && \
|
||||
weight[heap[yy+1]] < weight[heap[yy]]) \
|
||||
yy++; \
|
||||
if (weight[tmp] < weight[heap[yy]]) break; \
|
||||
heap[zz] = heap[yy]; \
|
||||
zz = yy; \
|
||||
} \
|
||||
heap[zz] = tmp; \
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
void BZ2_hbMakeCodeLengths ( UChar *len,
|
||||
Int32 *freq,
|
||||
Int32 alphaSize,
|
||||
Int32 maxLen )
|
||||
{
|
||||
/*--
|
||||
Nodes and heap entries run from 1. Entry 0
|
||||
for both the heap and nodes is a sentinel.
|
||||
--*/
|
||||
Int32 nNodes, nHeap, n1, n2, i, j, k;
|
||||
Bool tooLong;
|
||||
|
||||
Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ];
|
||||
Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];
|
||||
Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ];
|
||||
|
||||
for (i = 0; i < alphaSize; i++)
|
||||
weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
|
||||
|
||||
while (True) {
|
||||
|
||||
nNodes = alphaSize;
|
||||
nHeap = 0;
|
||||
|
||||
heap[0] = 0;
|
||||
weight[0] = 0;
|
||||
parent[0] = -2;
|
||||
|
||||
for (i = 1; i <= alphaSize; i++) {
|
||||
parent[i] = -1;
|
||||
nHeap++;
|
||||
heap[nHeap] = i;
|
||||
UPHEAP(nHeap);
|
||||
}
|
||||
|
||||
AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );
|
||||
|
||||
while (nHeap > 1) {
|
||||
n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
|
||||
n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
|
||||
nNodes++;
|
||||
parent[n1] = parent[n2] = nNodes;
|
||||
weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);
|
||||
parent[nNodes] = -1;
|
||||
nHeap++;
|
||||
heap[nHeap] = nNodes;
|
||||
UPHEAP(nHeap);
|
||||
}
|
||||
|
||||
AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );
|
||||
|
||||
tooLong = False;
|
||||
for (i = 1; i <= alphaSize; i++) {
|
||||
j = 0;
|
||||
k = i;
|
||||
while (parent[k] >= 0) { k = parent[k]; j++; }
|
||||
len[i-1] = j;
|
||||
if (j > maxLen) tooLong = True;
|
||||
}
|
||||
|
||||
if (! tooLong) break;
|
||||
|
||||
for (i = 1; i < alphaSize; i++) {
|
||||
j = weight[i] >> 8;
|
||||
j = 1 + (j / 2);
|
||||
weight[i] = j << 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
void BZ2_hbAssignCodes ( Int32 *code,
|
||||
UChar *length,
|
||||
Int32 minLen,
|
||||
Int32 maxLen,
|
||||
Int32 alphaSize )
|
||||
{
|
||||
Int32 n, vec, i;
|
||||
|
||||
vec = 0;
|
||||
for (n = minLen; n <= maxLen; n++) {
|
||||
for (i = 0; i < alphaSize; i++)
|
||||
if (length[i] == n) { code[i] = vec; vec++; };
|
||||
vec <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
void BZ2_hbCreateDecodeTables ( Int32 *limit,
|
||||
Int32 *base,
|
||||
Int32 *perm,
|
||||
UChar *length,
|
||||
Int32 minLen,
|
||||
Int32 maxLen,
|
||||
Int32 alphaSize )
|
||||
{
|
||||
Int32 pp, i, j, vec;
|
||||
|
||||
pp = 0;
|
||||
for (i = minLen; i <= maxLen; i++)
|
||||
for (j = 0; j < alphaSize; j++)
|
||||
if (length[j] == i) { perm[pp] = j; pp++; };
|
||||
|
||||
for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;
|
||||
for (i = 0; i < alphaSize; i++) base[length[i]+1]++;
|
||||
|
||||
for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];
|
||||
|
||||
for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;
|
||||
vec = 0;
|
||||
|
||||
for (i = minLen; i <= maxLen; i++) {
|
||||
vec += (base[i+1] - base[i]);
|
||||
limit[i] = vec-1;
|
||||
vec <<= 1;
|
||||
}
|
||||
for (i = minLen + 1; i <= maxLen; i++)
|
||||
base[i] = ((limit[i-1] + 1) << 1) - base[i];
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- end huffman.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
27
contrib/bzip2/libbz2.def
Normal file
27
contrib/bzip2/libbz2.def
Normal file
@ -0,0 +1,27 @@
|
||||
LIBRARY LIBBZ2
|
||||
DESCRIPTION "libbzip2: library for data compression"
|
||||
EXPORTS
|
||||
BZ2_bzCompressInit
|
||||
BZ2_bzCompress
|
||||
BZ2_bzCompressEnd
|
||||
BZ2_bzDecompressInit
|
||||
BZ2_bzDecompress
|
||||
BZ2_bzDecompressEnd
|
||||
BZ2_bzReadOpen
|
||||
BZ2_bzReadClose
|
||||
BZ2_bzReadGetUnused
|
||||
BZ2_bzRead
|
||||
BZ2_bzWriteOpen
|
||||
BZ2_bzWrite
|
||||
BZ2_bzWriteClose
|
||||
BZ2_bzWriteClose64
|
||||
BZ2_bzBuffToBuffCompress
|
||||
BZ2_bzBuffToBuffDecompress
|
||||
BZ2_bzlibVersion
|
||||
BZ2_bzopen
|
||||
BZ2_bzdopen
|
||||
BZ2_bzread
|
||||
BZ2_bzwrite
|
||||
BZ2_bzflush
|
||||
BZ2_bzclose
|
||||
BZ2_bzerror
|
63
contrib/bzip2/makefile.msc
Normal file
63
contrib/bzip2/makefile.msc
Normal file
@ -0,0 +1,63 @@
|
||||
# Makefile for Microsoft Visual C++ 6.0
|
||||
# usage: nmake -f makefile.msc
|
||||
# K.M. Syring (syring@gsf.de)
|
||||
# Fixed up by JRS for bzip2-0.9.5d release.
|
||||
|
||||
CC=cl
|
||||
CFLAGS= -DWIN32 -MD -Ox -D_FILE_OFFSET_BITS=64
|
||||
|
||||
OBJS= blocksort.obj \
|
||||
huffman.obj \
|
||||
crctable.obj \
|
||||
randtable.obj \
|
||||
compress.obj \
|
||||
decompress.obj \
|
||||
bzlib.obj
|
||||
|
||||
all: lib bzip2 test
|
||||
|
||||
bzip2: lib
|
||||
$(CC) $(CFLAGS) -o bzip2 bzip2.c libbz2.lib setargv.obj
|
||||
$(CC) $(CFLAGS) -o bzip2recover bzip2recover.c
|
||||
|
||||
lib: $(OBJS)
|
||||
lib /out:libbz2.lib $(OBJS)
|
||||
|
||||
test: bzip2
|
||||
type words1
|
||||
.\\bzip2 -1 < sample1.ref > sample1.rb2
|
||||
.\\bzip2 -2 < sample2.ref > sample2.rb2
|
||||
.\\bzip2 -3 < sample3.ref > sample3.rb2
|
||||
.\\bzip2 -d < sample1.bz2 > sample1.tst
|
||||
.\\bzip2 -d < sample2.bz2 > sample2.tst
|
||||
.\\bzip2 -ds < sample3.bz2 > sample3.tst
|
||||
@echo All six of the fc's should find no differences.
|
||||
@echo If fc finds an error on sample3.bz2, this could be
|
||||
@echo because WinZip's 'TAR file smart CR/LF conversion'
|
||||
@echo is too clever for its own good. Disable this option.
|
||||
@echo The correct size for sample3.ref is 120,244. If it
|
||||
@echo is 150,251, WinZip has messed it up.
|
||||
fc sample1.bz2 sample1.rb2
|
||||
fc sample2.bz2 sample2.rb2
|
||||
fc sample3.bz2 sample3.rb2
|
||||
fc sample1.tst sample1.ref
|
||||
fc sample2.tst sample2.ref
|
||||
fc sample3.tst sample3.ref
|
||||
|
||||
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del libbz2.lib
|
||||
del bzip2.exe
|
||||
del bzip2recover.exe
|
||||
del sample1.rb2
|
||||
del sample2.rb2
|
||||
del sample3.rb2
|
||||
del sample1.tst
|
||||
del sample2.tst
|
||||
del sample3.tst
|
||||
|
||||
.c.obj:
|
||||
$(CC) $(CFLAGS) -c $*.c -o $*.obj
|
||||
|
2215
contrib/bzip2/manual.texi
Normal file
2215
contrib/bzip2/manual.texi
Normal file
File diff suppressed because it is too large
Load Diff
124
contrib/bzip2/randtable.c
Normal file
124
contrib/bzip2/randtable.c
Normal file
@ -0,0 +1,124 @@
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- Table for randomising repetitive blocks ---*/
|
||||
/*--- randtable.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
||||
|
||||
/*--
|
||||
This file is a part of bzip2 and/or libbzip2, a program and
|
||||
library for lossless, block-sorting data compression.
|
||||
|
||||
Copyright (C) 1996-2000 Julian R Seward. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. The origin of this software must not be misrepresented; you must
|
||||
not claim that you wrote the original software. If you use this
|
||||
software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated but is not required.
|
||||
|
||||
3. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
4. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Julian Seward, Cambridge, UK.
|
||||
jseward@acm.org
|
||||
bzip2/libbzip2 version 1.0 of 21 March 2000
|
||||
|
||||
This program is based on (at least) the work of:
|
||||
Mike Burrows
|
||||
David Wheeler
|
||||
Peter Fenwick
|
||||
Alistair Moffat
|
||||
Radford Neal
|
||||
Ian H. Witten
|
||||
Robert Sedgewick
|
||||
Jon L. Bentley
|
||||
|
||||
For more information on these sources, see the manual.
|
||||
--*/
|
||||
|
||||
|
||||
#include "bzlib_private.h"
|
||||
|
||||
|
||||
/*---------------------------------------------*/
|
||||
Int32 BZ2_rNums[512] = {
|
||||
619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
|
||||
985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
|
||||
733, 859, 335, 708, 621, 574, 73, 654, 730, 472,
|
||||
419, 436, 278, 496, 867, 210, 399, 680, 480, 51,
|
||||
878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
|
||||
862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
|
||||
150, 238, 59, 379, 684, 877, 625, 169, 643, 105,
|
||||
170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
|
||||
73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
|
||||
909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
|
||||
641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
|
||||
161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
|
||||
382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
|
||||
98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
|
||||
227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
|
||||
469, 68, 770, 919, 190, 373, 294, 822, 808, 206,
|
||||
184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
|
||||
715, 67, 618, 276, 204, 918, 873, 777, 604, 560,
|
||||
951, 160, 578, 722, 79, 804, 96, 409, 713, 940,
|
||||
652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
|
||||
645, 863, 803, 350, 139, 93, 354, 99, 820, 908,
|
||||
609, 772, 154, 274, 580, 184, 79, 626, 630, 742,
|
||||
653, 282, 762, 623, 680, 81, 927, 626, 789, 125,
|
||||
411, 521, 938, 300, 821, 78, 343, 175, 128, 250,
|
||||
170, 774, 972, 275, 999, 639, 495, 78, 352, 126,
|
||||
857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
|
||||
669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
|
||||
944, 375, 748, 52, 600, 747, 642, 182, 862, 81,
|
||||
344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
|
||||
897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
|
||||
433, 837, 553, 268, 926, 240, 102, 654, 459, 51,
|
||||
686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
|
||||
946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
|
||||
978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
|
||||
680, 879, 194, 572, 640, 724, 926, 56, 204, 700,
|
||||
707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
|
||||
297, 59, 87, 824, 713, 663, 412, 693, 342, 606,
|
||||
134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
|
||||
343, 97, 430, 751, 497, 314, 983, 374, 822, 928,
|
||||
140, 206, 73, 263, 980, 736, 876, 478, 430, 305,
|
||||
170, 514, 364, 692, 829, 82, 855, 953, 676, 246,
|
||||
369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
|
||||
804, 378, 215, 828, 592, 281, 565, 555, 710, 82,
|
||||
896, 831, 547, 261, 524, 462, 293, 465, 502, 56,
|
||||
661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
|
||||
768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
|
||||
61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
|
||||
372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
|
||||
780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
|
||||
920, 176, 193, 713, 857, 265, 203, 50, 668, 108,
|
||||
645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
|
||||
936, 638
|
||||
};
|
||||
|
||||
|
||||
/*-------------------------------------------------------------*/
|
||||
/*--- end randtable.c ---*/
|
||||
/*-------------------------------------------------------------*/
|
722
contrib/bzip2/sample1.bz2.uu
Normal file
722
contrib/bzip2/sample1.bz2.uu
Normal file
@ -0,0 +1,722 @@
|
||||
begin 644 sample1.bz2
|
||||
M0EIH,3%!62936<SQM:4`OJ;_____________________________________
|
||||
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
|
||||
M+6*VHA4H*T?UR5$9@Q1JREI2L6L+:-**1+18I4JH*%L6I4%B4=X8F);0J
|
||||
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
|
||||
MB**HZ:]6>6ZB#-VQ446=UO.:>=[NKB,RS5UCJX[5QDRQ=G)GK,II2P(!L8
|
||||
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
|
||||
M\M72-A-VR;)O#5?VE"PMG#,U?0RUS<)7.O+E#^4F8O(.Z!)A`C,:8P45H
|
||||
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
|
||||
MZ&P]CCHQ;TO=6..XD6)/><'+]H42J--^T<+WK(+<[\68VHA@G3_"O&MYC
|
||||
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
|
||||
F"+`&FNP%5J%=[MCO,A9%D0D'L8&%51TCE#9?_B[DBG"A(9GC:TH*
|
||||
`
|
||||
end
|
848
contrib/bzip2/sample1.ref.gz.uu
Normal file
848
contrib/bzip2/sample1.ref.gz.uu
Normal file
@ -0,0 +1,848 @@
|
||||
begin 644 sample1.ref.gz
|
||||
M'XL("/:]F#4"`W-A;7!L93$N<F5F`)1]#9A;99EHFJ24TD'QAP4IW(5RE58R
|
||||
M<:9%Z!1I+46F!5I*?T2E=3V3G&0./<D).<G,1/1QE775RTZ>A,_$ST0=\,%=
|
||||
M^1&7:'60%:P"]4'=6Q4!E2M>4'%U5UVKURO*Y;X_W_>=<Y(4V3X/M).<\WWO
|
||||
M]W[O_]_\(;[DAIN^<OJ%,?B3^/G*,_?8;SG3JU9*U<J9XQ,3KT^/79`>&]\P
|
||||
M_OKQ"VZ$)Y;$7L2?Y^'/S?'\-_?-W_S<9]?=>G-\+?WS)T]TYIO[=I2.OG3)
|
||||
M/__[Y;&7Y'+TWW&9PM3<^'E?NMBNM>J_]HHBVUUZQ3=VEKU*X_"L5Q&U4F/]
|
||||
M!VVYK5!J?.<AURX(N]BX8:$BK$9G8T4X7M'?4+_UI&]^:[Z9>V[C3EP"GZL5
|
||||
MO')IVFG\6R:CEFO&GCKK6CM#K\C-Q<;"3RRWYK?6?]`1?OV6^9MB'WY3.N>5
|
||||
MV_#TI&OY>:]3__6LV&KY!Z3MNO6%53]\-3STA3/6'3WIM-^N>G/L!#@I_L?P
|
||||
MC]U[6=5UK&(S\;T]N^W9QET35CE;OVTD%H.7/O727QW]JR=_\8:Y\$N5ROC8
|
||||
M(=^>A>>N?6/&3Q>L8MK*I*L'Z@NO_+T#;[7GWGGTU=[G;SP<6PYOX'_)3*$\
|
||||
M<>02NV25*ZW[)@@57[RUTDZ<O,?+B2U>H51M/+FRTOC2K^S&\A^5Q>Z,8Q<S
|
||||
M=OW6%01&:^FKW^PT?OM8I@)/>>7&.7..U85W]Q:=&5B.WFD<]V&_<>9/',"[
|
||||
M]')RNU7,B&EA-S8?]N$KLS0A[/V_?-N5<X"R+`*PR[.R*8'/PU)#WL!GMH^O
|
||||
M$Q,[KTB)O9>GZPM_73@P/S_?W.H_<_0UE9$/;3#'7(H8G?CVYN;STQ^::ORW
|
||||
MR_W&LILJ92M32=?KS;F#*XY<7'7<K%.$4^2[R>RS]@JX5MC5F1&VM,14X[0=
|
||||
MM#6^(AU"40N@Z``4I;)=@8?HF&UXM6Q?5W7*!*S(6&4[5W6!L![X5F443HB@
|
||||
M$?RT1`,V\(KMY*XG"'VPS>;#7J7S\3W3HB*G.X`_KUP35E%FX5I:`)I3E#;C
|
||||
M%!!=%'E\U0'<^@A?E?9,BSW3TA:5QL?Q;WP?[M&2D1,H0/@<&IMX#C@Q@8H$
|
||||
MW4[<]3U:6\PB)*XKLHW'/V#/`.EZL@1?X'9P/U-$('K#8P$*BQ$1T!IB6EJ^
|
||||
MR'7.!'YQ[:*8DK9&SK13!""RW?AU[_<]H,;9:49>2@(:JITG5Q:!.BJB*HN-
|
||||
MKY]"WR#\^+@]HVA7YO'6BI(@XK>/<87AHPMS<$FG5O"4Z$K,C0$F'("YUD[<
|
||||
M]J@E@(UK@K[,R.FBU_CIW:Z7KPF`D'&5<:TR[^\`VH1K$7U5K;PM,L!9CJN^
|
||||
M](IX:Y%M+<8P4GFR\7)_&D[KP>:SOD$T_>T4#S#1POGP^>]MA(^`7/1#!`;Q
|
||||
M#>`^7V1:<D#N`:AV02J$&3"(5A0((^464+2HC`(WXBI(ZZEVXNE_)93@`EH@
|
||||
M`ON+$DK#&^HH#9FJ82N\(9"'C?0*8`_""HH^)J84\$8)R1(!P6UICPB+,`,R
|
||||
M2R9Z[T4!<-H.*ROY%I&P2/`4E6"`ZT4B$5EU\80\&W:UI5\%X8,D@)M)^`@^
|
||||
M*0DZ!]`2;R'A6N6!HB=FBPJ(_GW@7'9+[31:MEVKHZA/9-OQV^\!PBKZL'8!
|
||||
MCRV)4D"1I,4EFF4TND6FZA:<"/TB)P$<`*-?E9F,.9#&!\B0=G+G=QD:RX5'
|
||||
M_0X`A^SJN@''PB.PR$Q#"5Y)MPY7,98>GT`<$V(0_X+5D0R4$8EZQZ7W4FI7
|
||||
MBUDQ\:5/*8Q*OV8$<$$";_F2R`Z8K>JWX)KQ'))DF337CP)4EIGT;50`N&6#
|
||||
MB$`"U>3+5L%/&8F4<:M*#*-TMXI\Z677(?KCLTFC4IABG4KCJ1R1F9M+B?%U
|
||||
M8V-CPG7HOD@*NQXM"/IAU;U'YINI6.SHZJ\^NN/F&*A2^H_U[=KOCC=/_-O8
|
||||
MMF*CG:N4O<8[8MG6S;&J8/U>7SAU+LXO+[O\/]]1,WH75$MY?*P'B%U\VFXG
|
||||
MS[ZA9(%V.:,BLJWO[;$S%LAN_)1$GM\8/PS8@GO.PK$;7ZM;C:_$@/,:__E0
|
||||
M!MFR[$D@%B*4NP\C9<*5M?8B(Y<:9\_;C1/N*!.%P8N@A/'LKO7.6OT?":Y<
|
||||
MM?5$N0C\M_@TP(O/N-W$7760.H)D3F/R#."0HE=I+3Z-S/!TW:W190CD1P!/
|
||||
MHF"`3]D@`@`:3Y1!IR\[P\>[%J@*LPTX$_S#]11$DV=D@8JLFB_I:04*05CJ
|
||||
M)O[7'_PJ[`;Z7J+P>Z)L`)'V2]"2:.$NK;T`"%QE!>#W)"//@X<R\.H!:97A
|
||||
M=;CB@WO1TJJ6Z?6TW(%@($((0P`1?=XX_3HXH_JHIM9RP-9BN,I5@*'8CC_X
|
||||
M("`%Y%H'3H-K("8)YGS10?Q5LX!RW_4`@%G>I0OO\+)64:\/&SIE0IJZ&[I-
|
||||
M039#QJ.M"(L`.7Z+)E;CQS$EI5*`-D8NTD1*`>B`Y?7(52Z>WCL`E.L<0*IZ
|
||||
M82H8H!O<1(#E`4:$Y2`C`-Z%MR(M+FT^_]K;JV6U&AT<.`XP>OIU%H&!*(2/
|
||||
M%#"EUN!NW<2;/T]$4$)-O_AT%BY.CL!Y>)LP+<BR3>1D91`=HB1JZIDI,`2K
|
||||
M)20=^)%PAB@:=8JC^GE&D0(#2;R=^-CG[9GF\]<=MMPJO=(A*@?3H2;HELN-
|
||||
MU]Y!?`3&6.1!U&LI,0L'+@K<U&L!C<`[9\\[Q`-V&A??W$Q\[),96D3Q(XA9
|
||||
MVQWD1:=S]CS@2/H*.OH0$`&8V;N7D,BHXI=:L!"*0F3&FD&QG)UV!%+WM,PZ
|
||||
M`(C?^/T>P)`B:/@6S1<?)`_P3:!6E+0@_P2XPI;JF$X6)-O(J;'YYH6Q);NK
|
||||
M@!C4((H94',D=NZHTMY(YGW(`CM-/\K&@0^"BKYFLK&*G2CLB(B,TA4`+!*P
|
||||
M(((HX#F!(-CJ'35"R6W'>V=D`&;$.#UI6$7=(6DF)G"@*=B5K4=<'>$`ZU&O
|
||||
M@*!;3D#D0/HMN%&$GLZ7Q2>9).!'8#BKHZA+&UQ2B4?-<!81,5#USY`J%6-+
|
||||
MURFPQ"'YAJ]6.T^0J2#S^&S9AFU]KUH&]H.[@"7X+F`#H8A*[E:.83,1BZU%
|
||||
MO<?D`SSE2S#OU%W;<U9!X\I!6`C)W<1;?ZON?]BY)=IXB$FP:AP6W19Q'FZ3
|
||||
MMXLB+(V8YY@`X#8D"'>^?Z1-($6'<4\D";B9-G0-+-Q-_L<IEM]2Z*7K!^`[
|
||||
M@'*A60@$#*$4C(,V/*W9I(%BBV"4]!S8GGX).#LM+F91`Z2&(K^#.$$6`!:E
|
||||
M=TAN5B2*+?P1U@-$:@RAZE(H7==-;GU4WQ=MA%?"6R$:+%D")8(Z3EFI<-J4
|
||||
MG+)(J0"NREE?]O.",+S0Q[-X4V@V:FV95O`HI9_XS`<&GA>SJ/`=OCPT+HF6
|
||||
M\#R#MA?:9RG-?K`.?(G<*$B%@'-"[$QG+!I,:.ILQ^\9+YDSV*-#542(W=*(
|
||||
M3Q**B,7SP'#G0P/8`5]I=N3OJBY>"7VA696EH#U7DH9/"X@*%GMX$@4GD"^:
|
||||
M=,3VJ+?;B5W?V,SKP3(@6[QJ?AHNO2SX$"!%P&7%MVAAV*:(PG9`;#44IRC!
|
||||
MI9`O\5&`D?P,>`+]#*WMU"$UKS%(J/B`D"Z:)IL(%?=L(*.DA4X"D!#K`T&T
|
||||
M3E("M1OZ"\CMR!S$GYG*J!-5^.Q6*ID-M.>WF(NR`7DQR2%QU>OU?\!X6#SV
|
||||
MXOZ\]ECQL%VQ6&^8+1A_RC.V8(ML01;8DFFNZF9E%'Z;L<Z""Q_1<E::^P%B
|
||||
M8S[-RBE`82!!V=(ML/0!\PX\X;Q=OQ6#5PA@'JW#O7NGD%@K;&79QJ[2?WOE
|
||||
M&CMT)42N8`(GWHZB7;X0VM/UVT9F6_--*[9D%]VW"T[LFF]7?0L(A&6U&%#0
|
||||
M8,ZL8"[.`<F5O0+ZMW3M%5DC#A/&5E8&@C3&!JE(6FJ&N0,L"1`&-3^-7LXN
|
||||
ME!J(LFY\Q^O,QJ`5'!"M^`4(<S:$RU511$FO[#.^QI8&6L+I"NA;(8+@'R#E
|
||||
M:FC>I20%0I0146)-%7`WJL*L%OH*'J*5R"X-O4LWN=9SBJ6J(/:_4()Q%%#+
|
||||
MOI'**G3AX&DC=>"J^3:$)XUI!%J.S1RRQEDAA6P(24BVX!"C"B)4!6`<_SAV
|
||||
M(-5-S#T^0UISU!J=0209W=Y2NEVM90FE'E08(`)K%AA6YCVT%N"K:[TIDN=P
|
||||
MB6"$(Y>PP::V#_DJ[7AI-$>H41)4.2`I@>8\6XI5(&X7;`X4UX51+S>*.$$N
|
||||
M!U]>R5-%-1U^4T84$QRM@'86L"(X.GEEF6M48/1%R:-V_$T/YD@G9)3IY*?%
|
||||
MU7CIMM(;97:F!%H5:$0904Y6!*#MNBI&;XG$`ZM+BT8QW,8"8O:`RA4\;'<@
|
||||
MQAQ6@\!83-#MI/TL:1QX(T?^6[5?88#=H_T.%-0@C%QORG*%T0\2#078GS[P
|
||||
M5OC&7"#EZ07&!5V'!HG(`VWH*NL#I(%V,O^;V4Y@42!B""76X,U1M)=C=.0A
|
||||
M])D-'-RJK[]6*4XQH.P5(!CK3W[RYK#VB2AU1N2@5M5"QJFHZ.W`!N>`2.HH
|
||||
M'"ES"EQ4=0WD["D0II#""4G=^(]_.52>(Y,P#Q*;S+"9A$(`:,:K@EZ8`G['
|
||||
M0`$H0'@83J^4L_'5)`B7%JZ8DC[Z>3D\E"(LI1X!?1HFHS_*J.R[B<TG5LJ&
|
||||
MI6`#$VY`TQ8=&QW`;<%[]`YQ,=F%UX/<(VJ3(^46^AX525<&7X%BR*!2)HY"
|
||||
MN31EI*712PHBJ['P/*W7T9"=X[=!'^V<O@0C[]JX8*F,=M(U\[OMV8GSZLV5
|
||||
MZY_9#^[6F7O_C1:Z=W,YT[IK`N,3MZ_B^(3E-I-/;+P2G;F12\HSCCW;/&[T
|
||||
MZ[T];/IWDQ._"ZS_K#/C!+3/WF-+>X^HNQOL/XJ0CL`8'-PB7D/!UZH/0R\*
|
||||
MV:1-O6Y\ZR=)2Y<`)LN5.OBP`>/HP_5G"U;L:/UIRW*J#6O,,@L`.4\+\"QD
|
||||
MX%DH`]2'F\]4.9`!`"(/@90)E*$68^@CZ5#*.SY*L7T0RDI>Z,BM)4?FZ#JC
|
||||
MA)N2"@SPA\J@Z<A31HQ%M@832S&2,20T).0SIS2&.DHM$4\`]L'S:\<?>SW!
|
||||
M<D#YO9A_@4<*PCA.@K#<[_NFQ68?G@$4@P-#O$W9'R-X@R.J]\GDT4C)M1/Q
|
||||
M\T>*3J6#>GE:N7^@`T0%O^$W0`^5F2+`*P;`:&^TK%1`(/"B(\B3?!(E@G+1
|
||||
ML(\R^J-Q$_5`P;`M[(Y<,=5!@R?KA/RE*>(>E"1P%6C)N4P3"\]K.RTL"@BQ
|
||||
M<!T1^+0AH*)/<($$FM8IN^T99,,6V4_=Q)'_CB892ADZ&TE[#*`(#%:VE`F-
|
||||
M&PBU?"#E=.R2,$\V$<BS:-@@+?>PH4(1LK*G`#2WK,6&F_<X1(28*K3C4^=D
|
||||
M7'NFHVB)%"]9A9[#@KW@%=EL+!)2P"*I:3+`?*/P:\IVS)B@$RQ"*MX!50W'
|
||||
M[7?/I#5JKH=-@%0W?EN,1"70H>3KF7$LE\2-1G)@BBG]S=%4Y!D0F^9>6DH*
|
||||
MI^4V5,,>V"M9>*LJP.[.XCX8)-GB6AEQ@!EVI[!K?$`%U66>"6*PW-RY9?T%
|
||||
M]>:IR\[<#X!^XN\U9_:A4B<3^(8*\)F*?C$R!'M-08A,+P,81_*A2^+]MEOE
|
||||
MB;7UYNDGORTU+[?2VQ/C]>9?G^+MUP)`Q7R2+[F/TT"D/DCYH/G%FDTJNTN4
|
||||
MHU1KR"HM-S>3+ZG3S62PQ`!#%H+<$[N(,J"F%)&*&I-`A"\I8,]P#%\8+-[S
|
||||
M/XS6.XDG<U)XN!7B;5K:*X)FH^@4F1+*M@]DFP2`D#GX)-D4QFHY5D>!`<0"
|
||||
M4KY1BQAJ8$,=#M5._G&<KRB/TDOE&J(RIJ.!IG`S)3S$%!\5<WOH0:1P'187
|
||||
M(+MFX0[YQH#.!VF[7VO`JNWD%Q_,HMUM*\[1DG4+F"H>71M?_)8M%ZP'0KON
|
||||
MX?TL\?AIH$<V</G#[;5,V<M5^(W+MJ\_'][8<='^M'C3'.&OJ#2)'Y:!W<1O
|
||||
M/HV4H>71Z%^B#3)BV.@3LT6*=Y-@H5O)`]A%YIZM&/L(\<JE6R?6(:^<M5_I
|
||||
M0WA3`;++ZRAI13X[&&N6F';YM5V>]/'%TZ[]S/YT._ZO?\]A*=!'[$-Q1`0S
|
||||
MQ8R$*VRQ7;ZB^:?)TVW`>4VI!*#A?73#VEE!N%;Q#ENWH^USVNV?W:_`(2I!
|
||||
MW6"YOB<P&1HR";):AF\KMI/K'QMJ_[-I#ML?().<GREG!3P`\MG*R.D-PE!V
|
||||
M0!AX%/R82(LI/FHQ`#EH2QCP5&LGS_L_5;I31::"5"UI4`![5@7\P3)FJPJT
|
||||
MGR8S'7<7H:!^)V26D:A&;:_"\&BP"F.R%)2^5\"`H.\PA9A(!K[?3*Q_%QN`
|
||||
M^++ZN`T?%E7PSL6T>0&LC"W*@5.^$CGUH`)9&9-^]O$]2P19O.!\&BC*P2L#
|
||||
M4:N1D%3I)GY0#?2X/B=&N%7Z``-$\JU(R7!<"H:VR,U1#.B1I%UYV)!O$,]!
|
||||
M=2.F2:EAH-J7MN(WX_IE91A?GE%8;#'^\AO##0RG.&"=ITSD7;X^+7>%<3`Z
|
||||
MQ<XDBL2PK8#?M92J!Q^B"$H[A4?-VQS<`@M$ZPZ?G*49G?`)%$9(*&BKLZ44
|
||||
MM&3Q1W'Z68R-@3H`/X5#9"I;R0*=C/\:N5X%$=R$NC[6BYQ/U2RV`W4TQ;19
|
||||
M83`Z=G@R@Q)AY?J?[^\FO_T%+8LX3\!2P?B`.@2E7$T,DON"<00XW,?!H+"[
|
||||
M0**>K`)"\RJ-FUD2.^07-I/O6\_L62Z,!GSF%#NP9QN^I/,JXYI\^PIJACFP
|
||||
MYYE:0ED$520@%!_+/+K1)#Y0QX0`8T[5A!VDX30E^^GVTM.S%]=(@ECE#AJ^
|
||||
M``6F!S$`'?`N02PYKT$0BZ'@1DRI`3&$AC>*ZH@3K#5S.SDZPR+1$F!"DD8T
|
||||
M%C;I$94\@N>FP-$7%"#MPD_&@/HOQ$"9&X=9WUK/9MB6=\CHQ3B]B>QP58-<
|
||||
M$;$-A'$^9+5LZPJS\%4,@A,)D!(Z`_PICX8T=38569W$),8U,=6K8^2)%Q<B
|
||||
M?\6&8\7(4[%8+\C<)N_K#$VS*O^%S%(N&6JQK4B65EI>2;8N^=8B%$\B"4P/
|
||||
M"N6W8<&CA7C1AVTHV@-KGF/BF-)A1ZZ=?-L#C!]MZ02B3SH=+?J4F@+'6+)W
|
||||
MKD/6*@<3UN)DG7%-AC1E&VFQ+2@O(=92>D-[AB)CJ=J$6SA5ZH)JVK50](JC
|
||||
MT2@D*RK<L*,WS�%>OZU+88(I88_M1VF67T4$D:];-K84#*IS!6C<Z-B?L,
|
||||
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
|
||||
M`>9SJ>	_IF:1DK$&V(0C=^U3V8JZ0Q4S2MB6L!-LC+L;<8D>E8!UAE7+[U
|
||||
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
|
||||
M5W?$YT+`B-\4E,;+J,L_O":];G1=IAQO*+JWYT0W><_W/(%4LW[U:I'W
|
||||
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
|
||||
+?_\_)"$UH(B!`0#-
|
||||
`
|
||||
end
|
1642
contrib/bzip2/sample2.bz2.uu
Normal file
1642
contrib/bzip2/sample2.bz2.uu
Normal file
File diff suppressed because it is too large
Load Diff
1933
contrib/bzip2/sample2.ref.gz.uu
Normal file
1933
contrib/bzip2/sample2.ref.gz.uu
Normal file
File diff suppressed because it is too large
Load Diff
9
contrib/bzip2/sample3.bz2.uu
Normal file
9
contrib/bzip2/sample3.bz2.uu
Normal file
@ -0,0 +1,9 @@
|
||||
begin 644 sample3.bz2
|
||||
M0EIH,S%!62936;K-,\D`.K;?@``00&4P```@!``_[][@,`#:VT-3`IDGZIFF
|
||||
MHT](;4T&@H]-0R`!HT`BD%'I--&)H&C32IEOWIG15$$195,\[7SNV^DXEM\G
|
||||
M0\ZRK;7W3[@]P7B>KPBU87N[XI5>!/TRY1JZE9UN&;!6ZH,60K?O=56)J;1@
|
||||
MAMLR":K)YTDE0*\.``1`$""QGH`*"(N^C.#]!@VC7I&-,2#+KPCP^J.FQY.Z
|
||||
MF8"5*83K]+=A;.A$:#-(KY':7&T/24RT:&EIR)5"L%+S'``4$1985NZ$GE_%
|
||||
*W)%.%"0NLTSR0.A$
|
||||
`
|
||||
end
|
11
contrib/bzip2/sample3.ref.gz.uu
Normal file
11
contrib/bzip2/sample3.ref.gz.uu
Normal file
@ -0,0 +1,11 @@
|
||||
begin 644 sample3.ref.gz
|
||||
M'XL("$_07C<"`W-A;7!L93,N<F5F`.W/08[;,`P%T+U/P>4$"`)T;M%]+Z!F
|
||||
MZ-B(8P>2@S:W'R7HNB=XBP=1$#\E_9KF%N.\9/0U_YXSO^;ULCSC]U9[<8KX
|
||||
M.<9S>_2>]>M5U);+.-0LK[Z8]V/<ERPMX^/'(?9R[8/V&.MVBUO&/I7]G3Z7
|
||||
M-5H9<WD.ET>V%G]>)_N44;/ML8WO^OV.5I[M&*7?]O%YB)9YC7O=QAZ:M[4L
|
||||
MPY3+_30,]];?UD,UHW3K%N.COO9]0#V7ML_G/OM6ZK7%O/;.?__LT<=E`@``
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
C``````````````````````````````#@/[X!M4V7,;35`0``
|
||||
`
|
||||
end
|
39
contrib/bzip2/spewG.c
Normal file
39
contrib/bzip2/spewG.c
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
/* spew out a thoroughly gigantic file designed so that bzip2
|
||||
can compress it reasonably rapidly. This is to help test
|
||||
support for large files (> 2GB) in a reasonable amount of time.
|
||||
I suggest you use the undocumented --exponential option to
|
||||
bzip2 when compressing the resulting file; this saves a bit of
|
||||
time. Note: *don't* bother with --exponential when compressing
|
||||
Real Files; it'll just waste a lot of CPU time :-)
|
||||
(but is otherwise harmless).
|
||||
*/
|
||||
|
||||
#define _FILE_OFFSET_BITS 64
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/* The number of megabytes of junk to spew out (roughly) */
|
||||
#define MEGABYTES 5000
|
||||
|
||||
#define N_BUF 1000000
|
||||
char buf[N_BUF];
|
||||
|
||||
int main ( int argc, char** argv )
|
||||
{
|
||||
int ii, kk, p;
|
||||
srandom(1);
|
||||
setbuffer ( stdout, buf, N_BUF );
|
||||
for (kk = 0; kk < MEGABYTES * 515; kk+=3) {
|
||||
p = 25+random()%50;
|
||||
for (ii = 0; ii < p; ii++)
|
||||
printf ( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );
|
||||
for (ii = 0; ii < p-1; ii++)
|
||||
printf ( "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" );
|
||||
for (ii = 0; ii < p+1; ii++)
|
||||
printf ( "ccccccccccccccccccccccccccccccccccccc" );
|
||||
}
|
||||
fflush(stdout);
|
||||
return 0;
|
||||
}
|
126
contrib/bzip2/unzcrash.c
Normal file
126
contrib/bzip2/unzcrash.c
Normal file
@ -0,0 +1,126 @@
|
||||
|
||||
/* A test program written to test robustness to decompression of
|
||||
corrupted data. Usage is
|
||||
unzcrash filename
|
||||
and the program will read the specified file, compress it (in memory),
|
||||
and then repeatedly decompress it, each time with a different bit of
|
||||
the compressed data inverted, so as to test all possible one-bit errors.
|
||||
This should not cause any invalid memory accesses. If it does,
|
||||
I want to know about it!
|
||||
|
||||
p.s. As you can see from the above description, the process is
|
||||
incredibly slow. A file of size eg 5KB will cause it to run for
|
||||
many hours.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include "bzlib.h"
|
||||
|
||||
#define M_BLOCK 1000000
|
||||
|
||||
typedef unsigned char uchar;
|
||||
|
||||
#define M_BLOCK_OUT (M_BLOCK + 1000000)
|
||||
uchar inbuf[M_BLOCK];
|
||||
uchar outbuf[M_BLOCK_OUT];
|
||||
uchar zbuf[M_BLOCK + 600 + (M_BLOCK / 100)];
|
||||
|
||||
int nIn, nOut, nZ;
|
||||
|
||||
static char *bzerrorstrings[] = {
|
||||
"OK"
|
||||
,"SEQUENCE_ERROR"
|
||||
,"PARAM_ERROR"
|
||||
,"MEM_ERROR"
|
||||
,"DATA_ERROR"
|
||||
,"DATA_ERROR_MAGIC"
|
||||
,"IO_ERROR"
|
||||
,"UNEXPECTED_EOF"
|
||||
,"OUTBUFF_FULL"
|
||||
,"???" /* for future */
|
||||
,"???" /* for future */
|
||||
,"???" /* for future */
|
||||
,"???" /* for future */
|
||||
,"???" /* for future */
|
||||
,"???" /* for future */
|
||||
};
|
||||
|
||||
void flip_bit ( int bit )
|
||||
{
|
||||
int byteno = bit / 8;
|
||||
int bitno = bit % 8;
|
||||
uchar mask = 1 << bitno;
|
||||
//fprintf ( stderr, "(byte %d bit %d mask %d)",
|
||||
// byteno, bitno, (int)mask );
|
||||
zbuf[byteno] ^= mask;
|
||||
}
|
||||
|
||||
int main ( int argc, char** argv )
|
||||
{
|
||||
FILE* f;
|
||||
int r;
|
||||
int bit;
|
||||
int i;
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf ( stderr, "usage: unzcrash filename\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
f = fopen ( argv[1], "r" );
|
||||
if (!f) {
|
||||
fprintf ( stderr, "unzcrash: can't open %s\n", argv[1] );
|
||||
return 1;
|
||||
}
|
||||
|
||||
nIn = fread ( inbuf, 1, M_BLOCK, f );
|
||||
fprintf ( stderr, "%d bytes read\n", nIn );
|
||||
|
||||
nZ = M_BLOCK;
|
||||
r = BZ2_bzBuffToBuffCompress (
|
||||
zbuf, &nZ, inbuf, nIn, 9, 0, 30 );
|
||||
|
||||
assert (r == BZ_OK);
|
||||
fprintf ( stderr, "%d after compression\n", nZ );
|
||||
|
||||
for (bit = 0; bit < nZ*8; bit++) {
|
||||
fprintf ( stderr, "bit %d ", bit );
|
||||
flip_bit ( bit );
|
||||
nOut = M_BLOCK_OUT;
|
||||
r = BZ2_bzBuffToBuffDecompress (
|
||||
outbuf, &nOut, zbuf, nZ, 0, 0 );
|
||||
fprintf ( stderr, " %d %s ", r, bzerrorstrings[-r] );
|
||||
|
||||
if (r != BZ_OK) {
|
||||
fprintf ( stderr, "\n" );
|
||||
} else {
|
||||
if (nOut != nIn) {
|
||||
fprintf(stderr, "nIn/nOut mismatch %d %d\n", nIn, nOut );
|
||||
return 1;
|
||||
} else {
|
||||
for (i = 0; i < nOut; i++)
|
||||
if (inbuf[i] != outbuf[i]) {
|
||||
fprintf(stderr, "mismatch at %d\n", i );
|
||||
return 1;
|
||||
}
|
||||
if (i == nOut) fprintf(stderr, "really ok!\n" );
|
||||
}
|
||||
}
|
||||
|
||||
flip_bit ( bit );
|
||||
}
|
||||
|
||||
#if 0
|
||||
assert (nOut == nIn);
|
||||
for (i = 0; i < nOut; i++) {
|
||||
if (inbuf[i] != outbuf[i]) {
|
||||
fprintf ( stderr, "difference at %d !\n", i );
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
fprintf ( stderr, "all ok\n" );
|
||||
return 0;
|
||||
}
|
5
contrib/bzip2/words0
Normal file
5
contrib/bzip2/words0
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
If compilation produces errors, or a large number of warnings,
|
||||
please read README.COMPILATION.PROBLEMS -- you might be able to
|
||||
adjust the flags in this Makefile to improve matters.
|
||||
|
4
contrib/bzip2/words1
Normal file
4
contrib/bzip2/words1
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
Doing 6 tests (3 compress, 3 uncompress) ...
|
||||
If there's a problem, things might stop at this point.
|
||||
|
5
contrib/bzip2/words2
Normal file
5
contrib/bzip2/words2
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
Checking test results. If any of the four "cmp"s which follow
|
||||
report any differences, something is wrong. If you can't easily
|
||||
figure out what, please let me know (jseward@acm.org).
|
||||
|
23
contrib/bzip2/words3
Normal file
23
contrib/bzip2/words3
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
If you got this far and the "cmp"s didn't complain, it looks
|
||||
like you're in business.
|
||||
|
||||
To install in /usr/bin, /usr/lib, /usr/man and /usr/include, type
|
||||
make install
|
||||
To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type
|
||||
make install PREFIX=/xxx/yyy
|
||||
If you are (justifiably) paranoid and want to see what 'make install'
|
||||
is going to do, you can first do
|
||||
make -n install or
|
||||
make -n install PREFIX=/xxx/yyy respectively.
|
||||
The -n instructs make to show the commands it would execute, but
|
||||
not actually execute them.
|
||||
|
||||
Instructions for use are in the preformatted manual page, in the file
|
||||
bzip2.txt. For more detailed documentation, read the full manual.
|
||||
It is available in Postscript form (manual.ps) and HTML form
|
||||
(manual_toc.html).
|
||||
|
||||
You can also do "bzip2 --help" to see some helpful information.
|
||||
"bzip2 -L" displays the software license.
|
||||
|
Loading…
Reference in New Issue
Block a user