X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=dump%2Fmain.c;h=263945a2543d05c692ed274d4d1a321c592cf88c;hb=144a6db136ca266241860aadb1af8b2702df97fd;hp=3348e18ab83637fe2c8ee7cec14028631e88a5c0;hpb=df9ae507502f413c72119dde6ea3d35c91dba5bf;p=dump.git diff --git a/dump/main.c b/dump/main.c index 3348e18..263945a 100644 --- a/dump/main.c +++ b/dump/main.c @@ -40,7 +40,7 @@ #ifndef lint static const char rcsid[] = - "$Id: main.c,v 1.6 1999/10/13 09:57:19 stelian Exp $"; + "$Id: main.c,v 1.9 1999/11/22 19:08:50 tiniou Exp $"; #endif /* not lint */ #include @@ -94,6 +94,7 @@ int dokerberos = 0; /* Use Kerberos authentication */ long dev_bsize = 1; /* recalculated below */ long blocksperfile; /* output blocks per file */ char *host = NULL; /* remote host (if any) */ +int sizest = 0; /* return size estimate only */ #ifdef __linux__ char *__progname; @@ -137,8 +138,8 @@ main(int argc, char *argv[]) #endif tsize = 0; /* Default later, based on 'c' option for cart tapes */ - if ((tape = getenv("TAPE")) == NULL) - tape = _PATH_DEFTAPE; + if ((tapeprefix = getenv("TAPE")) == NULL) + tapeprefix = _PATH_DEFTAPE; dumpdates = _PATH_DUMPDATES; temp = _PATH_DTMP; strcpy(labelstr, "none"); /* XXX safe strcpy. */ @@ -151,9 +152,9 @@ main(int argc, char *argv[]) obsolete(&argc, &argv); #ifdef KERBEROS -#define optstring "0123456789aB:b:cd:f:h:kL:ns:T:uWw" +#define optstring "0123456789aB:b:cd:f:h:kL:Mns:ST:uWw" #else -#define optstring "0123456789aB:b:cd:f:h:L:ns:T:uWw" +#define optstring "0123456789aB:b:cd:f:h:L:Mns:ST:uWw" #endif while ((ch = getopt(argc, argv, optstring)) != -1) #undef optstring @@ -195,7 +196,7 @@ main(int argc, char *argv[]) break; case 'f': /* output file */ - tape = optarg; + tapeprefix = optarg; break; case 'h': @@ -225,6 +226,10 @@ main(int argc, char *argv[]) } break; + case 'M': /* multi-volume flag */ + Mflag = 1; + break; + case 'n': /* notify operators */ notify = 1; break; @@ -233,6 +238,10 @@ main(int argc, char *argv[]) tsize = numarg("tape size", 1L, 0L) * 12 * 10; break; + case 'S': + sizest = 1; /* return size estimate only */ + break; + case 'T': /* time of last dump */ spcl.c_ddate = unctime(optarg); if (spcl.c_ddate < 0) { @@ -277,9 +286,9 @@ main(int argc, char *argv[]) "You cannot use the T and u flags together.\n"); exit(X_STARTUP); } - if (strcmp(tape, "-") == 0) { + if (strcmp(tapeprefix, "-") == 0) { pipeout++; - tape = "standard output"; + tapeprefix = "standard output"; } if (blocksperfile) @@ -301,12 +310,12 @@ main(int argc, char *argv[]) tsize = cartridge ? 1700L*120L : 2300L*120L; } - if (strchr(tape, ':')) { - host = tape; - tape = strchr(host, ':'); - *tape++ = '\0'; + if (strchr(tapeprefix, ':')) { + host = tapeprefix; + tapeprefix = strchr(host, ':'); + *tapeprefix++ = '\0'; #ifdef RDUMP - if (index(tape, '\n')) { + if (index(tapeprefix, '\n')) { (void)fprintf(stderr, "invalid characters in tape\n"); exit(X_STARTUP); } @@ -392,29 +401,39 @@ main(int argc, char *argv[]) spcl.c_level = 0; } - msg("Date of this level %c dump: %s", level, + if (Mflag) + snprintf(tape, NAME_MAX, "%s%03d", tapeprefix, tapeno + 1); + else + strncpy(tape, tapeprefix, NAME_MAX); + tape[NAME_MAX - 1] = '\0'; + + if (!sizest) { + + msg("Date of this level %c dump: %s", level, #ifdef __linux__ - spcl.c_date == 0 ? "the epoch\n" : ctime4(&spcl.c_date)); + spcl.c_date == 0 ? "the epoch\n" : ctime4(&spcl.c_date)); #else - spcl.c_date == 0 ? "the epoch\n" : ctime(&spcl.c_date)); + spcl.c_date == 0 ? "the epoch\n" : ctime(&spcl.c_date)); #endif - msg("Date of last level %c dump: %s", lastlevel, + msg("Date of last level %c dump: %s", lastlevel, #ifdef __linux__ - spcl.c_ddate == 0 ? "the epoch\n" : ctime4(&spcl.c_ddate)); + spcl.c_ddate == 0 ? "the epoch\n" : ctime4(&spcl.c_ddate)); #else - spcl.c_ddate == 0 ? "the epoch\n" : ctime(&spcl.c_ddate)); + spcl.c_ddate == 0 ? "the epoch\n" : ctime(&spcl.c_ddate)); #endif - msg("Dumping %s ", disk); - if (dt != NULL) - msgtail("(%s) ", dt->fs_file); - if (host) - msgtail("to %s on host %s\n", tape, host); - else - msgtail("to %s\n", tape); - msg("Label: %s\n", labelstr); + msg("Dumping %s ", disk); + if (dt != NULL) + msgtail("(%s) ", dt->fs_file); + if (host) + msgtail("to %s on host %s\n", tape, host); + else + msgtail("to %s\n", tape); + msg("Label: %s\n", labelstr); + + } /* end of size estimate */ #ifdef __linux__ - retval = ext2fs_open(disk, 0, 0, 0, unix_io_manager, &fs); + retval = dump_fs_open(disk, &fs); if (retval) { com_err(disk, retval, "while opening filesystem"); if (retval == EXT2_ET_REV_TOO_HIGH) @@ -477,7 +496,8 @@ main(int argc, char *argv[]) (void)signal(SIGINFO, statussig); #endif - msg("mapping (Pass I) [regular files]\n"); + if (!sizest) + msg("mapping (Pass I) [regular files]\n"); #ifdef __linux__ if (directory[0] == 0) anydirskipped = mapfiles(maxino, &tapesize); @@ -487,11 +507,17 @@ main(int argc, char *argv[]) anydirskipped = mapfiles(maxino, &tapesize); #endif - msg("mapping (Pass II) [directories]\n"); + if (!sizest) + msg("mapping (Pass II) [directories]\n"); while (anydirskipped) { anydirskipped = mapdirs(maxino, &tapesize); } + if (sizest) { + printf("%ld\n", tapesize + 10); + exit(X_STARTUP); + } /* stop here for size estimate */ + if (pipeout || unlimited) { tapesize += 10; /* 10 trailer blocks */ msg("estimated %ld tape blocks.\n", tapesize); @@ -656,7 +682,7 @@ usage(void) #ifdef KERBEROS "k" #endif - "nu] [-B records] [-b blocksize] [-d density]\n" + "MnSu] [-B records] [-b blocksize] [-d density]\n" "\t%s [-f file] [-h level] [-s feet] [-T date] filesystem\n" "\t%s [-W | -w]\n", __progname, white, __progname); exit(X_STARTUP);