patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
1180 lines
37 KiB
Diff
1180 lines
37 KiB
Diff
Index: contrib/bzip2/blocksort.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/blocksort.c,v
|
|
retrieving revision 1.1.1.1.2.1
|
|
diff -u -r1.1.1.1.2.1 blocksort.c
|
|
--- contrib/bzip2/blocksort.c 1 Aug 2001 00:13:31 -0000 1.1.1.1.2.1
|
|
+++ contrib/bzip2/blocksort.c 22 Feb 2002 13:34:04 -0000
|
|
@@ -8,7 +8,7 @@
|
|
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.
|
|
+ Copyright (C) 1996-2002 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
|
|
@@ -981,7 +981,14 @@
|
|
}
|
|
}
|
|
|
|
- AssertH ( copyStart[ss]-1 == copyEnd[ss], 1007 );
|
|
+ AssertH ( (copyStart[ss]-1 == copyEnd[ss])
|
|
+ ||
|
|
+ /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.
|
|
+ Necessity for this case is demonstrated by compressing
|
|
+ a sequence of approximately 48.5 million of character
|
|
+ 251; 1.0.0/1.0.1 will then die here. */
|
|
+ (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),
|
|
+ 1007 )
|
|
|
|
for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;
|
|
|
|
Index: contrib/bzip2/bzip2.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/bzip2.c,v
|
|
retrieving revision 1.1.1.1.2.1
|
|
diff -u -r1.1.1.1.2.1 bzip2.c
|
|
--- contrib/bzip2/bzip2.c 1 Aug 2001 00:13:31 -0000 1.1.1.1.2.1
|
|
+++ contrib/bzip2/bzip2.c 22 Feb 2002 13:34:04 -0000
|
|
@@ -7,7 +7,7 @@
|
|
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.
|
|
+ Copyright (C) 1996-2002 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
|
|
@@ -113,13 +113,16 @@
|
|
/*--
|
|
Generic 32-bit Unix.
|
|
Also works on 64-bit Unix boxes.
|
|
+ This is the default.
|
|
--*/
|
|
#define BZ_UNIX 1
|
|
|
|
/*--
|
|
Win32, as seen by Jacob Navia's excellent
|
|
port of (Chris Fraser & David Hanson)'s excellent
|
|
- lcc compiler.
|
|
+ lcc compiler. Or with MS Visual C.
|
|
+ This is selected automatically if compiled by a compiler which
|
|
+ defines _WIN32, not including the Cygwin GCC.
|
|
--*/
|
|
#define BZ_LCCWIN32 0
|
|
|
|
@@ -156,6 +159,7 @@
|
|
--*/
|
|
|
|
#if BZ_UNIX
|
|
+# include <fcntl.h>
|
|
# include <sys/types.h>
|
|
# include <utime.h>
|
|
# include <unistd.h>
|
|
@@ -164,8 +168,9 @@
|
|
|
|
# define PATH_SEP '/'
|
|
# define MY_LSTAT lstat
|
|
-# define MY_S_IFREG S_ISREG
|
|
# define MY_STAT stat
|
|
+# define MY_S_ISREG S_ISREG
|
|
+# define MY_S_ISDIR S_ISDIR
|
|
|
|
# define APPEND_FILESPEC(root, name) \
|
|
root=snocString((root), (name))
|
|
@@ -180,19 +185,23 @@
|
|
# else
|
|
# define NORETURN /**/
|
|
# endif
|
|
+
|
|
# ifdef __DJGPP__
|
|
# include <io.h>
|
|
# include <fcntl.h>
|
|
# undef MY_LSTAT
|
|
+# undef MY_STAT
|
|
# define MY_LSTAT stat
|
|
+# define MY_STAT stat
|
|
# undef SET_BINARY_MODE
|
|
# define SET_BINARY_MODE(fd) \
|
|
do { \
|
|
int retVal = setmode ( fileno ( fd ), \
|
|
- O_BINARY ); \
|
|
+ O_BINARY ); \
|
|
ERROR_IF_MINUS_ONE ( retVal ); \
|
|
} while ( 0 )
|
|
# endif
|
|
+
|
|
# ifdef __CYGWIN__
|
|
# include <io.h>
|
|
# include <fcntl.h>
|
|
@@ -200,11 +209,11 @@
|
|
# define SET_BINARY_MODE(fd) \
|
|
do { \
|
|
int retVal = setmode ( fileno ( fd ), \
|
|
- O_BINARY ); \
|
|
+ O_BINARY ); \
|
|
ERROR_IF_MINUS_ONE ( retVal ); \
|
|
} while ( 0 )
|
|
# endif
|
|
-#endif
|
|
+#endif /* BZ_UNIX */
|
|
|
|
|
|
|
|
@@ -217,46 +226,23 @@
|
|
# define PATH_SEP '\\'
|
|
# define MY_LSTAT _stat
|
|
# define MY_STAT _stat
|
|
-# define MY_S_IFREG(x) ((x) & _S_IFREG)
|
|
+# define MY_S_ISREG(x) ((x) & _S_IFREG)
|
|
+# define MY_S_ISDIR(x) ((x) & _S_IFDIR)
|
|
|
|
# define APPEND_FLAG(root, name) \
|
|
root=snocString((root), (name))
|
|
|
|
-# if 0
|
|
- /*-- lcc-win32 seems to expand wildcards itself --*/
|
|
-# define APPEND_FILESPEC(root, spec) \
|
|
- do { \
|
|
- if ((spec)[0] == '-') { \
|
|
- root = snocString((root), (spec)); \
|
|
- } else { \
|
|
- struct _finddata_t c_file; \
|
|
- long hFile; \
|
|
- hFile = _findfirst((spec), &c_file); \
|
|
- if ( hFile == -1L ) { \
|
|
- root = snocString ((root), (spec)); \
|
|
- } else { \
|
|
- int anInt = 0; \
|
|
- while ( anInt == 0 ) { \
|
|
- root = snocString((root), \
|
|
- &c_file.name[0]); \
|
|
- anInt = _findnext(hFile, &c_file); \
|
|
- } \
|
|
- } \
|
|
- } \
|
|
- } while ( 0 )
|
|
-# else
|
|
# define APPEND_FILESPEC(root, name) \
|
|
root = snocString ((root), (name))
|
|
-# endif
|
|
|
|
# define SET_BINARY_MODE(fd) \
|
|
do { \
|
|
int retVal = setmode ( fileno ( fd ), \
|
|
- O_BINARY ); \
|
|
+ O_BINARY ); \
|
|
ERROR_IF_MINUS_ONE ( retVal ); \
|
|
} while ( 0 )
|
|
|
|
-#endif
|
|
+#endif /* BZ_LCCWIN32 */
|
|
|
|
|
|
/*---------------------------------------------*/
|
|
@@ -338,6 +324,7 @@
|
|
struct { UChar b[8]; }
|
|
UInt64;
|
|
|
|
+
|
|
static
|
|
void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 )
|
|
{
|
|
@@ -351,6 +338,7 @@
|
|
n->b[0] = (UChar) (lo32 & 0xFF);
|
|
}
|
|
|
|
+
|
|
static
|
|
double uInt64_to_double ( UInt64* n )
|
|
{
|
|
@@ -364,77 +352,6 @@
|
|
return sum;
|
|
}
|
|
|
|
-static
|
|
-void uInt64_add ( UInt64* src, UInt64* dst )
|
|
-{
|
|
- Int32 i;
|
|
- Int32 carry = 0;
|
|
- for (i = 0; i < 8; i++) {
|
|
- carry += ( ((Int32)src->b[i]) + ((Int32)dst->b[i]) );
|
|
- dst->b[i] = (UChar)(carry & 0xFF);
|
|
- carry >>= 8;
|
|
- }
|
|
-}
|
|
-
|
|
-static
|
|
-void uInt64_sub ( UInt64* src, UInt64* dst )
|
|
-{
|
|
- Int32 t, i;
|
|
- Int32 borrow = 0;
|
|
- for (i = 0; i < 8; i++) {
|
|
- t = ((Int32)dst->b[i]) - ((Int32)src->b[i]) - borrow;
|
|
- if (t < 0) {
|
|
- dst->b[i] = (UChar)(t + 256);
|
|
- borrow = 1;
|
|
- } else {
|
|
- dst->b[i] = (UChar)t;
|
|
- borrow = 0;
|
|
- }
|
|
- }
|
|
-}
|
|
-
|
|
-static
|
|
-void uInt64_mul ( UInt64* a, UInt64* b, UInt64* r_hi, UInt64* r_lo )
|
|
-{
|
|
- UChar sum[16];
|
|
- Int32 ia, ib, carry;
|
|
- for (ia = 0; ia < 16; ia++) sum[ia] = 0;
|
|
- for (ia = 0; ia < 8; ia++) {
|
|
- carry = 0;
|
|
- for (ib = 0; ib < 8; ib++) {
|
|
- carry += ( ((Int32)sum[ia+ib])
|
|
- + ((Int32)a->b[ia]) * ((Int32)b->b[ib]) );
|
|
- sum[ia+ib] = (UChar)(carry & 0xFF);
|
|
- carry >>= 8;
|
|
- }
|
|
- sum[ia+8] = (UChar)(carry & 0xFF);
|
|
- if ((carry >>= 8) != 0) panic ( "uInt64_mul" );
|
|
- }
|
|
-
|
|
- for (ia = 0; ia < 8; ia++) r_hi->b[ia] = sum[ia+8];
|
|
- for (ia = 0; ia < 8; ia++) r_lo->b[ia] = sum[ia];
|
|
-}
|
|
-
|
|
-
|
|
-static
|
|
-void uInt64_shr1 ( UInt64* n )
|
|
-{
|
|
- Int32 i;
|
|
- for (i = 0; i < 8; i++) {
|
|
- n->b[i] >>= 1;
|
|
- if (i < 7 && (n->b[i+1] & 1)) n->b[i] |= 0x80;
|
|
- }
|
|
-}
|
|
-
|
|
-static
|
|
-void uInt64_shl1 ( UInt64* n )
|
|
-{
|
|
- Int32 i;
|
|
- for (i = 7; i >= 0; i--) {
|
|
- n->b[i] <<= 1;
|
|
- if (i > 0 && (n->b[i-1] & 0x80)) n->b[i]++;
|
|
- }
|
|
-}
|
|
|
|
static
|
|
Bool uInt64_isZero ( UInt64* n )
|
|
@@ -445,49 +362,23 @@
|
|
return 1;
|
|
}
|
|
|
|
-static
|
|
+
|
|
+/* Divide *n by 10, and return the remainder. */
|
|
+static
|
|
Int32 uInt64_qrm10 ( UInt64* n )
|
|
{
|
|
- /* Divide *n by 10, and return the remainder. Long division
|
|
- is difficult, so we cheat and instead multiply by
|
|
- 0xCCCC CCCC CCCC CCCD, which is 0.8 (viz, 0.1 << 3).
|
|
- */
|
|
+ UInt32 rem, tmp;
|
|
Int32 i;
|
|
- UInt64 tmp1, tmp2, n_orig, zero_point_eight;
|
|
-
|
|
- zero_point_eight.b[1] = zero_point_eight.b[2] =
|
|
- zero_point_eight.b[3] = zero_point_eight.b[4] =
|
|
- zero_point_eight.b[5] = zero_point_eight.b[6] =
|
|
- zero_point_eight.b[7] = 0xCC;
|
|
- zero_point_eight.b[0] = 0xCD;
|
|
-
|
|
- n_orig = *n;
|
|
-
|
|
- /* divide n by 10,
|
|
- by multiplying by 0.8 and then shifting right 3 times */
|
|
- uInt64_mul ( n, &zero_point_eight, &tmp1, &tmp2 );
|
|
- uInt64_shr1(&tmp1); uInt64_shr1(&tmp1); uInt64_shr1(&tmp1);
|
|
- *n = tmp1;
|
|
-
|
|
- /* tmp1 = 8*n, tmp2 = 2*n */
|
|
- uInt64_shl1(&tmp1); uInt64_shl1(&tmp1); uInt64_shl1(&tmp1);
|
|
- tmp2 = *n; uInt64_shl1(&tmp2);
|
|
-
|
|
- /* tmp1 = 10*n */
|
|
- uInt64_add ( &tmp2, &tmp1 );
|
|
-
|
|
- /* n_orig = n_orig - 10*n */
|
|
- uInt64_sub ( &tmp1, &n_orig );
|
|
-
|
|
- /* n_orig should now hold quotient, in range 0 .. 9 */
|
|
- for (i = 7; i >= 1; i--)
|
|
- if (n_orig.b[i] != 0) panic ( "uInt64_qrm10(1)" );
|
|
- if (n_orig.b[0] > 9)
|
|
- panic ( "uInt64_qrm10(2)" );
|
|
-
|
|
- return (int)n_orig.b[0];
|
|
+ rem = 0;
|
|
+ for (i = 7; i >= 0; i--) {
|
|
+ tmp = rem * 256 + n->b[i];
|
|
+ n->b[i] = tmp / 10;
|
|
+ rem = tmp % 10;
|
|
+ }
|
|
+ return rem;
|
|
}
|
|
|
|
+
|
|
/* ... and the Whole Entire Point of all this UInt64 stuff is
|
|
so that we can supply the following function.
|
|
*/
|
|
@@ -504,7 +395,8 @@
|
|
nBuf++;
|
|
} while (!uInt64_isZero(&n_copy));
|
|
outbuf[nBuf] = 0;
|
|
- for (i = 0; i < nBuf; i++) outbuf[i] = buf[nBuf-i-1];
|
|
+ for (i = 0; i < nBuf; i++)
|
|
+ outbuf[i] = buf[nBuf-i-1];
|
|
}
|
|
|
|
|
|
@@ -566,35 +458,38 @@
|
|
if (ret == EOF) goto errhandler_io;
|
|
if (zStream != stdout) {
|
|
ret = fclose ( zStream );
|
|
+ outputHandleJustInCase = NULL;
|
|
if (ret == EOF) goto errhandler_io;
|
|
}
|
|
+ outputHandleJustInCase = NULL;
|
|
if (ferror(stream)) goto errhandler_io;
|
|
ret = fclose ( stream );
|
|
if (ret == EOF) goto errhandler_io;
|
|
|
|
- if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0)
|
|
- nbytes_in_lo32 = 1;
|
|
-
|
|
if (verbosity >= 1) {
|
|
- Char buf_nin[32], buf_nout[32];
|
|
- UInt64 nbytes_in, nbytes_out;
|
|
- double nbytes_in_d, nbytes_out_d;
|
|
- uInt64_from_UInt32s ( &nbytes_in,
|
|
- nbytes_in_lo32, nbytes_in_hi32 );
|
|
- uInt64_from_UInt32s ( &nbytes_out,
|
|
- nbytes_out_lo32, nbytes_out_hi32 );
|
|
- nbytes_in_d = uInt64_to_double ( &nbytes_in );
|
|
- nbytes_out_d = uInt64_to_double ( &nbytes_out );
|
|
- uInt64_toAscii ( buf_nin, &nbytes_in );
|
|
- uInt64_toAscii ( buf_nout, &nbytes_out );
|
|
- fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, "
|
|
- "%5.2f%% saved, %s in, %s out.\n",
|
|
- nbytes_in_d / nbytes_out_d,
|
|
- (8.0 * nbytes_out_d) / nbytes_in_d,
|
|
- 100.0 * (1.0 - nbytes_out_d / nbytes_in_d),
|
|
- buf_nin,
|
|
- buf_nout
|
|
- );
|
|
+ if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0) {
|
|
+ fprintf ( stderr, " no data compressed.\n");
|
|
+ } else {
|
|
+ Char buf_nin[32], buf_nout[32];
|
|
+ UInt64 nbytes_in, nbytes_out;
|
|
+ double nbytes_in_d, nbytes_out_d;
|
|
+ uInt64_from_UInt32s ( &nbytes_in,
|
|
+ nbytes_in_lo32, nbytes_in_hi32 );
|
|
+ uInt64_from_UInt32s ( &nbytes_out,
|
|
+ nbytes_out_lo32, nbytes_out_hi32 );
|
|
+ nbytes_in_d = uInt64_to_double ( &nbytes_in );
|
|
+ nbytes_out_d = uInt64_to_double ( &nbytes_out );
|
|
+ uInt64_toAscii ( buf_nin, &nbytes_in );
|
|
+ uInt64_toAscii ( buf_nout, &nbytes_out );
|
|
+ fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, "
|
|
+ "%5.2f%% saved, %s in, %s out.\n",
|
|
+ nbytes_in_d / nbytes_out_d,
|
|
+ (8.0 * nbytes_out_d) / nbytes_in_d,
|
|
+ 100.0 * (1.0 - nbytes_out_d / nbytes_in_d),
|
|
+ buf_nin,
|
|
+ buf_nout
|
|
+ );
|
|
+ }
|
|
}
|
|
|
|
return;
|
|
@@ -652,7 +547,7 @@
|
|
|
|
while (bzerr == BZ_OK) {
|
|
nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
|
|
- if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
|
|
+ if (bzerr == BZ_DATA_ERROR_MAGIC) goto trycat;
|
|
if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0)
|
|
fwrite ( obuf, sizeof(UChar), nread, stream );
|
|
if (ferror(stream)) goto errhandler_io;
|
|
@@ -668,9 +563,9 @@
|
|
if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
|
|
|
|
if (nUnused == 0 && myfeof(zStream)) break;
|
|
-
|
|
}
|
|
|
|
+ closeok:
|
|
if (ferror(zStream)) goto errhandler_io;
|
|
ret = fclose ( zStream );
|
|
if (ret == EOF) goto errhandler_io;
|
|
@@ -680,11 +575,26 @@
|
|
if (ret != 0) goto errhandler_io;
|
|
if (stream != stdout) {
|
|
ret = fclose ( stream );
|
|
+ outputHandleJustInCase = NULL;
|
|
if (ret == EOF) goto errhandler_io;
|
|
}
|
|
+ outputHandleJustInCase = NULL;
|
|
if (verbosity >= 2) fprintf ( stderr, "\n " );
|
|
return True;
|
|
|
|
+ trycat:
|
|
+ if (forceOverwrite) {
|
|
+ rewind(zStream);
|
|
+ while (True) {
|
|
+ if (myfeof(zStream)) break;
|
|
+ nread = fread ( obuf, sizeof(UChar), 5000, zStream );
|
|
+ if (ferror(zStream)) goto errhandler_io;
|
|
+ if (nread > 0) fwrite ( obuf, sizeof(UChar), nread, stream );
|
|
+ if (ferror(stream)) goto errhandler_io;
|
|
+ }
|
|
+ goto closeok;
|
|
+ }
|
|
+
|
|
errhandler:
|
|
BZ2_bzReadClose ( &bzerr_dummy, bzf );
|
|
switch (bzerr) {
|
|
@@ -832,7 +742,7 @@
|
|
stderr,
|
|
"\nIt is possible that the compressed file(s) have become corrupted.\n"
|
|
"You can use the -tvv option to test integrity of such files.\n\n"
|
|
- "You can use the `bzip2recover' program to *attempt* to recover\n"
|
|
+ "You can use the `bzip2recover' program to attempt to recover\n"
|
|
"data from undamaged sections of corrupted files.\n\n"
|
|
);
|
|
}
|
|
@@ -855,28 +765,55 @@
|
|
static
|
|
void cleanUpAndFail ( Int32 ec )
|
|
{
|
|
- IntNative retVal;
|
|
+ IntNative retVal;
|
|
+ struct MY_STAT statBuf;
|
|
|
|
if ( srcMode == SM_F2F
|
|
&& opMode != OM_TEST
|
|
&& deleteOutputOnInterrupt ) {
|
|
- if (noisy)
|
|
- fprintf ( stderr, "%s: Deleting output file %s, if it exists.\n",
|
|
- progName, outName );
|
|
- if (outputHandleJustInCase != NULL)
|
|
- fclose ( outputHandleJustInCase );
|
|
- retVal = remove ( outName );
|
|
- if (retVal != 0)
|
|
+
|
|
+ /* Check whether input file still exists. Delete output file
|
|
+ only if input exists to avoid loss of data. Joerg Prante, 5
|
|
+ January 2002. (JRS 06-Jan-2002: other changes in 1.0.2 mean
|
|
+ this is less likely to happen. But to be ultra-paranoid, we
|
|
+ do the check anyway.) */
|
|
+ retVal = MY_STAT ( inName, &statBuf );
|
|
+ if (retVal == 0) {
|
|
+ if (noisy)
|
|
+ fprintf ( stderr,
|
|
+ "%s: Deleting output file %s, if it exists.\n",
|
|
+ progName, outName );
|
|
+ if (outputHandleJustInCase != NULL)
|
|
+ fclose ( outputHandleJustInCase );
|
|
+ retVal = remove ( outName );
|
|
+ if (retVal != 0)
|
|
+ fprintf ( stderr,
|
|
+ "%s: WARNING: deletion of output file "
|
|
+ "(apparently) failed.\n",
|
|
+ progName );
|
|
+ } else {
|
|
+ fprintf ( stderr,
|
|
+ "%s: WARNING: deletion of output file suppressed\n",
|
|
+ progName );
|
|
fprintf ( stderr,
|
|
- "%s: WARNING: deletion of output file (apparently) failed.\n",
|
|
+ "%s: since input file no longer exists. Output file\n",
|
|
+ progName );
|
|
+ fprintf ( stderr,
|
|
+ "%s: `%s' may be incomplete.\n",
|
|
+ progName, outName );
|
|
+ fprintf ( stderr,
|
|
+ "%s: I suggest doing an integrity test (bzip2 -tv)"
|
|
+ " of it.\n",
|
|
progName );
|
|
+ }
|
|
}
|
|
+
|
|
if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) {
|
|
fprintf ( stderr,
|
|
"%s: WARNING: some files have not been processed:\n"
|
|
- "\t%d specified on command line, %d not processed yet.\n\n",
|
|
- progName, numFileNames,
|
|
- numFileNames - numFilesProcessed );
|
|
+ "%s: %d specified on command line, %d not processed yet.\n\n",
|
|
+ progName, progName,
|
|
+ numFileNames, numFileNames - numFilesProcessed );
|
|
}
|
|
setExit(ec);
|
|
exit(exitValue);
|
|
@@ -915,14 +852,16 @@
|
|
static
|
|
void compressedStreamEOF ( void )
|
|
{
|
|
- fprintf ( stderr,
|
|
- "\n%s: Compressed file ends unexpectedly;\n\t"
|
|
- "perhaps it is corrupted? *Possible* reason follows.\n",
|
|
- progName );
|
|
- perror ( progName );
|
|
- showFileNames();
|
|
- cadvise();
|
|
- cleanUpAndFail( 2 );
|
|
+ if (noisy) {
|
|
+ fprintf ( stderr,
|
|
+ "\n%s: Compressed file ends unexpectedly;\n\t"
|
|
+ "perhaps it is corrupted? *Possible* reason follows.\n",
|
|
+ progName );
|
|
+ perror ( progName );
|
|
+ showFileNames();
|
|
+ cadvise();
|
|
+ }
|
|
+ cleanUpAndFail( 2 );
|
|
}
|
|
|
|
|
|
@@ -1038,6 +977,11 @@
|
|
/*--- The main driver machinery ---*/
|
|
/*---------------------------------------------------*/
|
|
|
|
+/* All rather crufty. The main problem is that input files
|
|
+ are stat()d multiple times before use. This should be
|
|
+ cleaned up.
|
|
+*/
|
|
+
|
|
/*---------------------------------------------*/
|
|
static
|
|
void pad ( Char *s )
|
|
@@ -1082,6 +1026,32 @@
|
|
|
|
|
|
/*---------------------------------------------*/
|
|
+/* Open an output file safely with O_EXCL and good permissions.
|
|
+ This avoids a race condition in versions < 1.0.2, in which
|
|
+ the file was first opened and then had its interim permissions
|
|
+ set safely. We instead use open() to create the file with
|
|
+ the interim permissions required. (--- --- rw-).
|
|
+
|
|
+ For non-Unix platforms, if we are not worrying about
|
|
+ security issues, simple this simply behaves like fopen.
|
|
+*/
|
|
+FILE* fopen_output_safely ( Char* name, const char* mode )
|
|
+{
|
|
+# if BZ_UNIX
|
|
+ FILE* fp;
|
|
+ IntNative fh;
|
|
+ fh = open(name, O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR);
|
|
+ if (fh == -1) return NULL;
|
|
+ fp = fdopen(fh, mode);
|
|
+ if (fp == NULL) close(fh);
|
|
+ return fp;
|
|
+# else
|
|
+ return fopen(name, mode);
|
|
+# endif
|
|
+}
|
|
+
|
|
+
|
|
+/*---------------------------------------------*/
|
|
/*--
|
|
if in doubt, return True
|
|
--*/
|
|
@@ -1093,7 +1063,7 @@
|
|
|
|
i = MY_LSTAT ( name, &statBuf );
|
|
if (i != 0) return True;
|
|
- if (MY_S_IFREG(statBuf.st_mode)) return False;
|
|
+ if (MY_S_ISREG(statBuf.st_mode)) return False;
|
|
return True;
|
|
}
|
|
|
|
@@ -1115,42 +1085,66 @@
|
|
|
|
|
|
/*---------------------------------------------*/
|
|
+/* Copy modification date, access date, permissions and owner from the
|
|
+ source to destination file. We have to copy this meta-info off
|
|
+ into fileMetaInfo before starting to compress / decompress it,
|
|
+ because doing it afterwards means we get the wrong access time.
|
|
+
|
|
+ To complicate matters, in compress() and decompress() below, the
|
|
+ sequence of tests preceding the call to saveInputFileMetaInfo()
|
|
+ involves calling fileExists(), which in turn establishes its result
|
|
+ by attempting to fopen() the file, and if successful, immediately
|
|
+ fclose()ing it again. So we have to assume that the fopen() call
|
|
+ does not cause the access time field to be updated.
|
|
+
|
|
+ Reading of the man page for stat() (man 2 stat) on RedHat 7.2 seems
|
|
+ to imply that merely doing open() will not affect the access time.
|
|
+ Therefore we merely need to hope that the C library only does
|
|
+ open() as a result of fopen(), and not any kind of read()-ahead
|
|
+ cleverness.
|
|
+
|
|
+ It sounds pretty fragile to me. Whether this carries across
|
|
+ robustly to arbitrary Unix-like platforms (or even works robustly
|
|
+ on this one, RedHat 7.2) is unknown to me. Nevertheless ...
|
|
+*/
|
|
+#if BZ_UNIX
|
|
+static
|
|
+struct MY_STAT fileMetaInfo;
|
|
+#endif
|
|
+
|
|
static
|
|
-void copyDatePermissionsAndOwner ( Char *srcName, Char *dstName )
|
|
+void saveInputFileMetaInfo ( Char *srcName )
|
|
{
|
|
-#if BZ_UNIX
|
|
+# if BZ_UNIX
|
|
+ IntNative retVal;
|
|
+ /* Note use of stat here, not lstat. */
|
|
+ retVal = MY_STAT( srcName, &fileMetaInfo );
|
|
+ ERROR_IF_NOT_ZERO ( retVal );
|
|
+# endif
|
|
+}
|
|
+
|
|
+
|
|
+static
|
|
+void applySavedMetaInfoToOutputFile ( Char *dstName )
|
|
+{
|
|
+# if BZ_UNIX
|
|
IntNative retVal;
|
|
- struct MY_STAT statBuf;
|
|
struct utimbuf uTimBuf;
|
|
|
|
- retVal = MY_LSTAT ( srcName, &statBuf );
|
|
- ERROR_IF_NOT_ZERO ( retVal );
|
|
- uTimBuf.actime = statBuf.st_atime;
|
|
- uTimBuf.modtime = statBuf.st_mtime;
|
|
+ uTimBuf.actime = fileMetaInfo.st_atime;
|
|
+ uTimBuf.modtime = fileMetaInfo.st_mtime;
|
|
|
|
- retVal = chmod ( dstName, statBuf.st_mode );
|
|
+ retVal = chmod ( dstName, fileMetaInfo.st_mode );
|
|
ERROR_IF_NOT_ZERO ( retVal );
|
|
|
|
retVal = utime ( dstName, &uTimBuf );
|
|
ERROR_IF_NOT_ZERO ( retVal );
|
|
|
|
- retVal = chown ( dstName, statBuf.st_uid, statBuf.st_gid );
|
|
+ retVal = chown ( dstName, fileMetaInfo.st_uid, fileMetaInfo.st_gid );
|
|
/* chown() will in many cases return with EPERM, which can
|
|
be safely ignored.
|
|
*/
|
|
-#endif
|
|
-}
|
|
-
|
|
-
|
|
-/*---------------------------------------------*/
|
|
-static
|
|
-void setInterimPermissions ( Char *dstName )
|
|
-{
|
|
-#if BZ_UNIX
|
|
- IntNative retVal;
|
|
- retVal = chmod ( dstName, S_IRUSR | S_IWUSR );
|
|
- ERROR_IF_NOT_ZERO ( retVal );
|
|
-#endif
|
|
+# endif
|
|
}
|
|
|
|
|
|
@@ -1158,10 +1152,19 @@
|
|
static
|
|
Bool containsDubiousChars ( Char* name )
|
|
{
|
|
- Bool cdc = False;
|
|
+# if BZ_UNIX
|
|
+ /* On unix, files can contain any characters and the file expansion
|
|
+ * is performed by the shell.
|
|
+ */
|
|
+ return False;
|
|
+# else /* ! BZ_UNIX */
|
|
+ /* On non-unix (Win* platforms), wildcard characters are not allowed in
|
|
+ * filenames.
|
|
+ */
|
|
for (; *name != '\0'; name++)
|
|
- if (*name == '?' || *name == '*') cdc = True;
|
|
- return cdc;
|
|
+ if (*name == '?' || *name == '*') return True;
|
|
+ return False;
|
|
+# endif /* BZ_UNIX */
|
|
}
|
|
|
|
|
|
@@ -1201,6 +1204,7 @@
|
|
FILE *inStr;
|
|
FILE *outStr;
|
|
Int32 n, i;
|
|
+ struct MY_STAT statBuf;
|
|
|
|
deleteOutputOnInterrupt = False;
|
|
|
|
@@ -1246,6 +1250,16 @@
|
|
return;
|
|
}
|
|
}
|
|
+ if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
|
|
+ MY_STAT(inName, &statBuf);
|
|
+ if ( MY_S_ISDIR(statBuf.st_mode) ) {
|
|
+ fprintf( stderr,
|
|
+ "%s: Input file %s is a directory.\n",
|
|
+ progName,inName);
|
|
+ setExit(1);
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
|
|
if (noisy)
|
|
fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
|
|
@@ -1253,11 +1267,15 @@
|
|
setExit(1);
|
|
return;
|
|
}
|
|
- if ( srcMode == SM_F2F && !forceOverwrite && fileExists ( outName ) ) {
|
|
- fprintf ( stderr, "%s: Output file %s already exists.\n",
|
|
- progName, outName );
|
|
- setExit(1);
|
|
- return;
|
|
+ if ( srcMode == SM_F2F && fileExists ( outName ) ) {
|
|
+ if (forceOverwrite) {
|
|
+ remove(outName);
|
|
+ } else {
|
|
+ fprintf ( stderr, "%s: Output file %s already exists.\n",
|
|
+ progName, outName );
|
|
+ setExit(1);
|
|
+ return;
|
|
+ }
|
|
}
|
|
if ( srcMode == SM_F2F && !forceOverwrite &&
|
|
(n=countHardLinks ( inName )) > 0) {
|
|
@@ -1267,6 +1285,12 @@
|
|
return;
|
|
}
|
|
|
|
+ if ( srcMode == SM_F2F ) {
|
|
+ /* Save the file's meta-info before we open it. Doing it later
|
|
+ means we mess up the access times. */
|
|
+ saveInputFileMetaInfo ( inName );
|
|
+ }
|
|
+
|
|
switch ( srcMode ) {
|
|
|
|
case SM_I2O:
|
|
@@ -1306,7 +1330,7 @@
|
|
|
|
case SM_F2F:
|
|
inStr = fopen ( inName, "rb" );
|
|
- outStr = fopen ( outName, "wb" );
|
|
+ outStr = fopen_output_safely ( outName, "wb" );
|
|
if ( outStr == NULL) {
|
|
fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
|
|
progName, outName, strerror(errno) );
|
|
@@ -1321,7 +1345,6 @@
|
|
setExit(1);
|
|
return;
|
|
};
|
|
- setInterimPermissions ( outName );
|
|
break;
|
|
|
|
default:
|
|
@@ -1343,7 +1366,7 @@
|
|
|
|
/*--- If there was an I/O error, we won't get here. ---*/
|
|
if ( srcMode == SM_F2F ) {
|
|
- copyDatePermissionsAndOwner ( inName, outName );
|
|
+ applySavedMetaInfoToOutputFile ( outName );
|
|
deleteOutputOnInterrupt = False;
|
|
if ( !keepInputFiles ) {
|
|
IntNative retVal = remove ( inName );
|
|
@@ -1364,6 +1387,7 @@
|
|
Int32 n, i;
|
|
Bool magicNumberOK;
|
|
Bool cantGuess;
|
|
+ struct MY_STAT statBuf;
|
|
|
|
deleteOutputOnInterrupt = False;
|
|
|
|
@@ -1405,6 +1429,16 @@
|
|
setExit(1);
|
|
return;
|
|
}
|
|
+ if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
|
|
+ MY_STAT(inName, &statBuf);
|
|
+ if ( MY_S_ISDIR(statBuf.st_mode) ) {
|
|
+ fprintf( stderr,
|
|
+ "%s: Input file %s is a directory.\n",
|
|
+ progName,inName);
|
|
+ setExit(1);
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
|
|
if (noisy)
|
|
fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
|
|
@@ -1419,11 +1453,15 @@
|
|
progName, inName, outName );
|
|
/* just a warning, no return */
|
|
}
|
|
- if ( srcMode == SM_F2F && !forceOverwrite && fileExists ( outName ) ) {
|
|
- fprintf ( stderr, "%s: Output file %s already exists.\n",
|
|
- progName, outName );
|
|
- setExit(1);
|
|
- return;
|
|
+ if ( srcMode == SM_F2F && fileExists ( outName ) ) {
|
|
+ if (forceOverwrite) {
|
|
+ remove(outName);
|
|
+ } else {
|
|
+ fprintf ( stderr, "%s: Output file %s already exists.\n",
|
|
+ progName, outName );
|
|
+ setExit(1);
|
|
+ return;
|
|
+ }
|
|
}
|
|
if ( srcMode == SM_F2F && !forceOverwrite &&
|
|
(n=countHardLinks ( inName ) ) > 0) {
|
|
@@ -1433,6 +1471,12 @@
|
|
return;
|
|
}
|
|
|
|
+ if ( srcMode == SM_F2F ) {
|
|
+ /* Save the file's meta-info before we open it. Doing it later
|
|
+ means we mess up the access times. */
|
|
+ saveInputFileMetaInfo ( inName );
|
|
+ }
|
|
+
|
|
switch ( srcMode ) {
|
|
|
|
case SM_I2O:
|
|
@@ -1463,7 +1507,7 @@
|
|
|
|
case SM_F2F:
|
|
inStr = fopen ( inName, "rb" );
|
|
- outStr = fopen ( outName, "wb" );
|
|
+ outStr = fopen_output_safely ( outName, "wb" );
|
|
if ( outStr == NULL) {
|
|
fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
|
|
progName, outName, strerror(errno) );
|
|
@@ -1478,7 +1522,6 @@
|
|
setExit(1);
|
|
return;
|
|
};
|
|
- setInterimPermissions ( outName );
|
|
break;
|
|
|
|
default:
|
|
@@ -1501,7 +1544,7 @@
|
|
/*--- If there was an I/O error, we won't get here. ---*/
|
|
if ( magicNumberOK ) {
|
|
if ( srcMode == SM_F2F ) {
|
|
- copyDatePermissionsAndOwner ( inName, outName );
|
|
+ applySavedMetaInfoToOutputFile ( outName );
|
|
deleteOutputOnInterrupt = False;
|
|
if ( !keepInputFiles ) {
|
|
IntNative retVal = remove ( inName );
|
|
@@ -1539,6 +1582,7 @@
|
|
{
|
|
FILE *inStr;
|
|
Bool allOK;
|
|
+ struct MY_STAT statBuf;
|
|
|
|
deleteOutputOnInterrupt = False;
|
|
|
|
@@ -1565,6 +1609,16 @@
|
|
setExit(1);
|
|
return;
|
|
}
|
|
+ if ( srcMode != SM_I2O ) {
|
|
+ MY_STAT(inName, &statBuf);
|
|
+ if ( MY_S_ISDIR(statBuf.st_mode) ) {
|
|
+ fprintf( stderr,
|
|
+ "%s: Input file %s is a directory.\n",
|
|
+ progName,inName);
|
|
+ setExit(1);
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
|
|
switch ( srcMode ) {
|
|
|
|
@@ -1603,6 +1657,7 @@
|
|
}
|
|
|
|
/*--- Now the input handle is sane. Do the Biz. ---*/
|
|
+ outputHandleJustInCase = NULL;
|
|
allOK = testStream ( inStr );
|
|
|
|
if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );
|
|
@@ -1619,7 +1674,7 @@
|
|
"bzip2, a block-sorting file compressor. "
|
|
"Version %s.\n"
|
|
" \n"
|
|
- " Copyright (C) 1996-2000 by Julian Seward.\n"
|
|
+ " Copyright (C) 1996-2002 by Julian Seward.\n"
|
|
" \n"
|
|
" This program is free software; you can redistribute it and/or modify\n"
|
|
" it under the terms set out in the LICENSE file, which is included\n"
|
|
@@ -1658,6 +1713,8 @@
|
|
" -V --version display software version & license\n"
|
|
" -s --small use less memory (at most 2500k)\n"
|
|
" -1 .. -9 set block size to 100k .. 900k\n"
|
|
+ " --fast alias for -1\n"
|
|
+ " --best alias for -9\n"
|
|
"\n"
|
|
" If invoked as `bzip2', default action is to compress.\n"
|
|
" as `bunzip2', default action is to decompress.\n"
|
|
@@ -1666,9 +1723,9 @@
|
|
" If no file names are given, bzip2 compresses or decompresses\n"
|
|
" from standard input to standard output. You can combine\n"
|
|
" short flags, so `-v -4' means the same as -v4 or -4v, &c.\n"
|
|
-#if BZ_UNIX
|
|
+# if BZ_UNIX
|
|
"\n"
|
|
-#endif
|
|
+# endif
|
|
,
|
|
|
|
BZ2_bzlibVersion(),
|
|
@@ -1818,11 +1875,11 @@
|
|
|
|
/*-- Set up signal handlers for mem access errors --*/
|
|
signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);
|
|
-#if BZ_UNIX
|
|
-#ifndef __DJGPP__
|
|
+# if BZ_UNIX
|
|
+# ifndef __DJGPP__
|
|
signal (SIGBUS, mySIGSEGVorSIGBUScatcher);
|
|
-#endif
|
|
-#endif
|
|
+# endif
|
|
+# endif
|
|
|
|
copyFileName ( inName, "(none)" );
|
|
copyFileName ( outName, "(none)" );
|
|
@@ -1933,6 +1990,8 @@
|
|
if (ISFLAG("--exponential")) workFactor = 1; else
|
|
if (ISFLAG("--repetitive-best")) redundant(aa->name); else
|
|
if (ISFLAG("--repetitive-fast")) redundant(aa->name); else
|
|
+ if (ISFLAG("--fast")) blockSize100k = 1; else
|
|
+ if (ISFLAG("--best")) blockSize100k = 9; else
|
|
if (ISFLAG("--verbose")) verbosity++; else
|
|
if (ISFLAG("--help")) { usage ( progName ); exit ( 0 ); }
|
|
else
|
|
Index: contrib/bzip2/bzlib.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/bzlib.c,v
|
|
retrieving revision 1.1.1.1.2.1
|
|
diff -u -r1.1.1.1.2.1 bzlib.c
|
|
--- contrib/bzip2/bzlib.c 1 Aug 2001 00:13:32 -0000 1.1.1.1.2.1
|
|
+++ contrib/bzip2/bzlib.c 22 Feb 2002 13:34:04 -0000
|
|
@@ -8,7 +8,7 @@
|
|
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.
|
|
+ Copyright (C) 1996-2002 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
|
|
@@ -93,10 +93,39 @@
|
|
"component, you should also report this bug to the author(s)\n"
|
|
"of that program. Please make an effort to report this bug;\n"
|
|
"timely and accurate bug reports eventually lead to higher\n"
|
|
- "quality software. Thanks. Julian Seward, 21 March 2000.\n\n",
|
|
+ "quality software. Thanks. Julian Seward, 30 December 2001.\n\n",
|
|
errcode,
|
|
BZ2_bzlibVersion()
|
|
);
|
|
+
|
|
+ if (errcode == 1007) {
|
|
+ fprintf(stderr,
|
|
+ "\n*** A special note about internal error number 1007 ***\n"
|
|
+ "\n"
|
|
+ "Experience suggests that a common cause of i.e. 1007\n"
|
|
+ "is unreliable memory or other hardware. The 1007 assertion\n"
|
|
+ "just happens to cross-check the results of huge numbers of\n"
|
|
+ "memory reads/writes, and so acts (unintendedly) as a stress\n"
|
|
+ "test of your memory system.\n"
|
|
+ "\n"
|
|
+ "I suggest the following: try compressing the file again,\n"
|
|
+ "possibly monitoring progress in detail with the -vv flag.\n"
|
|
+ "\n"
|
|
+ "* If the error cannot be reproduced, and/or happens at different\n"
|
|
+ " points in compression, you may have a flaky memory system.\n"
|
|
+ " Try a memory-test program. I have used Memtest86\n"
|
|
+ " (www.memtest86.com). At the time of writing it is free (GPLd).\n"
|
|
+ " Memtest86 tests memory much more thorougly than your BIOSs\n"
|
|
+ " power-on test, and may find failures that the BIOS doesn't.\n"
|
|
+ "\n"
|
|
+ "* If the error can be repeatably reproduced, this is a bug in\n"
|
|
+ " bzip2, and I would very much like to hear about it. Please\n"
|
|
+ " let me know, and, ideally, save a copy of the file causing the\n"
|
|
+ " problem -- without which I will be unable to investigate it.\n"
|
|
+ "\n"
|
|
+ );
|
|
+ }
|
|
+
|
|
exit(3);
|
|
}
|
|
#endif
|
|
@@ -1402,7 +1431,7 @@
|
|
smallMode = 1; break;
|
|
default:
|
|
if (isdigit((int)(*mode))) {
|
|
- blockSize100k = *mode-'0';
|
|
+ blockSize100k = *mode-BZ_HDR_0;
|
|
}
|
|
}
|
|
mode++;
|
|
Index: contrib/bzip2/bzlib.h
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/bzlib.h,v
|
|
retrieving revision 1.1.1.1.2.1
|
|
diff -u -r1.1.1.1.2.1 bzlib.h
|
|
--- contrib/bzip2/bzlib.h 1 Aug 2001 00:13:32 -0000 1.1.1.1.2.1
|
|
+++ contrib/bzip2/bzlib.h 22 Feb 2002 13:34:04 -0000
|
|
@@ -8,7 +8,7 @@
|
|
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.
|
|
+ Copyright (C) 1996-2002 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
|
|
@@ -110,8 +110,10 @@
|
|
#define BZ_EXPORT
|
|
#endif
|
|
|
|
+/* Need a definitition for FILE */
|
|
+#include <stdio.h>
|
|
+
|
|
#ifdef _WIN32
|
|
-# include <stdio.h>
|
|
# include <windows.h>
|
|
# ifdef small
|
|
/* windows.h define small to char */
|
|
Index: contrib/bzip2/bzlib_private.h
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/bzlib_private.h,v
|
|
retrieving revision 1.1.1.1.2.1
|
|
diff -u -r1.1.1.1.2.1 bzlib_private.h
|
|
--- contrib/bzip2/bzlib_private.h 1 Aug 2001 00:13:32 -0000 1.1.1.1.2.1
|
|
+++ contrib/bzip2/bzlib_private.h 22 Feb 2002 13:34:04 -0000
|
|
@@ -8,7 +8,7 @@
|
|
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.
|
|
+ Copyright (C) 1996-2002 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
|
|
@@ -76,7 +76,7 @@
|
|
|
|
/*-- General stuff. --*/
|
|
|
|
-#define BZ_VERSION "1.0.1, 23-June-2000"
|
|
+#define BZ_VERSION "1.0.2, 30-Dec-2001"
|
|
|
|
typedef char Char;
|
|
typedef unsigned char Bool;
|
|
@@ -137,6 +137,13 @@
|
|
#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp))
|
|
|
|
|
|
+/*-- Header bytes. --*/
|
|
+
|
|
+#define BZ_HDR_B 0x42 /* 'B' */
|
|
+#define BZ_HDR_Z 0x5a /* 'Z' */
|
|
+#define BZ_HDR_h 0x68 /* 'h' */
|
|
+#define BZ_HDR_0 0x30 /* '0' */
|
|
+
|
|
/*-- Constants for the back end. --*/
|
|
|
|
#define BZ_MAX_ALPHA_SIZE 258
|
|
Index: contrib/bzip2/compress.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/compress.c,v
|
|
retrieving revision 1.1.1.1.2.1
|
|
diff -u -r1.1.1.1.2.1 compress.c
|
|
--- contrib/bzip2/compress.c 1 Aug 2001 00:13:32 -0000 1.1.1.1.2.1
|
|
+++ contrib/bzip2/compress.c 22 Feb 2002 13:34:04 -0000
|
|
@@ -8,7 +8,7 @@
|
|
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.
|
|
+ Copyright (C) 1996-2002 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
|
|
@@ -663,10 +663,10 @@
|
|
/*-- 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) );
|
|
+ bsPutUChar ( s, BZ_HDR_B );
|
|
+ bsPutUChar ( s, BZ_HDR_Z );
|
|
+ bsPutUChar ( s, BZ_HDR_h );
|
|
+ bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );
|
|
}
|
|
|
|
if (s->nblock > 0) {
|
|
Index: contrib/bzip2/decompress.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/bzip2/decompress.c,v
|
|
retrieving revision 1.1.1.1.2.1
|
|
diff -u -r1.1.1.1.2.1 decompress.c
|
|
--- contrib/bzip2/decompress.c 1 Aug 2001 00:13:32 -0000 1.1.1.1.2.1
|
|
+++ contrib/bzip2/decompress.c 22 Feb 2002 13:34:04 -0000
|
|
@@ -8,7 +8,7 @@
|
|
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.
|
|
+ Copyright (C) 1996-2002 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
|
|
@@ -235,18 +235,18 @@
|
|
switch (s->state) {
|
|
|
|
GET_UCHAR(BZ_X_MAGIC_1, uc);
|
|
- if (uc != 'B') RETURN(BZ_DATA_ERROR_MAGIC);
|
|
+ if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);
|
|
|
|
GET_UCHAR(BZ_X_MAGIC_2, uc);
|
|
- if (uc != 'Z') RETURN(BZ_DATA_ERROR_MAGIC);
|
|
+ if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);
|
|
|
|
GET_UCHAR(BZ_X_MAGIC_3, uc)
|
|
- if (uc != 'h') RETURN(BZ_DATA_ERROR_MAGIC);
|
|
+ if (uc != BZ_HDR_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->blockSize100k < (BZ_HDR_0 + 1) ||
|
|
+ s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);
|
|
+ s->blockSize100k -= BZ_HDR_0;
|
|
|
|
if (s->smallDecompress) {
|
|
s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
|