From 1eb67a9d8f7f05ae310bc9ef297d176f3a3f8a37 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Fri, 29 Aug 1997 22:13:13 +0200 Subject: [PATCH] bzip2-0.1pl2 --- Makefile | 2 +- README | 16 ++++- README.DOS | 26 +++---- bzip2.1 | 3 + bzip2.1.preformatted | 3 + bzip2.c | 158 +++++++++++++++++++++++-------------------- bzip2.exe | Bin 45716 -> 0 bytes bzip2.txt | 3 + bzip2recover.c | 2 +- 9 files changed, 118 insertions(+), 95 deletions(-) delete mode 100644 bzip2.exe diff --git a/Makefile b/Makefile index d124743..9d35b43 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ CC = gcc SH = /bin/sh -CFLAGS = -O3 -fomit-frame-pointer -funroll-loops -Wall -Winline -W +CFLAGS = -O3 -fomit-frame-pointer -funroll-loops diff --git a/README b/README index d77830f..d58bb49 100644 --- a/README +++ b/README @@ -8,7 +8,7 @@ GREETINGS! for details, see the file LICENSE. Pointers to the algorithms used are in ALGORITHMS. Instructions for use are in bzip2.1.preformatted. - Please read this file carefully. + Please read all of this file carefully. @@ -223,7 +223,15 @@ DISCLAIMER: I very much hope the opposite is true. bzip2 has been carefully constructed and extensively tested. -End of nasty legalities. + +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. I hope you find bzip2 useful. Feel free to contact me at @@ -240,4 +248,6 @@ Manchester, UK 25 August 1996 (version 0.21) Guildford, Surrey, UK -7 August 1997 (bzip2, version 0.0) \ No newline at end of file +7 August 1997 (bzip2, version 0.1) +29 August 1997 (bzip2, version 0.1pl2) + diff --git a/README.DOS b/README.DOS index d522b81..048de8c 100644 --- a/README.DOS +++ b/README.DOS @@ -1,20 +1,16 @@ -Windows 95 & Windows NT users: +As of today (3 March 1998) I've removed the +Win95/NT executables from this distribution, sorry. -1. There's a pre-built executable, bzip2.exe, which - should work. You don't need to compile anything. - You can run the `test.bat' batch file to check - the executable is working ok, if you want. +You can still get an executable from +http://www.muraroa.demon.co.uk, or (as a last +resort) by mailing me at jseward@acm.org. -2. The control-C signal catcher seems pretty dodgy - under Windows, at least for the executable supplied. - When it catches a control-C, bzip2 tries to delete - its output file, so you don't get left with a half- - baked file. But this sometimes seems to fail - under Windows. Caveat Emptor! I think I am doing - something not-quite-right in the signal catching. - Windows-&-C gurus got any suggestions? +The reason for this change of packaging is that it +makes it easier for me to fix problems with specific +executables if they are not included in the main +distribution. - Control-C handling all seems to work fine under Unix. +J -7 Aug 97 + diff --git a/bzip2.1 b/bzip2.1 index 9094c7c..489668f 100644 --- a/bzip2.1 +++ b/bzip2.1 @@ -406,6 +406,9 @@ helpful to at least allow to decompress files created by 0.21, but this would defeat the primary aim of having a patent-free compressor. +For a more precise statement about patent issues in +bzip2, please see the README file in the distribution. + Huffman coding necessarily involves some coding inefficiency compared to arithmetic coding. This means that .I bzip2 diff --git a/bzip2.1.preformatted b/bzip2.1.preformatted index 947dc97..5206e05 100644 --- a/bzip2.1.preformatted +++ b/bzip2.1.preformatted @@ -425,6 +425,9 @@ RREELLAATTIIOONNSSHHIIPP TTOO bbzziipp--00..2211 to decompress files created by 0.21, but this would defeat the primary aim of having a patent-free compressor. + For a more precise statement about patent issues in bzip2, + please see the README file in the distribution. + Huffman coding necessarily involves some coding ineffi- ciency compared to arithmetic coding. This means that _b_z_i_p_2 compresses about 1% worse than 0.21, an unfortunate diff --git a/bzip2.c b/bzip2.c index 0fb45fb..53ce10d 100644 --- a/bzip2.c +++ b/bzip2.c @@ -5,7 +5,7 @@ /*-- This program is bzip2, a lossless, block-sorting data compressor, - version 0.1pl0, dated 17-Aug-1997. + version 0.1pl2, dated 29-Aug-1997. Copyright (C) 1996, 1997 by Julian Seward. Guildford, Surrey, UK @@ -71,6 +71,12 @@ 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. --*/ @@ -111,7 +117,6 @@ #endif #include #include -#include #include #define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); } @@ -125,6 +130,7 @@ --*/ #if BZ_UNIX + #include #include #include #include @@ -512,77 +518,77 @@ UInt32 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 + 0x00000000UL, 0x04c11db7UL, 0x09823b6eUL, 0x0d4326d9UL, + 0x130476dcUL, 0x17c56b6bUL, 0x1a864db2UL, 0x1e475005UL, + 0x2608edb8UL, 0x22c9f00fUL, 0x2f8ad6d6UL, 0x2b4bcb61UL, + 0x350c9b64UL, 0x31cd86d3UL, 0x3c8ea00aUL, 0x384fbdbdUL, + 0x4c11db70UL, 0x48d0c6c7UL, 0x4593e01eUL, 0x4152fda9UL, + 0x5f15adacUL, 0x5bd4b01bUL, 0x569796c2UL, 0x52568b75UL, + 0x6a1936c8UL, 0x6ed82b7fUL, 0x639b0da6UL, 0x675a1011UL, + 0x791d4014UL, 0x7ddc5da3UL, 0x709f7b7aUL, 0x745e66cdUL, + 0x9823b6e0UL, 0x9ce2ab57UL, 0x91a18d8eUL, 0x95609039UL, + 0x8b27c03cUL, 0x8fe6dd8bUL, 0x82a5fb52UL, 0x8664e6e5UL, + 0xbe2b5b58UL, 0xbaea46efUL, 0xb7a96036UL, 0xb3687d81UL, + 0xad2f2d84UL, 0xa9ee3033UL, 0xa4ad16eaUL, 0xa06c0b5dUL, + 0xd4326d90UL, 0xd0f37027UL, 0xddb056feUL, 0xd9714b49UL, + 0xc7361b4cUL, 0xc3f706fbUL, 0xceb42022UL, 0xca753d95UL, + 0xf23a8028UL, 0xf6fb9d9fUL, 0xfbb8bb46UL, 0xff79a6f1UL, + 0xe13ef6f4UL, 0xe5ffeb43UL, 0xe8bccd9aUL, 0xec7dd02dUL, + 0x34867077UL, 0x30476dc0UL, 0x3d044b19UL, 0x39c556aeUL, + 0x278206abUL, 0x23431b1cUL, 0x2e003dc5UL, 0x2ac12072UL, + 0x128e9dcfUL, 0x164f8078UL, 0x1b0ca6a1UL, 0x1fcdbb16UL, + 0x018aeb13UL, 0x054bf6a4UL, 0x0808d07dUL, 0x0cc9cdcaUL, + 0x7897ab07UL, 0x7c56b6b0UL, 0x71159069UL, 0x75d48ddeUL, + 0x6b93dddbUL, 0x6f52c06cUL, 0x6211e6b5UL, 0x66d0fb02UL, + 0x5e9f46bfUL, 0x5a5e5b08UL, 0x571d7dd1UL, 0x53dc6066UL, + 0x4d9b3063UL, 0x495a2dd4UL, 0x44190b0dUL, 0x40d816baUL, + 0xaca5c697UL, 0xa864db20UL, 0xa527fdf9UL, 0xa1e6e04eUL, + 0xbfa1b04bUL, 0xbb60adfcUL, 0xb6238b25UL, 0xb2e29692UL, + 0x8aad2b2fUL, 0x8e6c3698UL, 0x832f1041UL, 0x87ee0df6UL, + 0x99a95df3UL, 0x9d684044UL, 0x902b669dUL, 0x94ea7b2aUL, + 0xe0b41de7UL, 0xe4750050UL, 0xe9362689UL, 0xedf73b3eUL, + 0xf3b06b3bUL, 0xf771768cUL, 0xfa325055UL, 0xfef34de2UL, + 0xc6bcf05fUL, 0xc27dede8UL, 0xcf3ecb31UL, 0xcbffd686UL, + 0xd5b88683UL, 0xd1799b34UL, 0xdc3abdedUL, 0xd8fba05aUL, + 0x690ce0eeUL, 0x6dcdfd59UL, 0x608edb80UL, 0x644fc637UL, + 0x7a089632UL, 0x7ec98b85UL, 0x738aad5cUL, 0x774bb0ebUL, + 0x4f040d56UL, 0x4bc510e1UL, 0x46863638UL, 0x42472b8fUL, + 0x5c007b8aUL, 0x58c1663dUL, 0x558240e4UL, 0x51435d53UL, + 0x251d3b9eUL, 0x21dc2629UL, 0x2c9f00f0UL, 0x285e1d47UL, + 0x36194d42UL, 0x32d850f5UL, 0x3f9b762cUL, 0x3b5a6b9bUL, + 0x0315d626UL, 0x07d4cb91UL, 0x0a97ed48UL, 0x0e56f0ffUL, + 0x1011a0faUL, 0x14d0bd4dUL, 0x19939b94UL, 0x1d528623UL, + 0xf12f560eUL, 0xf5ee4bb9UL, 0xf8ad6d60UL, 0xfc6c70d7UL, + 0xe22b20d2UL, 0xe6ea3d65UL, 0xeba91bbcUL, 0xef68060bUL, + 0xd727bbb6UL, 0xd3e6a601UL, 0xdea580d8UL, 0xda649d6fUL, + 0xc423cd6aUL, 0xc0e2d0ddUL, 0xcda1f604UL, 0xc960ebb3UL, + 0xbd3e8d7eUL, 0xb9ff90c9UL, 0xb4bcb610UL, 0xb07daba7UL, + 0xae3afba2UL, 0xaafbe615UL, 0xa7b8c0ccUL, 0xa379dd7bUL, + 0x9b3660c6UL, 0x9ff77d71UL, 0x92b45ba8UL, 0x9675461fUL, + 0x8832161aUL, 0x8cf30badUL, 0x81b02d74UL, 0x857130c3UL, + 0x5d8a9099UL, 0x594b8d2eUL, 0x5408abf7UL, 0x50c9b640UL, + 0x4e8ee645UL, 0x4a4ffbf2UL, 0x470cdd2bUL, 0x43cdc09cUL, + 0x7b827d21UL, 0x7f436096UL, 0x7200464fUL, 0x76c15bf8UL, + 0x68860bfdUL, 0x6c47164aUL, 0x61043093UL, 0x65c52d24UL, + 0x119b4be9UL, 0x155a565eUL, 0x18197087UL, 0x1cd86d30UL, + 0x029f3d35UL, 0x065e2082UL, 0x0b1d065bUL, 0x0fdc1becUL, + 0x3793a651UL, 0x3352bbe6UL, 0x3e119d3fUL, 0x3ad08088UL, + 0x2497d08dUL, 0x2056cd3aUL, 0x2d15ebe3UL, 0x29d4f654UL, + 0xc5a92679UL, 0xc1683bceUL, 0xcc2b1d17UL, 0xc8ea00a0UL, + 0xd6ad50a5UL, 0xd26c4d12UL, 0xdf2f6bcbUL, 0xdbee767cUL, + 0xe3a1cbc1UL, 0xe760d676UL, 0xea23f0afUL, 0xeee2ed18UL, + 0xf0a5bd1dUL, 0xf464a0aaUL, 0xf9278673UL, 0xfde69bc4UL, + 0x89b8fd09UL, 0x8d79e0beUL, 0x803ac667UL, 0x84fbdbd0UL, + 0x9abc8bd5UL, 0x9e7d9662UL, 0x933eb0bbUL, 0x97ffad0cUL, + 0xafb010b1UL, 0xab710d06UL, 0xa6322bdfUL, 0xa2f33668UL, + 0xbcb4666dUL, 0xb8757bdaUL, 0xb5365d03UL, 0xb1f740b4UL }; /*---------------------------------------------*/ void initialiseCRC ( void ) { - globalCrc = 0xffffffffL; + globalCrc = 0xffffffffUL; } @@ -2579,7 +2585,7 @@ INLINE Int32 getRLEpair ( FILE* src ) /*--- Because I have no idea what kind of a value EOF is. ---*/ if (ch == EOF) { - ERROR_IF_NOT_ZERO ( errno ); + ERROR_IF_NOT_ZERO ( ferror(src)); return (1 << 16) | MY_EOF; } @@ -2595,7 +2601,7 @@ INLINE Int32 getRLEpair ( FILE* src ) if ( ungetc ( chLatest, src ) == EOF ) panic ( "getRLEpair: ungetc failed" ); } else { - ERROR_IF_NOT_ZERO ( errno ); + ERROR_IF_NOT_ZERO ( ferror(src) ); } /*--- Conditional is just a speedup hack. ---*/ @@ -3442,7 +3448,6 @@ void compress ( Char *name ) } /*--- Now the input and output handles are sane. Do the Biz. ---*/ - errno = 0; outputHandleJustInCase = outStr; compressStream ( inStr, outStr ); outputHandleJustInCase = NULL; @@ -3559,7 +3564,6 @@ void uncompress ( Char *name ) } /*--- Now the input and output handles are sane. Do the Biz. ---*/ - errno = 0; outputHandleJustInCase = outStr; magicNumberOK = uncompressStream ( inStr, outStr ); outputHandleJustInCase = NULL; @@ -3667,7 +3671,6 @@ void testf ( Char *name ) } /*--- Now the input handle is sane. Do the Biz. ---*/ - errno = 0; allOK = testStream ( inStr ); if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" ); @@ -3681,7 +3684,7 @@ void license ( void ) fprintf ( stderr, "bzip2, a block-sorting file compressor. " - "Version 0.1pl0, 17-Aug-97.\n" + "Version 0.1pl2, 29-Aug-97.\n" " \n" " Copyright (C) 1996, 1997 by Julian Seward.\n" " \n" @@ -3711,7 +3714,7 @@ void usage ( Char *fullProgName ) fprintf ( stderr, "bzip2, a block-sorting file compressor. " - "Version 0.1pl0, 17-Aug-97.\n" + "Version 0.1pl2, 29-Aug-97.\n" "\n usage: %s [flags and input files in any order]\n" "\n" " -h --help print this message\n" @@ -3864,7 +3867,6 @@ IntNative main ( IntNative argc, Char *argv[] ) tt = NULL; block = NULL; zptr = NULL; - errno = 0; smallMode = False; keepInputFiles = False; verbosity = 0; @@ -3980,6 +3982,12 @@ IntNative main ( IntNative argc, Char *argv[] ) exit ( 1 ); } + if (srcMode == SM_F2O && numFileNames == 0) { + fprintf ( stderr, "%s: -c expects at least one filename.\n", + progName ); + exit ( 1 ); + } + if (opMode == OM_TEST && srcMode == SM_F2O) { fprintf ( stderr, "%s: -c and -t cannot be used together.\n", progName ); diff --git a/bzip2.exe b/bzip2.exe deleted file mode 100644 index 4b3c4c1b4c6eed9b4dcb8bc3552938af48a93c87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45716 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 diff --git a/bzip2.txt b/bzip2.txt index 83366bc..aee8e2b 100644 --- a/bzip2.txt +++ b/bzip2.txt @@ -425,6 +425,9 @@ RELATIONSHIP TO bzip-0.21 to decompress files created by 0.21, but this would defeat the primary aim of having a patent-free compressor. + For a more precise statement about patent issues in bzip2, + please see the README file in the distribution. + Huffman coding necessarily involves some coding ineffi- ciency compared to arithmetic coding. This means that bzip2 compresses about 1% worse than 0.21, an unfortunate diff --git a/bzip2recover.c b/bzip2recover.c index efdfb3c..0eef0e6 100644 --- a/bzip2recover.c +++ b/bzip2recover.c @@ -7,7 +7,7 @@ /*-- This program is bzip2recover, a program to attempt data salvage from damaged files created by the accompanying - bzip2 program. + bzip2-0.1 program. Copyright (C) 1996, 1997 by Julian Seward. Guildford, Surrey, UK