X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;ds=sidebyside;f=dump%2Fmain.c;h=5e9c111c621df8ed73fd70639a64fb8937050ebe;hb=1df5c692513d8067e0892398e1301b7eb8bba2a1;hp=7a5884b36ff44547e296e88f90abc38d79183d1d;hpb=f48a055e452249091f3c6851a20431a8c87135b1;p=dump.git diff --git a/dump/main.c b/dump/main.c index 7a5884b..5e9c111 100644 --- a/dump/main.c +++ b/dump/main.c @@ -41,7 +41,7 @@ #ifndef lint static const char rcsid[] = - "$Id: main.c,v 1.56 2001/08/13 16:17:52 stelian Exp $"; + "$Id: main.c,v 1.59 2001/08/16 15:24:21 stelian Exp $"; #endif /* not lint */ #include @@ -102,8 +102,10 @@ char *tapeprefix; /* prefix of the tape file */ char *dumpdates; /* name of the file containing dump date information*/ char lastlevel; /* dump level of previous dump */ char level; /* dump level of this dump */ +int bzipflag; /* compression is done using bzlib */ int uflag; /* update flag */ int Mflag; /* multi-volume flag */ +int qflag; /* quit on errors flag */ char *eot_script; /* end of volume script fiag */ int diskfd; /* disk file descriptor */ int tapefd; /* tape file descriptor */ @@ -177,6 +179,7 @@ static void obsolete __P((int *, char **[])); static void usage __P((void)); static void do_exclude_from_file __P((char *)); static void do_exclude_ino_str __P((char *)); +static void incompat_flags __P((int, char, char)); static dump_ino_t iexclude_list[IEXCLUDE_MAXNUM];/* the inode exclude list */ static int iexclude_num = 0; /* number of elements in the list */ @@ -190,7 +193,8 @@ main(int argc, char *argv[]) register struct fstab *dt; register char *map; register int ch; - int i, anydirskipped, bflag = 0, Tflag = 0, honorlevel = 1; + int i, anydirskipped; + int aflag = 0, bflag = 0, Tflag = 0, honorlevel = 1; dump_ino_t maxino; struct STAT statbuf; dev_t filedev = 0; @@ -231,11 +235,15 @@ main(int argc, char *argv[]) #endif /* USE_QFA */ while ((ch = getopt(argc, argv, - "0123456789aB:b:cd:e:E:f:F:h:L:" + "0123456789aB:b:cd:e:E:f:F:h:" +#ifdef HAVE_BZLIB + "j::" +#endif + "L:" #ifdef KERBEROS "k" #endif - "Mn" + "Mnq" #ifdef USE_QFA "Q:" #endif @@ -253,6 +261,7 @@ main(int argc, char *argv[]) case 'a': /* `auto-size', Write to EOM. */ unlimited = 1; + aflag = 1; break; case 'B': /* blocks per output file */ @@ -314,6 +323,15 @@ main(int argc, char *argv[]) honorlevel = numarg("honor level", 0L, 10L); break; +#ifdef HAVE_BZLIB + case 'j': + compressed = 2; + bzipflag = 1; + if (optarg) + compressed = numarg("compress level", 1L, 9L); + break; +#endif /* HAVE_BZLIB */ + #ifdef KERBEROS case 'k': dokerberos = 1; @@ -345,6 +363,10 @@ main(int argc, char *argv[]) notify = 1; break; + case 'q': + qflag = 1; + break; + #ifdef USE_QFA case 'Q': /* create tapeposfile */ gTapeposfile = optarg; @@ -406,11 +428,12 @@ main(int argc, char *argv[]) exit(X_STARTUP); } argc--; - if (Tflag && uflag) { - msg("You cannot use the T and u flags together.\n"); - msg("The ENTIRE dump is aborted.\n"); - exit(X_STARTUP); - } + incompat_flags(Tflag && uflag, 'T', 'u'); + incompat_flags(aflag && blocksperfile, 'a', 'B'); + incompat_flags(aflag && cartridge, 'a', 'c'); + incompat_flags(aflag && density, 'a', 'd'); + incompat_flags(aflag && tsize, 'a', 's'); + if (strcmp(tapeprefix, "-") == 0) { pipeout++; tapeprefix = "standard output"; @@ -684,8 +707,8 @@ main(int argc, char *argv[]) msg("Label: %s\n", spcl.c_label); if (compressed) - msg("Compressing output at compression level %d\n", - compressed); + msg("Compressing output at compression level %d (%s)\n", + compressed, bzipflag ? "bzlib" : "zlib"); } #if defined(SIGINFO) @@ -949,13 +972,17 @@ usage(void) #ifdef KERBEROS "k" #endif - "MnSu" + "MnqSu" "] [-B records] [-b blocksize] [-d density]\n" "\t%s [-e inode#,inode#,...] [-E file] [-f file] [-h level] " +#ifdef HAVE_BZLIB + "[-j zlevel] " +#endif + "\n\t%s " #ifdef USE_QFA "[-Q file] " #endif - "\n\t%s [-s feet] [-T date] " + "[-s feet] [-T date] " #ifdef HAVE_ZLIB "[-z zlevel] " #endif @@ -1179,3 +1206,12 @@ do_exclude_from_file(char *file) { } fclose(f); } + +static void incompat_flags(int cond, char flag1, char flag2) { + if (cond) { + msg("You cannot use the %c and %c flags together.\n", + flag1, flag2); + msg("The ENTIRE dump is aborted.\n"); + exit(X_STARTUP); + } +}