#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <signal.h>#include <math.h>#include <errno.h>#include <ctype.h>#include "bzlib.h"#include <sys/types.h>#include <utime.h>#include <unistd.h>#include <sys/stat.h>#include <sys/times.h>Go to the source code of this file.
Compounds | |
| struct | zzzz |
Defines | |
| #define | BZ_UNIX 1 |
| #define | BZ_LCCWIN32 0 |
| #define | ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); } |
| #define | ERROR_IF_NOT_ZERO(i) { if ((i) != 0) ioError(); } |
| #define | ERROR_IF_MINUS_ONE(i) { if ((i) == (-1)) ioError(); } |
| #define | PATH_SEP '/' |
| #define | MY_LSTAT lstat |
| #define | MY_S_IFREG S_ISREG |
| #define | MY_STAT stat |
| #define | APPEND_FILESPEC(root, name) root=snocString((root), (name)) |
| #define | APPEND_FLAG(root, name) root=snocString((root), (name)) |
| #define | SET_BINARY_MODE(fd) |
| #define | NORETURN |
| #define | True ((Bool)1) |
| #define | False ((Bool)0) |
| #define | SM_I2O 1 |
| #define | SM_F2O 2 |
| #define | SM_F2F 3 |
| #define | OM_Z 1 |
| #define | OM_UNZ 2 |
| #define | OM_TEST 3 |
| #define | FILE_NAME_LEN 1034 |
| #define | BZ_N_SUFFIX_PAIRS 4 |
| #define | ISFLAG(s) (strcmp(aa->name, (s))==0) |
Typedefs | |
| typedef char | Char |
| typedef unsigned char | Bool |
| typedef unsigned char | UChar |
| typedef int | Int32 |
| typedef unsigned int | UInt32 |
| typedef short | Int16 |
| typedef unsigned short | UInt16 |
| typedef int | IntNative |
| typedef zzzz | Cell |
Functions | |
| void | panic (Char *) NORETURN |
| void | ioError (void) NORETURN |
| void | outOfMemory (void) NORETURN |
| void | blockOverrun (void) NORETURN |
| void | badBlockHeader (void) NORETURN |
| void | badBGLengths (void) NORETURN |
| void | crcError (void) NORETURN |
| void | bitStreamEOF (void) NORETURN |
| void | cleanUpAndFail (Int32) NORETURN |
| void | compressedStreamEOF (void) NORETURN |
| void | copyFileName (Char *, Char *) |
| void * | myMalloc (Int32) |
| Bool | myfeof (FILE *f) |
| void | compressStream (FILE *stream, FILE *zStream) |
| Bool | uncompressStream (FILE *zStream, FILE *stream) |
| Bool | testStream (FILE *zStream) |
| void | cadvise (void) |
| void | showFileNames (void) |
| void | mySignalCatcher (IntNative n) |
| void | mySIGSEGVorSIGBUScatcher (IntNative n) |
| void | pad (Char *s) |
| Bool | fileExists (Char *name) |
| Bool | notAStandardFile (Char *name) |
| Int32 | countHardLinks (Char *name) |
| void | copyDatePermissionsAndOwner (Char *srcName, Char *dstName) |
| void | setInterimPermissions (Char *dstName) |
| Bool | containsDubiousChars (Char *name) |
| Bool | hasSuffix (Char *s, Char *suffix) |
| Bool | mapSuffix (Char *name, Char *oldSuffix, Char *newSuffix) |
| void | compress (Char *name) |
| void | uncompress (Char *name) |
| void | testf (Char *name) |
| void | license (void) |
| void | usage (Char *fullProgName) |
| void | redundant (Char *flag) |
| Cell * | mkCell (void) |
| Cell * | snocString (Cell *root, Char *name) |
| void | addFlagsFromEnvVar (Cell **argList, Char *varName) |
| IntNative | main (IntNative argc, Char *argv[]) |
Variables | |
| Int32 | verbosity |
| Bool | keepInputFiles |
| Bool | smallMode |
| Bool | forceOverwrite |
| Bool | testFailsExist |
| Bool | noisy |
| Int32 | numFileNames |
| Int32 | numFilesProcessed |
| Int32 | blockSize100k |
| Int32 | opMode |
| Int32 | srcMode |
| Int32 | longestFileName |
| Char | inName [FILE_NAME_LEN] |
| Char | outName [FILE_NAME_LEN] |
| Char | tmpName [FILE_NAME_LEN] |
| Char * | progName |
| Char | progNameReally [FILE_NAME_LEN] |
| FILE * | outputHandleJustInCase |
| Int32 | workFactor |
| Char * | zSuffix [BZ_N_SUFFIX_PAIRS] = { ".bz2", ".bz", ".tbz2", ".tbz" } |
| Char * | unzSuffix [BZ_N_SUFFIX_PAIRS] = { "", "", ".tar", ".tar" } |
|
|
|
|
|
Definition at line 174 of file bzip2.c. Referenced by addFlagsFromEnvVar().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 150 of file bzip2.c. Referenced by compress(), copyDatePermissionsAndOwner(), setInterimPermissions(), and uncompress().
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 167 of file bzip2.c. Referenced by copyDatePermissionsAndOwner(), countHardLinks(), and notAStandardFile().
|
|
|
|
|
|
Definition at line 168 of file bzip2.c. Referenced by notAStandardFile().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 177 of file bzip2.c. Referenced by bzopen_or_bzdopen(), compressStream(), testStream(), and uncompressStream().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
Definition at line 1421 of file bzip2.c. 01422 {
01423 Int32 i, j, k;
01424 Char *envbase, *p;
01425
01426 envbase = getenv(varName);
01427 if (envbase != NULL) {
01428 p = envbase;
01429 i = 0;
01430 while (True) {
01431 if (p[i] == 0) break;
01432 p += i;
01433 i = 0;
01434 while (isspace((Int32)(p[0]))) p++;
01435 while (p[i] != 0 && !isspace((Int32)(p[i]))) i++;
01436 if (i > 0) {
01437 k = i; if (k > FILE_NAME_LEN-10) k = FILE_NAME_LEN-10;
01438 for (j = 0; j < k; j++) tmpName[j] = p[j];
01439 tmpName[k] = 0;
01440 APPEND_FLAG(*argList, tmpName);
01441 }
01442 }
01443 }
01444 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 602 of file bzip2.c. Referenced by compressedStreamEOF(), and crcError().
00603 {
00604 if (noisy)
00605 fprintf (
00606 stderr,
00607 "\nIt is possible that the compressed file(s) have become corrupted.\n"
00608 "You can use the -tvv option to test integrity of such files.\n\n"
00609 "You can use the `bzip2recover' program to *attempt* to recover\n"
00610 "data from undamaged sections of corrupted files.\n\n"
00611 );
00612 }
|
|
|
Definition at line 628 of file bzip2.c. Referenced by compressedStreamEOF(), crcError(), ioError(), outOfMemory(), and panic().
00629 {
00630 IntNative retVal;
00631
00632 if ( srcMode == SM_F2F && opMode != OM_TEST ) {
00633 if (noisy)
00634 fprintf ( stderr, "%s: Deleting output file %s, if it exists.\n",
00635 progName, outName );
00636 if (outputHandleJustInCase != NULL)
00637 fclose ( outputHandleJustInCase );
00638 retVal = remove ( outName );
00639 if (retVal != 0)
00640 fprintf ( stderr,
00641 "%s: WARNING: deletion of output file (apparently) failed.\n",
00642 progName );
00643 }
00644 if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) {
00645 fprintf ( stderr,
00646 "%s: WARNING: some files have not been processed:\n"
00647 "\t%d specified on command line, %d not processed yet.\n\n",
00648 progName, numFileNames,
00649 numFileNames - numFilesProcessed );
00650 }
00651 exit ( ec );
00652 }
|
|
|
Definition at line 909 of file bzip2.c. 00910 {
00911 FILE *inStr;
00912 FILE *outStr;
00913 Int32 n, i;
00914 if (name == NULL && srcMode != SM_I2O)
00915 panic ( "compress: bad modes\n" );
00916
00917 switch (srcMode) {
00918 case SM_I2O:
00919 copyFileName ( inName, "(stdin)" );
00920 copyFileName ( outName, "(stdout)" );
00921 break;
00922 case SM_F2F:
00923 copyFileName ( inName, name );
00924 copyFileName ( outName, name );
00925 strcat ( outName, ".bz2" );
00926 break;
00927 case SM_F2O:
00928 copyFileName ( inName, name );
00929 copyFileName ( outName, "(stdout)" );
00930 break;
00931 }
00932
00933 if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
00934 if (noisy)
00935 fprintf ( stderr, "%s: There are no files matching `%s'.\n",
00936 progName, inName );
00937 return;
00938 }
00939 if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
00940 fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
00941 progName, inName, strerror(errno) );
00942 return;
00943 }
00944 for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) {
00945 if (hasSuffix(inName, zSuffix[i])) {
00946 if (noisy)
00947 fprintf ( stderr,
00948 "%s: Input file %s already has %s suffix.\n",
00949 progName, inName, zSuffix[i] );
00950 return;
00951 }
00952 }
00953 if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
00954 if (noisy)
00955 fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
00956 progName, inName );
00957 return;
00958 }
00959 if ( srcMode == SM_F2F && !forceOverwrite && fileExists ( outName ) ) {
00960 fprintf ( stderr, "%s: Output file %s already exists.\n",
00961 progName, outName );
00962 return;
00963 }
00964 if ( srcMode == SM_F2F && !forceOverwrite &&
00965 (n=countHardLinks ( inName )) > 0) {
00966 fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
00967 progName, inName, n, n > 1 ? "s" : "" );
00968 return;
00969 }
00970
00971 switch ( srcMode ) {
00972
00973 case SM_I2O:
00974 inStr = stdin;
00975 outStr = stdout;
00976 /*
00977 if ( isatty ( fileno ( stdout ) ) ) {
00978 fprintf ( stderr,
00979 "%s: I won't write compressed data to a terminal.\n",
00980 progName );
00981 fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
00982 progName, progName );
00983 return;
00984 };
00985 */
00986 break;
00987
00988 case SM_F2O:
00989 inStr = fopen ( inName, "rb" );
00990 outStr = stdout;
00991 /*
00992 if ( isatty ( fileno ( stdout ) ) ) {
00993 fprintf ( stderr,
00994 "%s: I won't write compressed data to a terminal.\n",
00995 progName );
00996 fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
00997 progName, progName );
00998 if ( inStr != NULL ) fclose ( inStr );
00999 return;
01000 };
01001 */
01002 if ( inStr == NULL ) {
01003 fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
01004 progName, inName, strerror(errno) );
01005 return;
01006 };
01007 break;
01008
01009 case SM_F2F:
01010 inStr = fopen ( inName, "rb" );
01011 outStr = fopen ( outName, "wb" );
01012 if ( outStr == NULL) {
01013 fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
01014 progName, outName, strerror(errno) );
01015 if ( inStr != NULL ) fclose ( inStr );
01016 return;
01017 }
01018 if ( inStr == NULL ) {
01019 fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
01020 progName, inName, strerror(errno) );
01021 if ( outStr != NULL ) fclose ( outStr );
01022 return;
01023 };
01024 setInterimPermissions ( outName );
01025 break;
01026
01027 default:
01028 panic ( "compress: bad srcMode" );
01029 break;
01030 }
01031
01032 if (verbosity >= 1) {
01033 fprintf ( stderr, " %s: ", inName );
01034 pad ( inName );
01035 fflush ( stderr );
01036 }
01037
01038 /*--- Now the input and output handles are sane. Do the Biz. ---*/
01039 outputHandleJustInCase = outStr;
01040 compressStream ( inStr, outStr );
01041 outputHandleJustInCase = NULL;
01042
01043 /*--- If there was an I/O error, we won't get here. ---*/
01044 if ( srcMode == SM_F2F ) {
01045 copyDatePermissionsAndOwner ( inName, outName );
01046 if ( !keepInputFiles ) {
01047 IntNative retVal = remove ( inName );
01048 ERROR_IF_NOT_ZERO ( retVal );
01049 }
01050 }
01051 }
|
|
||||||||||||
|
Definition at line 340 of file bzip2.c. Referenced by compress().
00341 {
00342 BZFILE* bzf = NULL;
00343 UChar ibuf[5000];
00344 Int32 nIbuf;
00345 UInt32 nbytes_in, nbytes_out;
00346 Int32 bzerr, bzerr_dummy, ret;
00347
00348 SET_BINARY_MODE(stream);
00349 SET_BINARY_MODE(zStream);
00350
00351 if (ferror(stream)) goto errhandler_io;
00352 if (ferror(zStream)) goto errhandler_io;
00353
00354 bzf = bzWriteOpen ( &bzerr, zStream,
00355 blockSize100k, verbosity, workFactor );
00356 if (bzerr != BZ_OK) goto errhandler;
00357
00358 if (verbosity >= 2) fprintf ( stderr, "\n" );
00359
00360 while (True) {
00361
00362 if (myfeof(stream)) break;
00363 nIbuf = fread ( ibuf, sizeof(UChar), 5000, stream );
00364 if (ferror(stream)) goto errhandler_io;
00365 if (nIbuf > 0) bzWrite ( &bzerr, bzf, (void*)ibuf, nIbuf );
00366 if (bzerr != BZ_OK) goto errhandler;
00367
00368 }
00369
00370 bzWriteClose ( &bzerr, bzf, 0, &nbytes_in, &nbytes_out );
00371 if (bzerr != BZ_OK) goto errhandler;
00372
00373 if (ferror(zStream)) goto errhandler_io;
00374 ret = fflush ( zStream );
00375 if (ret == EOF) goto errhandler_io;
00376 if (zStream != stdout) {
00377 ret = fclose ( zStream );
00378 if (ret == EOF) goto errhandler_io;
00379 }
00380 if (ferror(stream)) goto errhandler_io;
00381 ret = fclose ( stream );
00382 if (ret == EOF) goto errhandler_io;
00383
00384 if (nbytes_in == 0) nbytes_in = 1;
00385
00386 if (verbosity >= 1)
00387 fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, "
00388 "%5.2f%% saved, %d in, %d out.\n",
00389 (float)nbytes_in / (float)nbytes_out,
00390 (8.0 * (float)nbytes_out) / (float)nbytes_in,
00391 100.0 * (1.0 - (float)nbytes_out / (float)nbytes_in),
00392 nbytes_in,
00393 nbytes_out
00394 );
00395
00396 return;
00397
00398 errhandler:
00399 bzWriteClose ( &bzerr_dummy, bzf, 1, &nbytes_in, &nbytes_out );
00400 switch (bzerr) {
00401 case BZ_MEM_ERROR:
00402 outOfMemory ();
00403 case BZ_IO_ERROR:
00404 errhandler_io:
00405 ioError(); break;
00406 default:
00407 panic ( "compress:unexpected error" );
00408 }
00409
00410 panic ( "compress:end" );
00411 /*notreached*/
00412 }
|
|
|
Definition at line 682 of file bzip2.c. Referenced by uncompressStream().
00683 {
00684 fprintf ( stderr,
00685 "\n%s: Compressed file ends unexpectedly;\n\t"
00686 "perhaps it is corrupted? *Possible* reason follows.\n",
00687 progName );
00688 perror ( progName );
00689 showFileNames();
00690 cadvise();
00691 cleanUpAndFail( 2 );
00692 }
|
|
|
Definition at line 872 of file bzip2.c. Referenced by compress(), testf(), and uncompress().
00873 {
00874 Bool cdc = False;
00875 for (; *name != '\0'; name++)
00876 if (*name == '?' || *name == '*') cdc = True;
00877 return cdc;
00878 }
|
|
||||||||||||
|
Definition at line 834 of file bzip2.c. Referenced by compress(), and uncompress().
00835 {
00836 #if BZ_UNIX
00837 IntNative retVal;
00838 struct MY_STAT statBuf;
00839 struct utimbuf uTimBuf;
00840
00841 retVal = MY_LSTAT ( srcName, &statBuf );
00842 ERROR_IF_NOT_ZERO ( retVal );
00843 uTimBuf.actime = statBuf.st_atime;
00844 uTimBuf.modtime = statBuf.st_mtime;
00845
00846 retVal = chmod ( dstName, statBuf.st_mode );
00847 ERROR_IF_NOT_ZERO ( retVal );
00848
00849 retVal = utime ( dstName, &uTimBuf );
00850 ERROR_IF_NOT_ZERO ( retVal );
00851
00852 retVal = chown ( dstName, statBuf.st_uid, statBuf.st_gid );
00853 /* chown() will in many cases return with EPERM, which can
00854 be safely ignored.
00855 */
00856 #endif
00857 }
|
|
||||||||||||
|
Definition at line 774 of file bzip2.c. Referenced by compress(), testf(), and uncompress().
00775 {
00776 if ( strlen(from) > FILE_NAME_LEN-10 ) {
00777 fprintf (
00778 stderr,
00779 "bzip2: file name\n`%s'\n"
00780 "is suspiciously (more than %d chars) long.\n"
00781 "Try using a reasonable file name instead. Sorry! :-)\n",
00782 from, FILE_NAME_LEN-10
00783 );
00784 exit(1);
00785 }
00786
00787 strncpy(to,from,FILE_NAME_LEN-10);
00788 to[FILE_NAME_LEN-10]='\0';
00789 }
|
|
|
Definition at line 822 of file bzip2.c. Referenced by compress(), and uncompress().
|
|
|
Definition at line 670 of file bzip2.c. Referenced by uncompressStream().
00671 {
00672 fprintf ( stderr,
00673 "\n%s: Data integrity error when decompressing.\n",
00674 progName );
00675 showFileNames();
00676 cadvise();
00677 cleanUpAndFail( 2 );
00678 }
|
|
|
Definition at line 793 of file bzip2.c. Referenced by compress(), testf(), and uncompress().
00794 {
00795 FILE *tmp = fopen ( name, "rb" );
00796 Bool exists = (tmp != NULL);
00797 if (tmp != NULL) fclose ( tmp );
00798 return exists;
00799 }
|
|
||||||||||||
|
Definition at line 889 of file bzip2.c. Referenced by compress(), and mapSuffix().
00890 {
00891 Int32 ns = strlen(s);
00892 Int32 nx = strlen(suffix);
00893 if (ns < nx) return False;
00894 if (strcmp(s + ns - nx, suffix) == 0) return True;
00895 return False;
00896 }
|
|
|
Definition at line 696 of file bzip2.c. Referenced by compressStream(), testStream(), and uncompressStream().
00697 {
00698 fprintf ( stderr,
00699 "\n%s: I/O or other error, bailing out. Possible reason follows.\n",
00700 progName );
00701 perror ( progName );
00702 showFileNames();
00703 cleanUpAndFail( 1 );
00704 }
|
|
|
Definition at line 1285 of file bzip2.c. 01286 {
01287 fprintf ( stderr,
01288
01289 "bzip2, a block-sorting file compressor. "
01290 "Version 0.9.5c, 9-Aug-99.\n"
01291 " \n"
01292 " Copyright (C) 1996, 1997, 1998, 1999 by Julian Seward.\n"
01293 " \n"
01294 " This program is free software; you can redistribute it and/or modify\n"
01295 " it under the terms set out in the LICENSE file, which is included\n"
01296 " in the bzip2-0.9.5 source distribution.\n"
01297 " \n"
01298 " This program is distributed in the hope that it will be useful,\n"
01299 " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
01300 " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
01301 " LICENSE file for more details.\n"
01302 " \n"
01303 );
01304 }
|
|
||||||||||||
|
Definition at line 1453 of file bzip2.c. 01455 {
01456 Int32 i, j;
01457 Char *tmp;
01458 Cell *argList;
01459 Cell *aa;
01460 Bool decode;
01461 clock_t c1,c2;
01462
01463 /*-- Be really really really paranoid :-) --*/
01464 if (sizeof(Int32) != 4 || sizeof(UInt32) != 4 ||
01465 sizeof(Int16) != 2 || sizeof(UInt16) != 2 ||
01466 sizeof(Char) != 1 || sizeof(UChar) != 1) {
01467 fprintf ( stderr,
01468 "bzip2: I'm not configured correctly for this platform!\n"
01469 "\tI require Int32, Int16 and Char to have sizes\n"
01470 "\tof 4, 2 and 1 bytes to run properly, and they don't.\n"
01471 "\tProbably you can fix this by defining them correctly,\n"
01472 "\tand recompiling. Bye!\n" );
01473 exit(3);
01474 }
01475
01476
01477 /*-- Initialise --*/
01478 outputHandleJustInCase = NULL;
01479 smallMode = False;
01480 keepInputFiles = False;
01481 forceOverwrite = False;
01482 noisy = True;
01483 verbosity = 0;
01484 blockSize100k = 9;
01485 testFailsExist = False;
01486 numFileNames = 0;
01487 numFilesProcessed = 0;
01488 workFactor = 30;
01489 i = j = 0; /* avoid bogus warning from egcs-1.1.X */
01490
01491 /*-- Set up signal handlers for mem access errors --*/
01492 signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);
01493 #if BZ_UNIX
01494 #ifndef __DJGPP__
01495 signal (SIGBUS, mySIGSEGVorSIGBUScatcher);
01496 #endif
01497 #endif
01498
01499 copyFileName ( inName, "(none)" );
01500 copyFileName ( outName, "(none)" );
01501
01502 copyFileName ( progNameReally, argv[0] );
01503 progName = &progNameReally[0];
01504 for (tmp = &progNameReally[0]; *tmp != '\0'; tmp++)
01505 if (*tmp == PATH_SEP) progName = tmp + 1;
01506
01507
01508 /*-- Copy flags from env var BZIP2, and
01509 expand filename wildcards in arg list.
01510 --*/
01511 argList = NULL;
01512 addFlagsFromEnvVar ( &argList, "BZIP2" );
01513 addFlagsFromEnvVar ( &argList, "BZIP" );
01514 for (i = 1; i <= argc-1; i++)
01515 APPEND_FILESPEC(argList, argv[i]);
01516
01517
01518 /*-- Find the length of the longest filename --*/
01519 longestFileName = 7;
01520 numFileNames = 0;
01521 decode = True;
01522 for (aa = argList; aa != NULL; aa = aa->link) {
01523 if (ISFLAG("--")) { decode = False; continue; }
01524 if (aa->name[0] == '-' && decode) continue;
01525 numFileNames++;
01526 if (longestFileName < (Int32)strlen(aa->name) )
01527 longestFileName = (Int32)strlen(aa->name);
01528 }
01529
01530
01531 /*-- Determine source modes; flag handling may change this too. --*/
01532 if (numFileNames == 0)
01533 srcMode = SM_I2O; else srcMode = SM_F2F;
01534
01535
01536 /*-- Determine what to do (compress/uncompress/test/cat). --*/
01537 /*-- Note that subsequent flag handling may change this. --*/
01538 opMode = OM_Z;
01539
01540 if ( (strstr ( progName, "unzip" ) != 0) ||
01541 (strstr ( progName, "UNZIP" ) != 0) )
01542 opMode = OM_UNZ;
01543
01544 if ( (strstr ( progName, "z2cat" ) != 0) ||
01545 (strstr ( progName, "Z2CAT" ) != 0) ||
01546 (strstr ( progName, "zcat" ) != 0) ||
01547 (strstr ( progName, "ZCAT" ) != 0) ) {
01548 opMode = OM_UNZ;
01549 srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O;
01550 }
01551
01552
01553 /*-- Look at the flags. --*/
01554 for (aa = argList; aa != NULL; aa = aa->link) {
01555 if (ISFLAG("--")) break;
01556 if (aa->name[0] == '-' && aa->name[1] != '-') {
01557 for (j = 1; aa->name[j] != '\0'; j++) {
01558 switch (aa->name[j]) {
01559 case 'c': srcMode = SM_F2O; break;
01560 case 'd': opMode = OM_UNZ; break;
01561 case 'z': opMode = OM_Z; break;
01562 case 'f': forceOverwrite = True; break;
01563 case 't': opMode = OM_TEST; break;
01564 case 'k': keepInputFiles = True; break;
01565 case 's': smallMode = True; break;
01566 case 'q': noisy = False; break;
01567 case '1': blockSize100k = 1; break;
01568 case '2': blockSize100k = 2; break;
01569 case '3': blockSize100k = 3; break;
01570 case '4': blockSize100k = 4; break;
01571 case '5': blockSize100k = 5; break;
01572 case '6': blockSize100k = 6; break;
01573 case '7': blockSize100k = 7; break;
01574 case '8': blockSize100k = 8; break;
01575 case '9': blockSize100k = 9; break;
01576 case 'V':
01577 case 'L': license(); break;
01578 case 'v': verbosity++; break;
01579 case 'h': usage ( progName );
01580 exit ( 0 );
01581 break;
01582 default: fprintf ( stderr, "%s: Bad flag `%s'\n",
01583 progName, aa->name );
01584 usage ( progName );
01585 exit ( 1 );
01586 break;
01587 }
01588 }
01589 }
01590 }
01591
01592 /*-- And again ... --*/
01593 for (aa = argList; aa != NULL; aa = aa->link) {
01594 if (ISFLAG("--")) break;
01595 if (ISFLAG("--stdout")) srcMode = SM_F2O; else
01596 if (ISFLAG("--decompress")) opMode = OM_UNZ; else
01597 if (ISFLAG("--compress")) opMode = OM_Z; else
01598 if (ISFLAG("--force")) forceOverwrite = True; else
01599 if (ISFLAG("--test")) opMode = OM_TEST; else
01600 if (ISFLAG("--keep")) keepInputFiles = True; else
01601 if (ISFLAG("--small")) smallMode = True; else
01602 if (ISFLAG("--quiet")) noisy = False; else
01603 if (ISFLAG("--version")) license(); else
01604 if (ISFLAG("--license")) license(); else
01605 if (ISFLAG("--exponential")) workFactor = 1; else
01606 if (ISFLAG("--repetitive-best")) redundant(aa->name); else
01607 if (ISFLAG("--repetitive-fast")) redundant(aa->name); else
01608 if (ISFLAG("--verbose")) verbosity++; else
01609 if (ISFLAG("--help")) { usage ( progName ); exit ( 0 ); }
01610 else
01611 if (strncmp ( aa->name, "--", 2) == 0) {
01612 fprintf ( stderr, "%s: Bad flag `%s'\n", progName, aa->name );
01613 usage ( progName );
01614 exit ( 1 );
01615 }
01616 }
01617
01618 if (verbosity > 4) verbosity = 4;
01619 if (opMode == OM_Z && smallMode && blockSize100k > 2)
01620 blockSize100k = 2;
01621
01622 if (opMode == OM_TEST && srcMode == SM_F2O) {
01623 fprintf ( stderr, "%s: -c and -t cannot be used together.\n",
01624 progName );
01625 exit ( 1 );
01626 }
01627
01628 if (srcMode == SM_F2O && numFileNames == 0)
01629 srcMode = SM_I2O;
01630
01631 if (opMode != OM_Z) blockSize100k = 0;
01632
01633 if (srcMode == SM_F2F) {
01634 signal (SIGINT, mySignalCatcher);
01635 signal (SIGTERM, mySignalCatcher);
01636 # if BZ_UNIX
01637 signal (SIGHUP, mySignalCatcher);
01638 # endif
01639 }
01640
01641 c1=clock();
01642
01643 if (opMode == OM_Z) {
01644 if (srcMode == SM_I2O) {
01645 compress ( NULL );
01646 } else {
01647 decode = True;
01648 for (aa = argList; aa != NULL; aa = aa->link) {
01649 if (ISFLAG("--")) { decode = False; continue; }
01650 if (aa->name[0] == '-' && decode) continue;
01651 numFilesProcessed++;
01652 compress ( aa->name );
01653 }
01654 }
01655 }
01656 else
01657
01658 if (opMode == OM_UNZ) {
01659 if (srcMode == SM_I2O) {
01660 uncompress ( NULL );
01661 } else {
01662 decode = True;
01663 for (aa = argList; aa != NULL; aa = aa->link) {
01664 if (ISFLAG("--")) { decode = False; continue; }
01665 if (aa->name[0] == '-' && decode) continue;
01666 numFilesProcessed++;
01667 uncompress ( aa->name );
01668 }
01669 }
01670 }
01671
01672 else {
01673 testFailsExist = False;
01674 if (srcMode == SM_I2O) {
01675 testf ( NULL );
01676 } else {
01677 decode = True;
01678 for (aa = argList; aa != NULL; aa = aa->link) {
01679 if (ISFLAG("--")) { decode = False; continue; }
01680 if (aa->name[0] == '-' && decode) continue;
01681 numFilesProcessed++;
01682 testf ( aa->name );
01683 }
01684 }
01685 if (testFailsExist && noisy) {
01686 fprintf ( stderr,
01687 "\n"
01688 "You can use the `bzip2recover' program to attempt to recover\n"
01689 "data from undamaged sections of corrupted files.\n\n"
01690 );
01691 exit(2);
01692 }
01693 }
01694
01695 /* Free the argument list memory to mollify leak detectors
01696 (eg) Purify, Checker. Serves no other useful purpose.
01697 */
01698 aa = argList;
01699 while (aa != NULL) {
01700 Cell* aa2 = aa->link;
01701 if (aa->name) free(aa->name);
01702 free(aa);
01703 aa = aa2;
01704 }
01705
01706 c2=clock();
01707 printf("Time: %f\n",((float)c2-(float)c1)/(float)CLOCKS_PER_SEC);
01708
01709 return 0;
01710 }
|
|
||||||||||||||||
|
Definition at line 898 of file bzip2.c. Referenced by uncompress().
00900 {
00901 if (!hasSuffix(name,oldSuffix)) return False;
00902 name[strlen(name)-strlen(oldSuffix)] = 0;
00903 strcat ( name, newSuffix );
00904 return True;
00905 }
|
|
|
Definition at line 1392 of file bzip2.c. Referenced by snocString().
|
|
|
Definition at line 1381 of file bzip2.c. Referenced by mkCell(), and snocString().
01382 {
01383 void* p;
01384
01385 p = malloc ( (size_t)n );
01386 if (p == NULL) outOfMemory ();
01387 return p;
01388 }
|
|
|
Definition at line 725 of file bzip2.c. 00727 {
00728 if (opMode == OM_Z)
00729 fprintf ( stderr,
00730 "\n%s: Caught a SIGSEGV or SIGBUS whilst compressing,\n"
00731 "\twhich probably indicates a bug in bzip2. Please\n"
00732 "\treport it to me at: jseward@acm.org\n",
00733 progName );
00734 else
00735 fprintf ( stderr,
00736 "\n%s: Caught a SIGSEGV or SIGBUS whilst decompressing,\n"
00737 "\twhich probably indicates that the compressed data\n"
00738 "\tis corrupted.\n",
00739 progName );
00740
00741 showFileNames();
00742 if (opMode == OM_Z)
00743 cleanUpAndFail( 3 ); else
00744 { cadvise(); cleanUpAndFail( 2 ); }
00745 }
|
|
|
Definition at line 711 of file bzip2.c. 00713 {
00714 fprintf ( stderr,
00715 "\n%s: Control-C or similar caught, quitting.\n",
00716 progName );
00717 cleanUpAndFail(1);
00718 }
|
|
|
|
|
|
Definition at line 806 of file bzip2.c. Referenced by compress(), and uncompress().
00807 {
00808 IntNative i;
00809 struct MY_STAT statBuf;
00810
00811 i = MY_LSTAT ( name, &statBuf );
00812 if (i != 0) return True;
00813 if (MY_S_IFREG(statBuf.st_mode)) return False;
00814 return True;
00815 }
|
|
|
Definition at line 749 of file bzip2.c. Referenced by compressStream(), myMalloc(), testStream(), and uncompressStream().
00750 {
00751 fprintf ( stderr,
00752 "\n%s: couldn't allocate enough memory\n",
00753 progName );
00754 showFileNames();
00755 cleanUpAndFail(1);
00756 }
|
|
|
Definition at line 764 of file bzip2.c. Referenced by compress(), testf(), and uncompress().
00765 {
00766 Int32 i;
00767 if ( (Int32)strlen(s) >= longestFileName ) return;
00768 for (i = 1; i <= longestFileName - (Int32)strlen(s); i++)
00769 fprintf ( stderr, " " );
00770 }
|
|
|
Definition at line 656 of file bzip2.c. Referenced by compress(), compressStream(), testStream(), testf(), uncompress(), and uncompressStream().
00657 {
00658 fprintf ( stderr,
00659 "\n%s: PANIC -- internal consistency error:\n"
00660 "\t%s\n"
00661 "\tThis is a BUG. Please report it to me at:\n"
00662 "\tjseward@acm.org\n",
00663 progName, s );
00664 showFileNames();
00665 cleanUpAndFail( 3 );
00666 }
|
|
|
Definition at line 1348 of file bzip2.c. 01349 {
01350 fprintf (
01351 stderr,
01352 "%s: %s is redundant in versions 0.9.5 and above\n",
01353 progName, flag );
01354 }
|
|
|
Definition at line 861 of file bzip2.c. Referenced by compress(), and uncompress().
00862 {
00863 #if BZ_UNIX
00864 IntNative retVal;
00865 retVal = chmod ( dstName, S_IRUSR | S_IWUSR );
00866 ERROR_IF_NOT_ZERO ( retVal );
00867 #endif
00868 }
|
|
|
Definition at line 616 of file bzip2.c. Referenced by compressedStreamEOF(), crcError(), ioError(), outOfMemory(), and panic().
|
|
||||||||||||
|
Definition at line 1404 of file bzip2.c. 01405 {
01406 if (root == NULL) {
01407 Cell *tmp = mkCell();
01408 tmp->name = (Char*) myMalloc ( 5 + strlen(name) );
01409 strcpy ( tmp->name, name );
01410 return tmp;
01411 } else {
01412 Cell *tmp = root;
01413 while (tmp->link != NULL) tmp = tmp->link;
01414 tmp->link = snocString ( tmp->link, name );
01415 return root;
01416 }
01417 }
|
|
|
Definition at line 511 of file bzip2.c. Referenced by testf().
00512 {
00513 BZFILE* bzf = NULL;
00514 Int32 bzerr, bzerr_dummy, ret, nread, streamNo, i;
00515 UChar obuf[5000];
00516 UChar unused[BZ_MAX_UNUSED];
00517 Int32 nUnused;
00518 UChar* unusedTmp;
00519
00520 nUnused = 0;
00521 streamNo = 0;
00522
00523 SET_BINARY_MODE(zStream);
00524 if (ferror(zStream)) goto errhandler_io;
00525
00526 while (True) {
00527
00528 bzf = bzReadOpen (
00529 &bzerr, zStream, verbosity,
00530 (int)smallMode, unused, nUnused
00531 );
00532 if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
00533 streamNo++;
00534
00535 while (bzerr == BZ_OK) {
00536 nread = bzRead ( &bzerr, bzf, obuf, 5000 );
00537 if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
00538 }
00539 if (bzerr != BZ_STREAM_END) goto errhandler;
00540
00541 bzReadGetUnused ( &bzerr, bzf, (void**)(&unusedTmp), &nUnused );
00542 if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
00543
00544 for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
00545
00546 bzReadClose ( &bzerr, bzf );
00547 if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
00548 if (nUnused == 0 && myfeof(zStream)) break;
00549
00550 }
00551
00552 if (ferror(zStream)) goto errhandler_io;
00553 ret = fclose ( zStream );
00554 if (ret == EOF) goto errhandler_io;
00555
00556 if (verbosity >= 2) fprintf ( stderr, "\n " );
00557 return True;
00558
00559 errhandler:
00560 bzReadClose ( &bzerr_dummy, bzf );
00561 if (verbosity == 0)
00562 fprintf ( stderr, "%s: %s: ", progName, inName );
00563 switch (bzerr) {
00564 case BZ_IO_ERROR:
00565 errhandler_io:
00566 ioError(); break;
00567 case BZ_DATA_ERROR:
00568 fprintf ( stderr,
00569 "data integrity (CRC) error in data\n" );
00570 return False;
00571 case BZ_MEM_ERROR:
00572 outOfMemory();
00573 case BZ_UNEXPECTED_EOF:
00574 fprintf ( stderr,
00575 "file ends unexpectedly\n" );
00576 return False;
00577 case BZ_DATA_ERROR_MAGIC:
00578 if (streamNo == 1) {
00579 fprintf ( stderr,
00580 "bad magic number (file not created by bzip2)\n" );
00581 return False;
00582 } else {
00583 if (noisy)
00584 fprintf ( stderr,
00585 "trailing garbage after EOF ignored\n" );
00586 return True;
00587 }
00588 default:
00589 panic ( "test:unexpected error" );
00590 }
00591
00592 panic ( "test:end" );
00593 return True; /*notreached*/
00594 }
|
|
|
Definition at line 1215 of file bzip2.c. 01216 {
01217 FILE *inStr;
01218 Bool allOK;
01219
01220 if (name == NULL && srcMode != SM_I2O)
01221 panic ( "testf: bad modes\n" );
01222
01223 copyFileName ( outName, "(none)" );
01224 switch (srcMode) {
01225 case SM_I2O: copyFileName ( inName, "(stdin)" ); break;
01226 case SM_F2F: copyFileName ( inName, name ); break;
01227 case SM_F2O: copyFileName ( inName, name ); break;
01228 }
01229
01230 if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
01231 if (noisy)
01232 fprintf ( stderr, "%s: There are no files matching `%s'.\n",
01233 progName, inName );
01234 return;
01235 }
01236 if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
01237 fprintf ( stderr, "%s: Can't open input %s: %s.\n",
01238 progName, inName, strerror(errno) );
01239 return;
01240 }
01241
01242 switch ( srcMode ) {
01243
01244 case SM_I2O:
01245 if ( isatty ( fileno ( stdin ) ) ) {
01246 fprintf ( stderr,
01247 "%s: I won't read compressed data from a terminal.\n",
01248 progName );
01249 fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
01250 progName, progName );
01251 return;
01252 };
01253 inStr = stdin;
01254 break;
01255
01256 case SM_F2O: case SM_F2F:
01257 inStr = fopen ( inName, "rb" );
01258 if ( inStr == NULL ) {
01259 fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
01260 progName, inName, strerror(errno) );
01261 return;
01262 };
01263 break;
01264
01265 default:
01266 panic ( "testf: bad srcMode" );
01267 break;
01268 }
01269
01270 if (verbosity >= 1) {
01271 fprintf ( stderr, " %s: ", inName );
01272 pad ( inName );
01273 fflush ( stderr );
01274 }
01275
01276 /*--- Now the input handle is sane. Do the Biz. ---*/
01277 allOK = testStream ( inStr );
01278
01279 if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );
01280 if (!allOK) testFailsExist = True;
01281 }
|
|
|
Definition at line 1055 of file bzip2.c. 01056 {
01057 FILE *inStr;
01058 FILE *outStr;
01059 Int32 n, i;
01060 Bool magicNumberOK;
01061 Bool cantGuess;
01062
01063 if (name == NULL && srcMode != SM_I2O)
01064 panic ( "uncompress: bad modes\n" );
01065
01066 cantGuess = False;
01067 switch (srcMode) {
01068 case SM_I2O:
01069 copyFileName ( inName, "(stdin)" );
01070 copyFileName ( outName, "(stdout)" );
01071 break;
01072 case SM_F2F:
01073 copyFileName ( inName, name );
01074 copyFileName ( outName, name );
01075 for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++)
01076 if (mapSuffix(outName,zSuffix[i],unzSuffix[i]))
01077 goto zzz;
01078 cantGuess = True;
01079 strcat ( outName, ".out" );
01080 break;
01081 case SM_F2O:
01082 copyFileName ( inName, name );
01083 copyFileName ( outName, "(stdout)" );
01084 break;
01085 }
01086
01087 zzz:
01088 if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
01089 if (noisy)
01090 fprintf ( stderr, "%s: There are no files matching `%s'.\n",
01091 progName, inName );
01092 return;
01093 }
01094 if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
01095 fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
01096 progName, inName, strerror(errno) );
01097 return;
01098 }
01099 if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
01100 if (noisy)
01101 fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
01102 progName, inName );
01103 return;
01104 }
01105 if ( /* srcMode == SM_F2F implied && */ cantGuess ) {
01106 if (noisy)
01107 fprintf ( stderr,
01108 "%s: Can't guess original name for %s -- using %s\n",
01109 progName, inName, outName );
01110 /* just a warning, no return */
01111 }
01112 if ( srcMode == SM_F2F && !forceOverwrite && fileExists ( outName ) ) {
01113 fprintf ( stderr, "%s: Output file %s already exists.\n",
01114 progName, outName );
01115 return;
01116 }
01117 if ( srcMode == SM_F2F && !forceOverwrite &&
01118 (n=countHardLinks ( inName ) ) > 0) {
01119 fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
01120 progName, inName, n, n > 1 ? "s" : "" );
01121 return;
01122 }
01123
01124 switch ( srcMode ) {
01125
01126 case SM_I2O:
01127 inStr = stdin;
01128 outStr = stdout;
01129 if ( isatty ( fileno ( stdin ) ) ) {
01130 fprintf ( stderr,
01131 "%s: I won't read compressed data from a terminal.\n",
01132 progName );
01133 fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
01134 progName, progName );
01135 return;
01136 };
01137 break;
01138
01139 case SM_F2O:
01140 inStr = fopen ( inName, "rb" );
01141 outStr = stdout;
01142 if ( inStr == NULL ) {
01143 fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
01144 progName, inName, strerror(errno) );
01145 if ( inStr != NULL ) fclose ( inStr );
01146 return;
01147 };
01148 break;
01149
01150 case SM_F2F:
01151 inStr = fopen ( inName, "rb" );
01152 outStr = fopen ( outName, "wb" );
01153 if ( outStr == NULL) {
01154 fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
01155 progName, outName, strerror(errno) );
01156 if ( inStr != NULL ) fclose ( inStr );
01157 return;
01158 }
01159 if ( inStr == NULL ) {
01160 fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
01161 progName, inName, strerror(errno) );
01162 if ( outStr != NULL ) fclose ( outStr );
01163 return;
01164 };
01165 setInterimPermissions ( outName );
01166 break;
01167
01168 default:
01169 panic ( "uncompress: bad srcMode" );
01170 break;
01171 }
01172
01173 if (verbosity >= 1) {
01174 fprintf ( stderr, " %s: ", inName );
01175 pad ( inName );
01176 fflush ( stderr );
01177 }
01178
01179 /*--- Now the input and output handles are sane. Do the Biz. ---*/
01180 outputHandleJustInCase = outStr;
01181 magicNumberOK = uncompressStream ( inStr, outStr );
01182 outputHandleJustInCase = NULL;
01183
01184 /*--- If there was an I/O error, we won't get here. ---*/
01185 if ( magicNumberOK ) {
01186 if ( srcMode == SM_F2F ) {
01187 copyDatePermissionsAndOwner ( inName, outName );
01188 if ( !keepInputFiles ) {
01189 IntNative retVal = remove ( inName );
01190 ERROR_IF_NOT_ZERO ( retVal );
01191 }
01192 }
01193 } else {
01194 if ( srcMode == SM_F2F ) {
01195 IntNative retVal = remove ( outName );
01196 ERROR_IF_NOT_ZERO ( retVal );
01197 }
01198 }
01199
01200 if ( magicNumberOK ) {
01201 if (verbosity >= 1)
01202 fprintf ( stderr, "done\n" );
01203 } else {
01204 if (verbosity >= 1)
01205 fprintf ( stderr, "not a bzip2 file.\n" ); else
01206 fprintf ( stderr,
01207 "%s: %s is not a bzip2 file.\n",
01208 progName, inName );
01209 }
01210
01211 }
|
|
||||||||||||
|
Definition at line 417 of file bzip2.c. Referenced by uncompress().
00418 {
00419 BZFILE* bzf = NULL;
00420 Int32 bzerr, bzerr_dummy, ret, nread, streamNo, i;
00421 UChar obuf[5000];
00422 UChar unused[BZ_MAX_UNUSED];
00423 Int32 nUnused;
00424 UChar* unusedTmp;
00425
00426 nUnused = 0;
00427 streamNo = 0;
00428
00429 SET_BINARY_MODE(stream);
00430 SET_BINARY_MODE(zStream);
00431
00432 if (ferror(stream)) goto errhandler_io;
00433 if (ferror(zStream)) goto errhandler_io;
00434
00435 while (True) {
00436
00437 bzf = bzReadOpen (
00438 &bzerr, zStream, verbosity,
00439 (int)smallMode, unused, nUnused
00440 );
00441 if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
00442 streamNo++;
00443
00444 while (bzerr == BZ_OK) {
00445 nread = bzRead ( &bzerr, bzf, obuf, 5000 );
00446 if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
00447 if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0)
00448 fwrite ( obuf, sizeof(UChar), nread, stream );
00449 if (ferror(stream)) goto errhandler_io;
00450 }
00451 if (bzerr != BZ_STREAM_END) goto errhandler;
00452
00453 bzReadGetUnused ( &bzerr, bzf, (void**)(&unusedTmp), &nUnused );
00454 if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
00455
00456 for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
00457
00458 bzReadClose ( &bzerr, bzf );
00459 if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
00460
00461 if (nUnused == 0 && myfeof(zStream)) break;
00462
00463 }
00464
00465 if (ferror(zStream)) goto errhandler_io;
00466 ret = fclose ( zStream );
00467 if (ret == EOF) goto errhandler_io;
00468
00469 if (ferror(stream)) goto errhandler_io;
00470 ret = fflush ( stream );
00471 if (ret != 0) goto errhandler_io;
00472 if (stream != stdout) {
00473 ret = fclose ( stream );
00474 if (ret == EOF) goto errhandler_io;
00475 }
00476 if (verbosity >= 2) fprintf ( stderr, "\n " );
00477 return True;
00478
00479 errhandler:
00480 bzReadClose ( &bzerr_dummy, bzf );
00481 switch (bzerr) {
00482 case BZ_IO_ERROR:
00483 errhandler_io:
00484 ioError(); break;
00485 case BZ_DATA_ERROR:
00486 crcError();
00487 case BZ_MEM_ERROR:
00488 outOfMemory();
00489 case BZ_UNEXPECTED_EOF:
00490 compressedStreamEOF();
00491 case BZ_DATA_ERROR_MAGIC:
00492 if (streamNo == 1) {
00493 return False;
00494 } else {
00495 if (noisy)
00496 fprintf ( stderr,
00497 "\n%s: %s: trailing garbage after EOF ignored\n",
00498 progName, inName );
00499 return True;
00500 }
00501 default:
00502 panic ( "decompress:unexpected error" );
00503 }
00504
00505 panic ( "decompress:end" );
00506 return True; /*notreached*/
00507 }
|
|
|
Definition at line 1308 of file bzip2.c. 01309 {
01310 fprintf (
01311 stderr,
01312 "bzip2, a block-sorting file compressor. "
01313 "Version 0.9.5c, 9-Aug-99.\n"
01314 "\n usage: %s [flags and input files in any order]\n"
01315 "\n"
01316 " -h --help print this message\n"
01317 " -d --decompress force decompression\n"
01318 " -z --compress force compression\n"
01319 " -k --keep keep (don't delete) input files\n"
01320 " -f --force overwrite existing output filess\n"
01321 " -t --test test compressed file integrity\n"
01322 " -c --stdout output to standard out\n"
01323 " -q --quiet suppress noncritical error messages\n"
01324 " -v --verbose be verbose (a 2nd -v gives more)\n"
01325 " -L --license display software version & license\n"
01326 " -V --version display software version & license\n"
01327 " -s --small use less memory (at most 2500k)\n"
01328 " -1 .. -9 set block size to 100k .. 900k\n"
01329 "\n"
01330 " If invoked as `bzip2', default action is to compress.\n"
01331 " as `bunzip2', default action is to decompress.\n"
01332 " as `bzcat', default action is to decompress to stdout.\n"
01333 "\n"
01334 " If no file names are given, bzip2 compresses or decompresses\n"
01335 " from standard input to standard output. You can combine\n"
01336 " short flags, so `-v -4' means the same as -v4 or -4v, &c.\n"
01337 #if BZ_UNIX
01338 "\n"
01339 #endif
01340 ,
01341
01342 fullProgName
01343 );
01344 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001