X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=dump%2Foptr.c;h=a580f35843890f4a75e6a35158ec2af7a9142cd2;hp=ced42623819533dab97f7eab32f99c3bfd02b914;hb=5d2a3d246d400d45dfd4c49ddb588c69fb60873d;hpb=51b01afee9aa77a4ac099dcf7ce74d67deaf2d3e diff --git a/dump/optr.c b/dump/optr.c index ced4262..a580f35 100644 --- a/dump/optr.c +++ b/dump/optr.c @@ -2,7 +2,8 @@ * Ported to Linux's Second Extended File System as part of the * dump and restore backup suit * Remy Card , 1994-1997 - * Stelian Pop , 1999-2000 + * Stelian Pop , 1999-2000 + * Stelian Pop - AlcĂ´ve , 2000-2002 */ /*- @@ -40,12 +41,14 @@ #ifndef lint static const char rcsid[] = - "$Id: optr.c,v 1.12 2000/11/10 11:48:31 stelian Exp $"; + "$Id: optr.c,v 1.30 2002/01/25 15:08:59 stelian Exp $"; #endif /* not lint */ +#include #include #include #include +#include #include #include @@ -59,7 +62,11 @@ static const char rcsid[] = #include #ifdef __linux__ +#ifdef HAVE_EXT2FS_EXT2_FS_H +#include +#else #include +#endif #include #include #include @@ -98,11 +105,13 @@ query(const char *question) FILE *mytty; time_t firstprompt, when_answered; -#ifdef __linux__ - (void)time4(&(firstprompt)); -#else - (void)time((time_t *)&(firstprompt)); -#endif + if (qflag) { + msg("%s - forced abort\n", question); + dumpabort(0); + /* NOTREACHED */ + } + + firstprompt = time(NULL); if ((mytty = fopen(_PATH_TTY, "r")) == NULL) quit("fopen on %s fails: %s\n", _PATH_TTY, strerror(errno)); @@ -135,16 +144,12 @@ query(const char *question) if (signal(SIGALRM, sig) == SIG_IGN) signal(SIGALRM, SIG_IGN); (void) fclose(mytty); -#ifdef __linux__ - (void)time4(&(when_answered)); -#else - (void)time((time_t *)&(when_answered)); -#endif + when_answered = time(NULL); /* * Adjust the base for time estimates to ignore time we spent waiting * for operator input. */ - if ((tstart_writing != 0) && (when_answered != (time_t)-1) && (firstprompt != (time_t)-1)) + if (tstart_writing != 0) tstart_writing += (when_answered - firstprompt); return(back); } @@ -244,7 +249,7 @@ broadcast(const char *message) return; } - clock = time((time_t *)0); + clock = time(NULL); localclock = localtime(&clock); if ((f_utmp = fopen(_PATH_UTMP, "r")) == NULL) { @@ -280,7 +285,7 @@ static void sendmes(const char *tty, const char *message) { char t[MAXPATHLEN], buf[BUFSIZ]; - register const char *cp; + const char *cp; int lmsg = 1; FILE *f_tty; @@ -321,25 +326,16 @@ time_t tschedule = 0; void timeest(void) { - time_t tnow, deltat; + time_t tnow = time(NULL); -#ifdef __linux__ - (void) time4(&tnow); -#else - (void) time((time_t *) &tnow); -#endif if (tnow >= tschedule) { + char *buf = mktimeest(tnow); tschedule = tnow + 300; - if (blockswritten < 500) - return; - if (blockswritten > tapesize) - tapesize = blockswritten; - deltat = tstart_writing - tnow + - (1.0 * (tnow - tstart_writing)) - / blockswritten * tapesize; - msg("%3.2f%% done, finished in %d:%02d\n", - (blockswritten * 100.0) / tapesize, - deltat / 3600, (deltat % 3600) / 60); + if (buf) { + fprintf(stderr, " DUMP: "); + fwrite(buf, strlen(buf), 1, stderr); + fflush(stderr); + } } } @@ -430,7 +426,7 @@ quit(fmt, va_alist) static struct fstab * allocfsent(struct fstab *fs) { - register struct fstab *new; + struct fstab *new; new = (struct fstab *)malloc(sizeof (*fs)); if (new == NULL) @@ -473,7 +469,6 @@ getfstab(void) strcmp(fs->fs_type, FSTAB_RQ)) continue; fs = allocfsent(fs); - fs->fs_passno = 0; if ((pf = (struct pfstab *)malloc(sizeof (*pf))) == NULL) quit("%s\n", strerror(errno)); pf->pf_fstab = fs; @@ -504,9 +499,9 @@ getfstab(void) struct fstab * fstabsearch(const char *key) { - register struct pfstab *pf; - register struct fstab *fs; - char *rn; + struct pfstab *pf; + struct fstab *fs; + const char *rn; for (pf = table; pf != NULL; pf = pf->pf_next) { fs = pf->pf_fstab; @@ -532,9 +527,9 @@ fstabsearch(const char *key) struct fstab * fstabsearchdir(const char *key, char *directory) { - register struct pfstab *pf; - register struct fstab *fs; - register struct fstab *found_fs = NULL; + struct pfstab *pf; + struct fstab *fs; + struct fstab *found_fs = NULL; unsigned int size = 0; struct stat buf; @@ -544,7 +539,7 @@ fstabsearchdir(const char *key, char *directory) for (pf = table; pf != NULL; pf = pf->pf_next) { fs = pf->pf_fstab; if (strlen(fs->fs_file) > size && - strlen(key) > strlen(fs->fs_file) + 1 && + strlen(key) > strlen(fs->fs_file) && strncmp(fs->fs_file, key, strlen(fs->fs_file)) == 0 && (key[strlen(fs->fs_file)] == '/' || fs->fs_file[strlen(fs->fs_file) - 1] == '/')) { @@ -569,12 +564,9 @@ static void print_wmsg(char arg, int dumpme, const char *dev, int level, const char *mtpt, time_t ddate) { - char *date; - - if (ddate) - date = (char *)ctime(&ddate); - //date[16] = '\0'; /* blast away seconds and year */ - +#ifdef FDEBUG + printf("checking dev %s: lvl %d, mtpt %s\n", dev, level, mtpt); +#endif if (!dumpme && arg == 'w') return; @@ -583,11 +575,19 @@ print_wmsg(char arg, int dumpme, const char *dev, int level, dev, mtpt ? mtpt : ""); - if (ddate) - printf(" Level %c, Date %s\n", - level, date); - else - printf(" never\n"); + /* + * Check ddate > 365 to avoid issues with fs in stab but not dumpdates. + * Not a problem, because ddate is in seconds since the epoch anyways. + */ + if (ddate > 365) { + char *date, *d; + + date = (char *)ctime(&ddate); + d = strchr(date, '\n'); + if (d) *d = '\0'; + printf("Level %c, Date %s\n", level, date); + } else + printf("never\n"); } /* @@ -599,7 +599,7 @@ lastdump(char arg) /* w ==> just what to do; W ==> most recent dumps */ struct pfstab *pf; time_t tnow; - (void) time(&tnow); + tnow = time(NULL); getfstab(); /* /etc/fstab input */ initdumptimes(0); /* dumpdates input */ if (ddatev == NULL && table == NULL) { @@ -613,6 +613,7 @@ lastdump(char arg) /* w ==> just what to do; W ==> most recent dumps */ else (void) printf("Last dump(s) done (Dump '>' file systems):\n"); + /* For files in dumpdates, get the last dump level and date */ if (ddatev != NULL) { struct dumpdates *dtwalk = NULL; int i; @@ -627,21 +628,23 @@ lastdump(char arg) /* w ==> just what to do; W ==> most recent dumps */ sizeof(dtwalk->dd_name)) == 0) continue; lastname = dtwalk->dd_name; - if ((dt = dtwalk->dd_fstab) != NULL && - dt->fs_freq != 0) { + if ((dt = dtwalk->dd_fstab) != NULL) { /* Overload fs_freq as dump level and * fs_passno as date, because we can't * change struct fstab format. - * A negative fs_freq means this + * A positive fs_freq means this * filesystem needs to be dumped. */ dt->fs_passno = dtwalk->dd_ddate; - if (dtwalk->dd_ddate < - tnow - (dt->fs_freq * 86400)) - dt->fs_freq = -dtwalk->dd_level; - else + if (dt->fs_freq > 0 && (dtwalk->dd_ddate < + tnow - (dt->fs_freq * 86400))) dt->fs_freq = dtwalk->dd_level; - + else + dt->fs_freq = -dtwalk->dd_level; +#ifdef FDEBUG + printf("%s fs_freq set to %d\n", lastname, + dt->fs_freq); +#endif } } } @@ -655,9 +658,10 @@ lastdump(char arg) /* w ==> just what to do; W ==> most recent dumps */ if (strncmp(dt->fs_vfstype, *type, sizeof(dt->fs_vfstype)) == 0) { const char *disk = get_device_name(dt->fs_spec); - print_wmsg(arg, dt->fs_freq < 0 || !dt->fs_passno, + print_wmsg(arg, dt->fs_freq > 0, disk ? disk : dt->fs_spec, - dt->fs_freq < 0 ? -dt->fs_freq : dt->fs_freq, + dt->fs_freq < 0 ? -dt->fs_freq : + dt->fs_freq, dt->fs_file, dt->fs_passno); }