⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bzip2.c

📁 minibzip2
💻 C
📖 第 1 页 / 共 5 页
字号:
      if (noisy)      fprintf ( stderr, "%s: Input file %s is not a normal file.\n",                progName, inName );      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) {      fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",                progName, inName, n, n > 1 ? "s" : "" );      setExit(1);      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:         inStr = stdin;         outStr = stdout;         if ( isatty ( fileno ( stdout ) ) ) {            fprintf ( stderr,                      "%s: I won't write compressed data to a terminal.\n",                      progName );            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",                              progName, progName );            setExit(1);            return;         };         break;      case SM_F2O:         inStr = fopen ( inName, "rb" );         outStr = stdout;         if ( isatty ( fileno ( stdout ) ) ) {            fprintf ( stderr,                      "%s: I won't write compressed data to a terminal.\n",                      progName );            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",                              progName, progName );            if ( inStr != NULL ) fclose ( inStr );            setExit(1);            return;         };         if ( inStr == NULL ) {            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",                      progName, inName, strerror(errno) );            setExit(1);            return;         };         break;      case SM_F2F:         inStr = fopen ( inName, "rb" );         outStr = fopen_output_safely ( outName, "wb" );         if ( outStr == NULL) {            fprintf ( stderr, "%s: Can't create output file %s: %s.\n",                      progName, outName, strerror(errno) );            if ( inStr != NULL ) fclose ( inStr );            setExit(1);            return;         }         if ( inStr == NULL ) {            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",                      progName, inName, strerror(errno) );            if ( outStr != NULL ) fclose ( outStr );            setExit(1);            return;         };         break;      default:         panic ( "compress: bad srcMode" );         break;   }   if (verbosity >= 1) {      fprintf ( stderr,  "  %s: ", inName );      pad ( inName );      fflush ( stderr );   }   /*--- Now the input and output handles are sane.  Do the Biz. ---*/   outputHandleJustInCase = outStr;   deleteOutputOnInterrupt = True;   compressStream ( inStr, outStr );   outputHandleJustInCase = NULL;   /*--- If there was an I/O error, we won't get here. ---*/   if ( srcMode == SM_F2F ) {      applySavedMetaInfoToOutputFile ( outName );      deleteOutputOnInterrupt = False;      if ( !keepInputFiles ) {         IntNative retVal = remove ( inName );         ERROR_IF_NOT_ZERO ( retVal );      }   }   deleteOutputOnInterrupt = False;}/*---------------------------------------------*/static void uncompress ( Char *name ){   FILE  *inStr;   FILE  *outStr;   Int32 n, i;   Bool  magicNumberOK;   Bool  cantGuess;   struct MY_STAT statBuf;   deleteOutputOnInterrupt = False;   if (name == NULL && srcMode != SM_I2O)      panic ( "uncompress: bad modes\n" );   cantGuess = False;   switch (srcMode) {      case SM_I2O:          copyFileName ( inName, "(stdin)" );         copyFileName ( outName, "(stdout)" );          break;      case SM_F2F:          copyFileName ( inName, name );         copyFileName ( outName, name );         for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++)            if (mapSuffix(outName,zSuffix[i],unzSuffix[i]))               goto zzz;          cantGuess = True;         strcat ( outName, ".out" );         break;      case SM_F2O:          copyFileName ( inName, name );         copyFileName ( outName, "(stdout)" );          break;   }   zzz:   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {      if (noisy)      fprintf ( stderr, "%s: There are no files matching `%s'.\n",                progName, inName );      setExit(1);      return;   }   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {      fprintf ( stderr, "%s: Can't open input file %s: %s.\n",                progName, inName, strerror(errno) );      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",                progName, inName );      setExit(1);      return;   }   if ( /* srcMode == SM_F2F implied && */ cantGuess ) {      if (noisy)      fprintf ( stderr,                 "%s: Can't guess original name for %s -- using %s\n",                progName, inName, outName );      /* just a warning, no 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) {      fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",                progName, inName, n, n > 1 ? "s" : "" );      setExit(1);      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:         inStr = stdin;         outStr = stdout;         if ( isatty ( fileno ( stdin ) ) ) {            fprintf ( stderr,                      "%s: I won't read compressed data from a terminal.\n",                      progName );            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",                              progName, progName );            setExit(1);            return;         };         break;      case SM_F2O:         inStr = fopen ( inName, "rb" );         outStr = stdout;         if ( inStr == NULL ) {            fprintf ( stderr, "%s: Can't open input file %s:%s.\n",                      progName, inName, strerror(errno) );            if ( inStr != NULL ) fclose ( inStr );            setExit(1);            return;         };         break;      case SM_F2F:         inStr = fopen ( inName, "rb" );         outStr = fopen_output_safely ( outName, "wb" );         if ( outStr == NULL) {            fprintf ( stderr, "%s: Can't create output file %s: %s.\n",                      progName, outName, strerror(errno) );            if ( inStr != NULL ) fclose ( inStr );            setExit(1);            return;         }         if ( inStr == NULL ) {            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",                      progName, inName, strerror(errno) );            if ( outStr != NULL ) fclose ( outStr );            setExit(1);            return;         };         break;      default:         panic ( "uncompress: bad srcMode" );         break;   }   if (verbosity >= 1) {      fprintf ( stderr, "  %s: ", inName );      pad ( inName );      fflush ( stderr );   }   /*--- Now the input and output handles are sane.  Do the Biz. ---*/   outputHandleJustInCase = outStr;   deleteOutputOnInterrupt = True;   magicNumberOK = uncompressStream ( inStr, outStr );   outputHandleJustInCase = NULL;   /*--- If there was an I/O error, we won't get here. ---*/   if ( magicNumberOK ) {      if ( srcMode == SM_F2F ) {         applySavedMetaInfoToOutputFile ( outName );         deleteOutputOnInterrupt = False;         if ( !keepInputFiles ) {            IntNative retVal = remove ( inName );            ERROR_IF_NOT_ZERO ( retVal );         }      }   } else {      unzFailsExist = True;      deleteOutputOnInterrupt = False;      if ( srcMode == SM_F2F ) {         IntNative retVal = remove ( outName );         ERROR_IF_NOT_ZERO ( retVal );      }   }   deleteOutputOnInterrupt = False;   if ( magicNumberOK ) {      if (verbosity >= 1)         fprintf ( stderr, "done\n" );   } else {      setExit(2);      if (verbosity >= 1)         fprintf ( stderr, "not a bzip2 file.\n" ); else         fprintf ( stderr,                   "%s: %s is not a bzip2 file.\n",                   progName, inName );   }}/*---------------------------------------------*/static void testf ( Char *name ){   FILE *inStr;   Bool allOK;   struct MY_STAT statBuf;   deleteOutputOnInterrupt = False;   if (name == NULL && srcMode != SM_I2O)      panic ( "testf: bad modes\n" );   copyFileName ( outName, "(none)" );   switch (srcMode) {      case SM_I2O: copyFileName ( inName, "(stdin)" ); break;      case SM_F2F: copyFileName ( inName, name ); break;      case SM_F2O: copyFileName ( inName, name ); break;   }   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {      if (noisy)      fprintf ( stderr, "%s: There are no files matching `%s'.\n",                progName, inName );      setExit(1);      return;   }   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {      fprintf ( stderr, "%s: Can't open input %s: %s.\n",                progName, inName, strerror(errno) );      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 ) {      case SM_I2O:         if ( isatty ( fileno ( stdin ) ) ) {            fprintf ( stderr,                      "%s: I won't read compressed data from a terminal.\n",                      progName );            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",                              progName, progName );            setExit(1);            return;         };         inStr = stdin;         break;      case SM_F2O: case SM_F2F:         inStr = fopen ( inName, "rb" );         if ( inStr == NULL ) {            fprintf ( stderr, "%s: Can't open input file %s:%s.\n",                      progName, inName, strerror(errno) );            setExit(1);            return;         };         break;      default:         panic ( "testf: bad srcMode" );         break;   }   if (verbosity >= 1) {      fprintf ( stderr, "  %s: ", inName );      pad ( inName );      fflush ( stderr );   }   /*--- Now the input handle is sane.  Do the Biz. ---*/   outputHandleJustInCase = NULL;   allOK = testStream ( inStr );   if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );   if (!allOK) testFailsExist = True;}/*---------------------------------------------*/static void license ( void ){   fprintf ( stderr,    "bzip2, a block-sorting file compressor.  "    "Version %s.\n"    "   \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"    "   in the bzip2-1.0 source distribution.\n"    "   \n"    "   This program is distributed in the hope that it will be useful,\n"    "   but WITHOUT ANY WARRANTY; without even the implied warranty of\n"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -