Module Name:    src
Committed By:   wiz
Date:           Mon May  7 00:30:06 UTC 2012

Modified Files:
        src/external/bsd/bzip2: bzip2.1 bzip2.c bzip2recover.c bzlib.c
            bzlib_private.h decompress.c
Added Files:
        src/external/bsd/bzip2: bzip2netbsd
Removed Files:
        src/external/bsd/bzip2: manual.pdf manual.ps

Log Message:
Merge changes from dist/bzip2:
man page converted to mdoc
compiler warning fixes
integer overflow fix
remove files that aren't used on NetBSD

Add adapted bzip2netbsd script.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 src/external/bsd/bzip2/bzip2.1 \
    src/external/bsd/bzip2/bzip2.c src/external/bsd/bzip2/bzip2recover.c \
    src/external/bsd/bzip2/bzlib.c src/external/bsd/bzip2/bzlib_private.h \
    src/external/bsd/bzip2/decompress.c
cvs rdiff -u -r0 -r1.1 src/external/bsd/bzip2/bzip2netbsd
cvs rdiff -u -r1.1.1.1 -r0 src/external/bsd/bzip2/manual.pdf \
    src/external/bsd/bzip2/manual.ps

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/bsd/bzip2/bzip2.1
diff -u src/external/bsd/bzip2/bzip2.1:1.1.1.1 src/external/bsd/bzip2/bzip2.1:1.2
--- src/external/bsd/bzip2/bzip2.1:1.1.1.1	Mon May  7 00:21:47 2012
+++ src/external/bsd/bzip2/bzip2.1	Mon May  7 00:30:05 2012
@@ -1,456 +1,510 @@
-.\"	$NetBSD: bzip2.1,v 1.1.1.1 2012/05/07 00:21:47 wiz Exp $
+.\"	$NetBSD: bzip2.1,v 1.2 2012/05/07 00:30:05 wiz Exp $
 .\"
-.PU
-.TH bzip2 1
-.SH NAME
-bzip2, bunzip2 \- a block-sorting file compressor, v1.0.4
-.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
+.Dd May 14, 2010
+.Dt BZIP2 1
+.Os
+.Sh NAME
+.Nm bzip2 ,
+.Nm bunzip2 ,
+.Nm bzcat ,
+.Nm bzip2recover
+.Nd block-sorting file compressor
+.Sh SYNOPSIS
+.Nm bzip2
+.Op Fl 123456789cdfkLqstVvz
+.Op Ar filename Ar
+.Pp
+.Nm bunzip2
+.Op Fl fkLVvs
+.Op Ar filename Ar
+.Pp
+.Nm bzcat
+.Op Fl s
+.Op Ar filename Ar
+.Pp
+.Nm bzip2recover
+.Ar filename
+.Sh DESCRIPTION
+.Nm 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, 
+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.
+.Pp
+.Nm bzcat
+decompresses files to stdout, and
+.Nm bzip2recover
+recovers data from damaged bzip2 files.
+.Pp
+The command-line options are deliberately very similar to
+those of
+.Xr gzip 1 ,
 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
+.Pp
+.Nm 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
+.Dq Pa 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
+.Tn MS-DOS .
+.Nm bzip2
 and
-.I bunzip2
-will by default not overwrite existing
-files.  If you want this to happen, specify the \-f flag.
-
+.Nm bunzip2
+will by default not overwrite existing files.
+If you want this to happen, specify the
+.Fl f
+flag.
+.Pp
 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
+.Nm bzip2
+compresses from standard input to standard output.
+In this case,
+.Nm bzip2
+will decline to write compressed output to a terminal, as this would
+be entirely incomprehensible and therefore pointless.
+.Pp
+.Nm 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 
+.Nm bzip2 Fl d )
+decompresses all specified files.
+Files which were not created by
+.Nm bzip2
+will be detected and ignored, and a warning issued.
+.Nm 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
+.Bl -column "filename.tbz2" "becomes" -offset indent
+.It Pa filename.bz2  Ta becomes Ta Pa filename
+.It Pa filename.bz   Ta becomes Ta Pa filename
+.It Pa filename.tbz2 Ta becomes Ta Pa filename.tar
+.It Pa filename.tbz  Ta becomes Ta Pa filename.tar
+.It Pa anyothername  Ta becomes Ta Pa anyothername.out
+.El
+.Pp
+If the file does not end in one of the recognised endings,
+.Pa .bz2 ,
+.Pa .bz ,
+.Pa .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
+.Pa .tbz ,
+.Nm bzip2
+complains that it cannot guess the name of the original file, and uses
+the original name with
+.Pa .out
 appended.
-
-As with compression, supplying no
-filenames causes decompression from 
+.Pp
+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.
-
+.Pp
+.Nm 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
+.Pq Fl t
+of concatenated compressed files is also supported.
+.Pp
 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
+giving the
+.Fl 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
+.Nm bzip2
+version 0.9.0 or later.
+Earlier versions of
+.Nm bzip2
 will stop after decompressing
 the first file in the stream.
-
-.I bzcat
+.Pp
+.Nm 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
+.Nm bzip2 Fl dc )
+decompresses all specified files to the standard output.
+.Pp
+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%.
+.Pp
+As a self-check for your protection,
+.Nm 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
+.Nm 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
+.Nm 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
+.Sh OPTIONS
+.Bl -tag -width "XXrepetitiveXfastXX"
+.It Fl Fl
+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:
+.Dl bzip2 -- -myfilename .
+.It Fl 1 , Fl Fl fast
+to
+.It Fl 9 , Fl Fl best
+Set the block size to 100 k, 200 k ... 900 k when compressing.
+Has no effect when decompressing.
+See
+.Sx MEMORY MANAGEMENT
+below.
+The
+.Fl Fl fast
+and
+.Fl Fl best
+aliases are primarily for GNU
+.Xr gzip 1
+compatibility.
+In particular,
+.Fl Fl fast
+doesn't make things significantly faster, and
+.Fl Fl best
+merely selects the default behaviour.
+.It Fl c , Fl Fl stdout
 Compress or decompress to standard output.
-.TP
-.B \-d --decompress
-Force decompression.  
-.I bzip2, 
-.I bunzip2 
+.It Fl d , Fl Fl decompress
+Force decompression.
+.Nm bzip2 ,
+.Nm 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
+.Nm 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
+.Nm bzip2
 to decompress.
-.TP
-.B \-z --compress
-The complement to \-d: forces compression, regardless of the
-invocation 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 
+.It Fl f , Fl Fl force
+Force overwrite of output files.
+Normally,
+.Nm bzip2
+will not overwrite existing output files.
+Also forces
+.Nm bzip2
 to break hard links
 to files, which it otherwise wouldn't do.
-
-bzip2 normally declines to decompress files which don't have the
-correct magic header bytes.  If forced (-f), however, it will pass
-such files through unmodified.  This is how GNU gzip behaves.
-.TP
-.B \-k --keep
+.Pp
+.Nm bzip2
+normally declines to decompress files which don't have the correct
+magic header bytes.
+If forced
+.Pq Fl f ,
+however, it will pass such files through unmodified.
+This is how GNU
+.Xr gzip 1
+behaves.
+.It Fl k , Fl Fl 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 (or \-\-fast) to \-9 (or \-\-best)
-Set the block size to 100 k, 200 k ..  900 k when compressing.  Has no
-effect when decompressing.  See MEMORY MANAGEMENT below.
-The \-\-fast and \-\-best aliases are primarily for GNU gzip 
-compatibility.  In particular, \-\-fast doesn't make things
-significantly faster.  
-And \-\-best merely selects the default behaviour.
-.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
+.It Fl L , Fl Fl license
+Display the license terms and conditions.
+.It Fl q , Fl Fl quiet
+Suppress non-essential warning messages.
+Messages pertaining to I/O errors and other critical events will not
+be suppressed.
+.It Fl Fl repetitive-fast
+.It Fl Fl 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.
+.It Fl s , Fl Fl 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,
+.Fl 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
+.Fl s
+for everything.
+See
+.Sx MEMORY MANAGEMENT
+below.
+.It Fl t , Fl Fl test
+Check integrity of the specified file(s), but don't decompress them.
+This really performs a trial decompression and throws away the result.
+.It Fl V , Fl Fl version
+Display the software version.
+.It Fl v , Fl Fl verbose
+Verbose mode: show the compression ratio for each file processed.
+Further
+.Fl v Ap s
+increase the verbosity level, spewing out lots of information which is
+primarily of interest for diagnostic purposes.
+.It Fl z , Fl Fl compress
+The complement to
+Fl d :
+forces compression, regardless of the invocation name.
+.El
+.Ss MEMORY MANAGEMENT
+.Nm 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
+.Fl 1
+through
+.Fl 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
+default) respectively.
+At decompression time, the block size used for compression is read
+from the header of the compressed file, and
+.Nm bunzip2
+then allocates itself just enough memory to decompress the file.
+Since block sizes are stored in compressed files, it follows that the
+flags
+.Fl 1
+to
+.Fl 9
+are irrelevant to and so ignored during decompression.
+.Pp
+Compression and decompression requirements, in bytes, can be estimated
+as:
+.Bl -tag -width "Decompression:" -offset indent
+.It Compression :
+400k + ( 8 x block size )
+.It Decompression :
+100k + ( 4 x block size ), or 100k + ( 2.5 x block size )
+.El
+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
+.Nm 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.
-
+.Pp
 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.
-
+.Nm bunzip2
+will require about 3700 kbytes to decompress.
+To support decompression of any file on a 4 megabyte machine,
+.Nm 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
+.Fl s .
+.Pp
+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.
+.Pp
 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.
-
+-- 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
+.Fl 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.
+.Pp
 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.
-
+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.
+.Bl -column "Flag" "Compression" "Decompression" "DecompressionXXs" "Corpus size"
+.It Sy Flag Ta Sy Compression Ta Sy Decompression Ta Sy Decompression Fl s Ta Sy Corpus size
+.It -1 Ta 1200k Ta  500k Ta  350k Ta 914704
+.It -2 Ta 2000k Ta  900k Ta  600k Ta 877703
+.It -3 Ta 2800k Ta 1300k Ta  850k Ta 860338
+.It -4 Ta 3600k Ta 1700k Ta 1100k Ta 846899
+.It -5 Ta 4400k Ta 2100k Ta 1350k Ta 845160
+.It -6 Ta 5200k Ta 2500k Ta 1600k Ta 838626
+.It -7 Ta 6100k Ta 2900k Ta 1850k Ta 834096
+.It -8 Ta 6800k Ta 3300k Ta 2100k Ta 828642
+.It -9 Ta 7600k Ta 3700k Ta 2350k Ta 828642
+.El
+.Ss RECOVERING DATA FROM DAMAGED FILES
+.Nm bzip2
+compresses files in blocks, usually 900kbytes long.
+Each block is handled independently.
+If a media or transmission error causes a multi-block
+.Pa .bz2
+file to become damaged, it may be possible to recover data from the
+undamaged blocks in the file.
+.Pp
 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 "rec00001file.bz2",
-"rec00002file.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" -- processes 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
+reasonable certainty.
+Each block also carries its own 32-bit CRC, so damaged blocks can be
+distinguished from undamaged ones.
+.Pp
+.Nm bzip2recover
+is a simple program whose purpose is to search for blocks in
+.Pa .bz2
+files, and write each block out into its own
+.Pa .bz2
+file.
+You can then use
+.Nm bzip2
+.Fl t
+to test the integrity of the resulting files, and decompress those
+which are undamaged.
+.Pp
+.Nm bzip2recover
+takes a single argument, the name of the damaged file, and writes a
+number of files
+.Dq Pa rec00001file.bz2 ,
+.Dq Pa rec00002file.bz2 ,
+etc., containing the extracted blocks.
+The output filenames are designed so that the use of wildcards in
+subsequent processing -- for example,
+.Dl bzip2 -dc rec*file.bz2 \*[Gt] recovered_data
+-- processes the files in the correct order.
+.Pp
+.Nm bzip2recover
+should be of most use dealing with large
+.Pa .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.
-
+.Ss 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
+.Dq 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
+.Fl vvvv
+option to monitor progress in great detail, if you want.
+.Pp
 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
+.Pp
+.Nm 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
+.Nm bzip2
 will perform best on machines with very large caches.
-
-.SH CAVEATS
+.Sh ENVIRONMENT
+.Nm bzip2
+will read arguments from the environment variables
+.Ev BZIP2
+and
+.Ev 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.
+.Sh EXIT STATUS
+0 for a normal exit, 1 for environmental problems (file not found,
+invalid flags, I/O errors, etc.), 2 to indicate a corrupt compressed
+file, 3 for an internal consistency error (e.g., bug) which caused
+.Nm bzip2
+to panic.
+.Sh AUTHORS
+.An -nosplit
+.An Julian Seward
+.Aq [email protected]
+.Pp
+.Pa http://www.bzip.org
+.Pp
+The ideas embodied in
+.Nm bzip2
+are due to (at least) the following people:
+.An Michael Burrows
+and
+.An David Wheeler
+(for the block sorting transformation),
+.An David Wheeler
+(again, for the Huffman coder),
+.An Peter Fenwick
+(for the structured coding model in the original
+.Nm bzip ,
+and many refinements), and
+.An Alistair Moffat ,
+.An Radford Neal ,
+and
+.An Ian Witten
+(for the arithmetic coder in the original
+.Nm 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.
+Donna Robinson XMLised the documentation.
+The bz* scripts are derived from those of GNU gzip.
+Many people sent patches, helped with portability problems, lent
+machines, gave advice and were generally helpful.
+.Sh CAVEATS
 I/O error messages are not as helpful as they could be.
-.I bzip2
+.Nm 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.4 of
-.I bzip2.  
+.Pp
+This manual page pertains to version 1.0.5 of
+.Nm bzip2 .
 Compressed data created by this version is entirely forwards and
 backwards compatible with the previous public releases, versions
-0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and 1.0.3, 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
-versions prior to 1.0.2 used 32-bit integers to represent
-bit positions in compressed files, so they could not handle compressed
-files more than 512 megabytes long.  Versions 1.0.2 and above use
-64-bit ints on some platforms which support them (GNU supported
-targets, and Windows).  To establish whether or not bzip2recover was
-built with such a limitation, run it without arguments.  In any event
-you can build yourself an unlimited version if you can recompile it
-with MaybeUInt64 set to be an unsigned 64-bit integer.
-
-
-
-.SH AUTHOR
-Julian Seward, jsewardbzip.org.
-
-http://www.bzip.org
-
-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.  
-Donna Robinson XMLised the documentation.
-The bz* scripts are derived from those of GNU gzip.
-Many people sent patches, helped
-with portability problems, lent machines, gave advice and were generally
-helpful.
+0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and 1.0.3, 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.
+.Pp
+.Nm bzip2recover
+versions prior to 1.0.2 used 32-bit integers to represent bit
+positions in compressed files, so they could not handle compressed
+files more than 512 megabytes long.
+Versions 1.0.2 and above use 64-bit ints on some platforms which
+support them (GNU supported targets, and Windows).
+To establish whether or not
+.Nm bzip2recover
+was built with such a limitation, run it without arguments.
+In any event you can build yourself an unlimited version if you can
+recompile it with MaybeUInt64 set to be an unsigned 64-bit integer.
Index: src/external/bsd/bzip2/bzip2.c
diff -u src/external/bsd/bzip2/bzip2.c:1.1.1.1 src/external/bsd/bzip2/bzip2.c:1.2
--- src/external/bsd/bzip2/bzip2.c:1.1.1.1	Mon May  7 00:21:46 2012
+++ src/external/bsd/bzip2/bzip2.c	Mon May  7 00:30:05 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: bzip2.c,v 1.1.1.1 2012/05/07 00:21:46 wiz Exp $	*/
+/*	$NetBSD: bzip2.c,v 1.2 2012/05/07 00:30:05 wiz Exp $	*/
 
 
 /*-----------------------------------------------------------*/
@@ -220,11 +220,12 @@ static void    crcError              ( v
 static void    cleanUpAndFail        ( Int32 )       NORETURN;
 static void    compressedStreamEOF   ( void )        NORETURN;
 
-static void    copyFileName ( Char*, Char* );
+static void    copyFileName ( Char*, const Char* );
 static void*   myMalloc     ( Int32 );
 static void    applySavedFileAttrToOutputFile ( IntNative fd );
 
 
+static FILE* fopen_output_safely ( Char*, const char* );
 
 /*---------------------------------------------------*/
 /*--- An implementation of 64-bit ints.  Sigh.    ---*/
@@ -439,7 +440,7 @@ Bool uncompressStream ( FILE *zStream, F
    UChar   obuf[5000];
    UChar   unused[BZ_MAX_UNUSED];
    Int32   nUnused;
-   void*   unusedTmpV;
+   void*   unusedTmpV = NULL;
    UChar*  unusedTmp;
 
    nUnused = 0;
@@ -469,7 +470,7 @@ Bool uncompressStream ( FILE *zStream, F
       }
       if (bzerr != BZ_STREAM_END) goto errhandler;
 
-      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
+      BZ2_bzReadGetUnused ( &bzerr, bzf, (void*)(&unusedTmpV), &nUnused );
       if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
 
       unusedTmp = (UChar*)unusedTmpV;
@@ -560,8 +561,8 @@ Bool testStream ( FILE *zStream )
    UChar   obuf[5000];
    UChar   unused[BZ_MAX_UNUSED];
    Int32   nUnused;
-   void*   unusedTmpV;
-   UChar*  unusedTmp;
+   void*   unusedTmpV = NULL;
+   UChar*  unusedTmp = NULL;
 
    nUnused = 0;
    streamNo = 0;
@@ -584,7 +585,7 @@ Bool testStream ( FILE *zStream )
       }
       if (bzerr != BZ_STREAM_END) goto errhandler;
 
-      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
+      BZ2_bzReadGetUnused ( &bzerr, bzf, (void*)(&unusedTmpV), &nUnused );
       if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
 
       unusedTmp = (UChar*)unusedTmpV;
@@ -803,7 +804,7 @@ void ioError ( void )
 
 
 /*---------------------------------------------*/
-static 
+NORETURN static 
 void mySignalCatcher ( IntNative n )
 {
    fprintf ( stderr,
@@ -814,7 +815,8 @@ void mySignalCatcher ( IntNative n )
 
 
 /*---------------------------------------------*/
-static 
+#ifndef SMALL
+NORETURN static 
 void mySIGSEGVorSIGBUScatcher ( IntNative n )
 {
    if (opMode == OM_Z)
@@ -867,6 +869,7 @@ void mySIGSEGVorSIGBUScatcher ( IntNativ
       cleanUpAndFail( 3 ); else
       { cadvise(); cleanUpAndFail( 2 ); }
 }
+#endif
 
 
 /*---------------------------------------------*/
@@ -918,7 +921,7 @@ void pad ( Char *s )
 
 /*---------------------------------------------*/
 static 
-void copyFileName ( Char* to, Char* from ) 
+void copyFileName ( Char* to, const Char* from ) 
 {
    if ( strlen(from) > FILE_NAME_LEN-10 )  {
       fprintf (
@@ -1146,8 +1149,8 @@ void compress ( Char *name )
 
    switch (srcMode) {
       case SM_I2O: 
-         copyFileName ( inName, (Char*)"(stdin)" );
-         copyFileName ( outName, (Char*)"(stdout)" ); 
+         copyFileName ( inName, "(stdin)" );
+         copyFileName ( outName, "(stdout)" ); 
          break;
       case SM_F2F: 
          copyFileName ( inName, name );
@@ -1156,7 +1159,7 @@ void compress ( Char *name )
          break;
       case SM_F2O: 
          copyFileName ( inName, name );
-         copyFileName ( outName, (Char*)"(stdout)" ); 
+         copyFileName ( outName, "(stdout)" ); 
          break;
    }
 
@@ -1330,8 +1333,8 @@ void uncompress ( Char *name )
    cantGuess = False;
    switch (srcMode) {
       case SM_I2O: 
-         copyFileName ( inName, (Char*)"(stdin)" );
-         copyFileName ( outName, (Char*)"(stdout)" ); 
+         copyFileName ( inName, "(stdin)" );
+         copyFileName ( outName, "(stdout)" ); 
          break;
       case SM_F2F: 
          copyFileName ( inName, name );
@@ -1344,7 +1347,7 @@ void uncompress ( Char *name )
          break;
       case SM_F2O: 
          copyFileName ( inName, name );
-         copyFileName ( outName, (Char*)"(stdout)" ); 
+         copyFileName ( outName, "(stdout)" ); 
          break;
    }
 
@@ -1522,9 +1525,9 @@ void testf ( Char *name )
    if (name == NULL && srcMode != SM_I2O)
       panic ( "testf: bad modes\n" );
 
-   copyFileName ( outName, (Char*)"(none)" );
+   copyFileName ( outName, "(none)" );
    switch (srcMode) {
-      case SM_I2O: copyFileName ( inName, (Char*)"(stdin)" ); break;
+      case SM_I2O: copyFileName ( inName, "(stdin)" ); break;
       case SM_F2F: copyFileName ( inName, name ); break;
       case SM_F2O: copyFileName ( inName, name ); break;
    }
@@ -1746,7 +1749,7 @@ Cell *snocString ( Cell *root, Char *nam
 
 /*---------------------------------------------*/
 static 
-void addFlagsFromEnvVar ( Cell** argList, Char* varName ) 
+void addFlagsFromEnvVar ( Cell** argList, const Char* varName ) 
 {
    Int32 i, j, k;
    Char *envbase, *p;
@@ -1806,6 +1809,7 @@ IntNative main ( IntNative argc, Char *a
    exitValue               = 0;
    i = j = 0; /* avoid bogus warning from egcs-1.1.X */
 
+#ifndef SMALL
    /*-- Set up signal handlers for mem access errors --*/
    signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);
 #  if BZ_UNIX
@@ -1813,9 +1817,10 @@ IntNative main ( IntNative argc, Char *a
    signal (SIGBUS,  mySIGSEGVorSIGBUScatcher);
 #  endif
 #  endif
+#endif
 
-   copyFileName ( inName,  (Char*)"(none)" );
-   copyFileName ( outName, (Char*)"(none)" );
+   copyFileName ( inName,  "(none)" );
+   copyFileName ( outName, "(none)" );
 
    copyFileName ( progNameReally, argv[0] );
    progName = &progNameReally[0];
@@ -1827,8 +1832,8 @@ IntNative main ( IntNative argc, Char *a
         expand filename wildcards in arg list.
    --*/
    argList = NULL;
-   addFlagsFromEnvVar ( &argList,  (Char*)"BZIP2" );
-   addFlagsFromEnvVar ( &argList,  (Char*)"BZIP" );
+   addFlagsFromEnvVar ( &argList,  "BZIP2" );
+   addFlagsFromEnvVar ( &argList,  "BZIP" );
    for (i = 1; i <= argc-1; i++)
       APPEND_FILESPEC(argList, argv[i]);
 
Index: src/external/bsd/bzip2/bzip2recover.c
diff -u src/external/bsd/bzip2/bzip2recover.c:1.1.1.1 src/external/bsd/bzip2/bzip2recover.c:1.2
--- src/external/bsd/bzip2/bzip2recover.c:1.1.1.1	Mon May  7 00:21:46 2012
+++ src/external/bsd/bzip2/bzip2recover.c	Mon May  7 00:30:05 2012
@@ -1,4 +1,5 @@
-/*	$NetBSD: bzip2recover.c,v 1.1.1.1 2012/05/07 00:21:46 wiz Exp $	*/
+/*	$NetBSD: bzip2recover.c,v 1.2 2012/05/07 00:30:05 wiz Exp $	*/
+
 
 /*-----------------------------------------------------------*/
 /*--- Block recoverer program for bzip2                   ---*/
@@ -22,6 +23,7 @@
 /* This program is a complete hack and should be rewritten properly.
 	 It isn't very complicated. */
 
+#include <inttypes.h>
 #include <stdio.h>
 #include <errno.h>
 #include <stdlib.h>
@@ -37,9 +39,9 @@
    This change occurred in version 1.0.2; all prior versions have
    the 512MB limitation.
 */
-#ifdef __GNUC__
-   typedef  unsigned long long int  MaybeUInt64;
-#  define MaybeUInt64_FMT "%Lu"
+#if 1
+   typedef uint64_t  MaybeUInt64;
+#  define MaybeUInt64_FMT "%" PRIu64
 #else
 #ifdef _MSC_VER
    typedef  unsigned __int64  MaybeUInt64;
@@ -68,6 +70,32 @@ Char progName[BZ_MAX_FILENAME];
 MaybeUInt64 bytesOut = 0;
 MaybeUInt64 bytesIn  = 0;
 
+/*---------------------------------------------------*/
+/*--- Bit stream I/O                              ---*/
+/*---------------------------------------------------*/
+
+typedef
+   struct {
+      FILE*  handle;
+      Int32  buffer;
+      Int32  buffLive;
+      Char   mode;
+   }
+   BitStream;
+
+static void readError ( void );
+static void writeError ( void );
+static void mallocFail ( Int32 n );
+static BitStream* bsOpenReadStream ( FILE* stream );
+static BitStream* bsOpenWriteStream ( FILE* stream );
+static void bsPutBit ( BitStream* bs, Int32 bit );
+static Int32 bsGetBit ( BitStream* bs );
+static void bsClose ( BitStream* bs );
+static void bsPutUChar ( BitStream* bs, UChar c );
+static void bsPutUInt32 ( BitStream* bs, UInt32 c );
+static Bool endsInBz2 ( Char* name );
+static void tooManyBlocks ( Int32 max_handled_blocks );
+
 
 /*---------------------------------------------------*/
 /*--- Header bytes                                ---*/
@@ -84,7 +112,7 @@ MaybeUInt64 bytesIn  = 0;
 /*---------------------------------------------------*/
 
 /*---------------------------------------------*/
-static void readError ( void )
+__dead static void readError ( void )
 {
    fprintf ( stderr,
              "%s: I/O error reading `%s', possible reason follows.\n",
@@ -97,7 +125,7 @@ static void readError ( void )
 
 
 /*---------------------------------------------*/
-static void writeError ( void )
+__dead static void writeError ( void )
 {
    fprintf ( stderr,
              "%s: I/O error reading `%s', possible reason follows.\n",
@@ -110,7 +138,7 @@ static void writeError ( void )
 
 
 /*---------------------------------------------*/
-static void mallocFail ( Int32 n )
+__dead static void mallocFail ( Int32 n )
 {
    fprintf ( stderr,
              "%s: malloc failed on request for %d bytes.\n",
@@ -122,7 +150,7 @@ static void mallocFail ( Int32 n )
 
 
 /*---------------------------------------------*/
-static void tooManyBlocks ( Int32 max_handled_blocks )
+__dead static void tooManyBlocks ( Int32 max_handled_blocks )
 {
    fprintf ( stderr,
              "%s: `%s' appears to contain more than %d blocks\n",
@@ -138,20 +166,6 @@ static void tooManyBlocks ( Int32 max_ha
 
 
 
-/*---------------------------------------------------*/
-/*--- Bit stream I/O                              ---*/
-/*---------------------------------------------------*/
-
-typedef
-   struct {
-      FILE*  handle;
-      Int32  buffer;
-      Int32  buffLive;
-      Char   mode;
-   }
-   BitStream;
-
-
 /*---------------------------------------------*/
 static BitStream* bsOpenReadStream ( FILE* stream )
 {
Index: src/external/bsd/bzip2/bzlib.c
diff -u src/external/bsd/bzip2/bzlib.c:1.1.1.1 src/external/bsd/bzip2/bzlib.c:1.2
--- src/external/bsd/bzip2/bzlib.c:1.1.1.1	Mon May  7 00:21:46 2012
+++ src/external/bsd/bzip2/bzlib.c	Mon May  7 00:30:05 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: bzlib.c,v 1.1.1.1 2012/05/07 00:21:46 wiz Exp $	*/
+/*	$NetBSD: bzlib.c,v 1.2 2012/05/07 00:30:05 wiz Exp $	*/
 
 
 /*-------------------------------------------------------------*/
@@ -1410,7 +1410,7 @@ BZFILE * bzopen_or_bzdopen
       case 's':
          smallMode = 1; break;
       default:
-         if (isdigit((int)(*mode))) {
+         if (isdigit((unsigned char)(*mode))) {
             blockSize100k = *mode-BZ_HDR_0;
          }
       }
Index: src/external/bsd/bzip2/bzlib_private.h
diff -u src/external/bsd/bzip2/bzlib_private.h:1.1.1.1 src/external/bsd/bzip2/bzlib_private.h:1.2
--- src/external/bsd/bzip2/bzlib_private.h:1.1.1.1	Mon May  7 00:21:46 2012
+++ src/external/bsd/bzip2/bzlib_private.h	Mon May  7 00:30:05 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: bzlib_private.h,v 1.1.1.1 2012/05/07 00:21:46 wiz Exp $	*/
+/*	$NetBSD: bzlib_private.h,v 1.2 2012/05/07 00:30:05 wiz Exp $	*/
 
 
 /*-------------------------------------------------------------*/
@@ -57,7 +57,7 @@ typedef unsigned short  UInt16;
 
 #ifndef BZ_NO_STDIO
 
-extern void BZ2_bz__AssertH__fail ( int errcode );
+__dead void BZ2_bz__AssertH__fail ( int errcode );
 #define AssertH(cond,errcode) \
    { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
 
Index: src/external/bsd/bzip2/decompress.c
diff -u src/external/bsd/bzip2/decompress.c:1.1.1.1 src/external/bsd/bzip2/decompress.c:1.2
--- src/external/bsd/bzip2/decompress.c:1.1.1.1	Mon May  7 00:21:46 2012
+++ src/external/bsd/bzip2/decompress.c	Mon May  7 00:30:05 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: decompress.c,v 1.1.1.1 2012/05/07 00:21:46 wiz Exp $	*/
+/*	$NetBSD: decompress.c,v 1.2 2012/05/07 00:30:05 wiz Exp $	*/
 
 
 /*-------------------------------------------------------------*/
@@ -383,6 +383,13 @@ Int32 BZ2_decompress ( DState* s )
             es = -1;
             N = 1;
             do {
+               /* Check that N doesn't get too big, so that es doesn't
+                  go negative.  The maximum value that can be
+                  RUNA/RUNB encoded is equal to the block size (post
+                  the initial RLE), viz, 900k, so bounding N at 2
+                  million should guard against overflow without
+                  rejecting any legitimate inputs. */
+               if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR);
                if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
                if (nextSym == BZ_RUNB) es = es + (1+1) * N;
                N = N * 2;

Added files:

Index: src/external/bsd/bzip2/bzip2netbsd
diff -u /dev/null src/external/bsd/bzip2/bzip2netbsd:1.1
--- /dev/null	Mon May  7 00:30:06 2012
+++ src/external/bsd/bzip2/bzip2netbsd	Mon May  7 00:30:05 2012
@@ -0,0 +1,123 @@
+#! /bin/sh
+#
+#	$NetBSD: bzip2netbsd,v 1.1 2012/05/07 00:30:05 wiz Exp $
+#
+# Copyright (c) 1998, 1999, 2001 The NetBSD Foundation, Inc.
+# 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. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``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 FOUNDATION OR CONTRIBUTORS
+# 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.
+#
+# bzip2netbsd:  convert a bzip2 source tree into a
+# netbsd bzip2 source tree, under src/external/bsd,
+# based on the other *2netbsd scripts in the NetBSD source tree
+#
+# Rough instructions for importing new bzip2 release:
+#
+#	$ cd /some/where/temporary
+#	$ tar xpfz /new/bzip2/release/tar/file
+#	$ sh /usr/src/external/bsd/bzip2/bzip2netbsd bzip2-1.x.y `pwd`
+#	$ cd src/external/bsd/bzip2
+#	$ cvs import -m "Import bzip2 1.x.y" src/external/bsd/bzip2 JSEWARD bzip2-1-x-y
+#	$ cd ../../..
+#	$ rm -r src bzip2-1.x.y
+#
+#	- check makefiles to see if any extra sources have been added.
+#	- update distrib/sets if necessary.
+
+if [ $# -ne 2 ]; then echo "bzip2netbsd src dest"; exit 1; fi
+
+r=$1
+d=$2/src/external/bsd/bzip2
+
+case "$d" in
+	/*)
+		;;
+	*)
+		d=`/bin/pwd`/$d
+		;;
+esac
+
+case "$r" in
+	/*)
+		;;
+	*)
+		r=`/bin/pwd`/$r
+		;;
+esac
+
+echo preparing directory $d
+rm -rf $d
+mkdir -p $d
+
+### Copy the files and directories
+echo copying $r to $d
+cd $r
+pax -rw * $d
+
+# cd to import directory
+cd $d
+
+### delete formatted manual pages
+echo removing unneeded directories and files
+rm -f bzip2.1.preformatted bzip2.txt
+
+### bzip2 distribution doesn't have RCS/CVS tags (!).
+
+### Add our NetBSD RCS Id
+find $d -type f -name '*.[chly]' -print | while read c; do
+	sed 1q < $c | grep -q '\$NetBSD' || (
+echo "/*	\$NetBSD\$	*/" >/tmp/bzip3n$$
+echo "" >>/tmp/bzip3n$$
+cat $c  >> /tmp/bzip3n$$
+mv /tmp/bzip3n$$ $c && echo added NetBSD RCS tag to $c
+	)
+done
+
+find $d -type f -name '*.[0-9]' -print | while read m; do
+	sed 1q < $m | grep -q '\$NetBSD' || (
+echo ".\\\"	\$NetBSD\$" >/tmp/bzip2m$$
+echo ".\\\"" >>/tmp/bzip2m$$
+cat $m >> /tmp/bzip2m$$
+mv /tmp/bzip2m$$ $m && echo added NetBSD RCS tag to $m
+	)
+done
+
+echo done
+
+### Clean up any CVS directories that might be around.
+echo "cleaning up CVS residue."
+(
+	cd $d
+	find . -type d -name "CVS" -print | xargs rm -r
+)
+echo done
+
+### Fixing file and directory permissions.
+echo "Fixing file/directory permissions."
+(
+	cd $d
+	find . -type f -print | xargs chmod u+rw,go+r
+	find . -type d -print | xargs chmod u+rwx,go+rx
+)
+echo done
+
+exit 0

Reply via email to