X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=dump%2Fmain.c;h=8fcf468d7b0851259628e1bb2e8f81f53c776f37;hp=2ee429a6c660ef2805d37b585ec4257229d6f728;hb=e084ba00f03da98a6d260b0b3856aee2dfbb4c58;hpb=6d732772201861bc57348f4ad5c0970ac00b5d93 diff --git a/dump/main.c b/dump/main.c index 2ee429a..8fcf468 100644 --- a/dump/main.c +++ b/dump/main.c @@ -41,7 +41,7 @@ #ifndef lint static const char rcsid[] = - "$Id: main.c,v 1.53 2001/07/19 09:03:44 stelian Exp $"; + "$Id: main.c,v 1.57 2001/08/16 09:37:59 stelian Exp $"; #endif /* not lint */ #include @@ -88,6 +88,68 @@ static const char rcsid[] = #define SBOFF (SBLOCK * DEV_BSIZE) #endif +/* + * Dump maps used to describe what is to be dumped. + */ +int mapsize; /* size of the state maps */ +char *usedinomap; /* map of allocated inodes */ +char *dumpdirmap; /* map of directories to be dumped */ +char *dumpinomap; /* map of files to be dumped */ + +const char *disk; /* name of the disk file */ +char tape[MAXPATHLEN];/* name of the tape file */ +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 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 */ +int pipeout; /* true => output to standard output */ +int fifoout; /* true => output to fifo */ +dump_ino_t curino; /* current inumber; used globally */ +int newtape; /* new tape flag */ +int density; /* density in 0.1" units */ +long tapesize; /* estimated tape size, blocks */ +long tsize; /* tape size in 0.1" units */ +long asize; /* number of 0.1" units written on current tape */ +int etapes; /* estimated number of tapes */ +int nonodump; /* if set, do not honor UF_NODUMP user flags */ +int unlimited; /* if set, write to end of medium */ +int compressed; /* if set, dump is to be compressed */ +long long bytes_written;/* total bytes written to tape */ +long uncomprblks; /* uncompressed blocks written to tape */ +int notify; /* notify operator flag */ +int blockswritten; /* number of blocks written on current tape */ +int tapeno; /* current tape number */ +time_t tstart_writing; /* when started writing the first tape block */ +time_t tend_writing; /* after writing the last tape block */ +#ifdef __linux__ +ext2_filsys fs; +#else +struct fs *sblock; /* the file system super block */ +char sblock_buf[MAXBSIZE]; +#endif +long xferrate; /* averaged transfer rate of all volumes */ +long dev_bsize; /* block size of underlying disk device */ +int dev_bshift; /* log2(dev_bsize) */ +int tp_bshift; /* log2(TP_BSIZE) */ + +#ifdef USE_QFA +int gTapeposfd; +char *gTapeposfile; +char gTps[255]; +int32_t gThisDumpDate; +#endif /* USE_QFA */ + +struct dumptime *dthead; /* head of the list version */ +int nddates; /* number of records (might be zero) */ +int ddates_in; /* we have read the increment file */ +struct dumpdates **ddatev; /* the arrayfied version */ + int notify = 0; /* notify operator flag */ int blockswritten = 0; /* number of blocks written on current tape */ int tapeno = 0; /* current tape number */ @@ -174,7 +236,7 @@ main(int argc, char *argv[]) #ifdef KERBEROS "k" #endif - "Mn" + "Mnq" #ifdef USE_QFA "Q:" #endif @@ -284,6 +346,10 @@ main(int argc, char *argv[]) notify = 1; break; + case 'q': + qflag = 1; + break; + #ifdef USE_QFA case 'Q': /* create tapeposfile */ gTapeposfile = optarg; @@ -745,7 +811,7 @@ main(int argc, char *argv[]) #ifdef USE_QFA if (tapepos) { msg("writing QFA positions to %s\n", gTapeposfile); - if ((gTapeposfd = open(gTapeposfile, O_RDWR|O_CREAT)) < 0) + if ((gTapeposfd = open(gTapeposfile, O_RDWR|O_CREAT, S_IRUSR | S_IWUSR)) < 0) quit("can't open tapeposfile\n"); /* print QFA-file header */ sprintf(gTps, "%s\n%s\n%ld\n\n", QFA_MAGIC, QFA_VERSION, (unsigned long)spcl.c_date); @@ -888,7 +954,7 @@ 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 USE_QFA @@ -1064,7 +1130,7 @@ exclude_ino(dump_ino_t ino) * This tests adds an inode to the exclusion list if it isn't already there */ void -do_exclude_ino(dump_ino_t ino) +do_exclude_ino(dump_ino_t ino, const char *reason) { if (!exclude_ino(ino)) { if (iexclude_num == IEXCLUDE_MAXNUM) { @@ -1072,7 +1138,11 @@ do_exclude_ino(dump_ino_t ino) msg("The ENTIRE dump is aborted.\n"); exit(X_STARTUP); } - msg("Added inode %u to exclude list\n", ino); + if (reason) + msg("Added inode %u to exclude list (%s)\n", + ino, reason); + else + msg("Added inode %u to exclude list\n", ino); iexclude_list[iexclude_num++] = ino; } } @@ -1088,7 +1158,7 @@ do_exclude_ino_str(char * ino) { msg("The ENTIRE dump is aborted.\n"); exit(X_STARTUP); } - do_exclude_ino(inod); + do_exclude_ino(inod, NULL); } /*