X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=dump%2Foptr.c;h=96b829af656f9c8e93d30b5a1d371cc73de2f8c0;hb=ddd2ef55b78a62c4bc3daad18bef8a90e85a2052;hp=4d232422bde8af2c6bd757f69a8b32a8d0a9e162;hpb=1227625a12a66e0ded78a1997c2d23f23202a382;p=dump.git diff --git a/dump/optr.c b/dump/optr.c index 4d23242..96b829a 100644 --- a/dump/optr.c +++ b/dump/optr.c @@ -1,7 +1,8 @@ /* * Ported to Linux's Second Extended File System as part of the * dump and restore backup suit - * Remy Card , 1994, 1995, 1996 + * Remy Card , 1994-1997 + * Stelian Pop , 1999 * */ @@ -39,7 +40,11 @@ */ #ifndef lint +#if 0 static char sccsid[] = "@(#)optr.c 8.2 (Berkeley) 1/6/94"; +#endif +static const char rcsid[] = + "$Id: optr.c,v 1.3 1999/10/11 12:59:19 stelian Exp $"; #endif /* not lint */ #include @@ -49,34 +54,26 @@ static char sccsid[] = "@(#)optr.c 8.2 (Berkeley) 1/6/94"; #include #include #include -#include #include -#ifdef __STDC__ #include #include #include -#endif -#include -#ifdef __STDC__ #include -#endif #include -#ifndef __STDC__ -#include -#endif #ifdef __linux__ #include #include #include +#include #endif #include "dump.h" #include "pathnames.h" -void alarmcatch __P((/* int, int */)); +static void alarmcatch __P((int)); int datesort __P((const void *, const void *)); -static void sendmes __P((char *, char *)); +static void sendmes __P((const char *, const char *)); /* * Query the operator; This previously-fascist piece of code @@ -90,21 +87,23 @@ static void sendmes __P((char *, char *)); * that dump needs attention. */ static int timeout; -static char *attnmessage; /* attention message */ +static const char *attnmessage; /* attention message */ int -query(question) - char *question; +query(const char *question) { char replybuffer[64]; int back, errcount; FILE *mytty; + time_t firstprompt, when_answered; + + firstprompt = time(NULL); if ((mytty = fopen(_PATH_TTY, "r")) == NULL) quit("fopen on %s fails: %s\n", _PATH_TTY, strerror(errno)); attnmessage = question; timeout = 0; - alarmcatch(); + alarmcatch(0); back = -1; errcount = 0; do { @@ -131,18 +130,26 @@ query(question) if (signal(SIGALRM, sig) == SIG_IGN) signal(SIGALRM, SIG_IGN); (void) fclose(mytty); + when_answered = time(NULL); + /* + * Adjust the base for time estimates to ignore time we spent waiting + * for operator input. + */ + if (tstart_writing != 0) + tstart_writing += (when_answered - firstprompt); return(back); } -char lastmsg[100]; +char lastmsg[BUFSIZ]; /* * Alert the console operator, and enable the alarm clock to * sleep for 2 minutes in case nobody comes to satisfy dump */ -void -alarmcatch() +static void +alarmcatch(int signo) { + int save_errno = errno; if (notify == 0) { if (timeout == 0) (void) fprintf(stderr, @@ -161,14 +168,14 @@ alarmcatch() signal(SIGALRM, alarmcatch); (void) alarm(120); timeout = 1; + errno = save_errno; } /* * Here if an inquisitive operator interrupts the dump program */ void -interrupt(signo) - int signo; +interrupt(int signo) { msg("Interrupt received.\n"); if (query("Do you want to abort dump?")) @@ -184,9 +191,9 @@ struct group *gp; /* * Get the names from the group entry "operator" to notify. - */ + */ void -set_operators() +set_operators(void) { if (!notify) /*not going to notify*/ return; @@ -206,8 +213,7 @@ struct tm *localclock; * that the process control groups are not messed up */ void -broadcast(message) - char *message; +broadcast(const char *message) { time_t clock; FILE *f_utmp; @@ -262,16 +268,15 @@ broadcast(message) } static void -sendmes(tty, message) - char *tty, *message; +sendmes(const char *tty, const char *message) { - char t[50], buf[BUFSIZ]; - register char *cp; + char t[MAXPATHLEN], buf[BUFSIZ]; + register const char *cp; int lmsg = 1; FILE *f_tty; (void) strcpy(t, _PATH_DEV); - (void) strcat(t, tty); + (void) strncat(t, tty, sizeof t - strlen(_PATH_DEV) - 1); if ((f_tty = fopen(t, "w")) != NULL) { setbuf(f_tty, buf); @@ -284,7 +289,7 @@ DUMP: NEEDS ATTENTION: ", if (*cp == '\0') { if (lmsg) { cp = message; - if (*cp == '\0') + if (!(cp && *cp != '\0')) break; lmsg = 0; } else @@ -305,7 +310,7 @@ DUMP: NEEDS ATTENTION: ", time_t tschedule = 0; void -timeest() +timeest(void) { time_t tnow, deltat; @@ -313,7 +318,7 @@ timeest() if (tnow >= tschedule) { tschedule = tnow + 300; if (blockswritten < 500) - return; + return; deltat = tstart_writing - tnow + (1.0 * (tnow - tstart_writing)) / blockswritten * tapesize; @@ -324,7 +329,7 @@ timeest() } void -#if __STDC__ +#ifdef __STDC__ msg(const char *fmt, ...) #else msg(fmt, va_alist) @@ -338,7 +343,7 @@ msg(fmt, va_alist) #ifdef TDEBUG (void) fprintf(stderr, "pid=%d ", getpid()); #endif -#if __STDC__ +#ifdef __STDC__ va_start(ap, fmt); #else va_start(ap); @@ -346,12 +351,12 @@ msg(fmt, va_alist) (void) vfprintf(stderr, fmt, ap); (void) fflush(stdout); (void) fflush(stderr); - (void) vsprintf(lastmsg, fmt, ap); + (void) vsnprintf(lastmsg, sizeof(lastmsg), fmt, ap); va_end(ap); } void -#if __STDC__ +#ifdef __STDC__ msgtail(const char *fmt, ...) #else msgtail(fmt, va_alist) @@ -360,7 +365,7 @@ msgtail(fmt, va_alist) #endif { va_list ap; -#if __STDC__ +#ifdef __STDC__ va_start(ap, fmt); #else va_start(ap); @@ -370,7 +375,7 @@ msgtail(fmt, va_alist) } void -#if __STDC__ +#ifdef __STDC__ quit(const char *fmt, ...) #else quit(fmt, va_alist) @@ -384,7 +389,7 @@ quit(fmt, va_alist) #ifdef TDEBUG (void) fprintf(stderr, "pid=%d ", getpid()); #endif -#if __STDC__ +#ifdef __STDC__ va_start(ap, fmt); #else va_start(ap); @@ -401,9 +406,8 @@ quit(fmt, va_alist) * we don't actually do it */ -struct fstab * -allocfsent(fs) - register struct fstab *fs; +static struct fstab * +allocfsent(struct fstab *fs) { register struct fstab *new; @@ -426,7 +430,7 @@ struct pfstab { static struct pfstab *table; void -getfstab() +getfstab(void) { register struct fstab *fs; register struct pfstab *pf; @@ -463,8 +467,7 @@ getfstab() * The file name can omit the leading '/'. */ struct fstab * -fstabsearch(key) - char *key; +fstabsearch(const char *key) { register struct pfstab *pf; register struct fstab *fs; @@ -492,9 +495,7 @@ fstabsearch(key) #ifdef __linux__ struct fstab * -fstabsearchdir(key, directory) - char *key; - char *directory; +fstabsearchdir(const char *key, char *directory) { register struct pfstab *pf; register struct fstab *fs; @@ -529,8 +530,7 @@ fstabsearchdir(key, directory) * Tell the operator what to do */ void -lastdump(arg) - char arg; /* w ==> just what to do; W ==> most recent dumps */ +lastdump(char arg) /* w ==> just what to do; W ==> most recent dumps */ { register int i; register struct fstab *dt; @@ -559,7 +559,7 @@ lastdump(arg) dt = fstabsearch(dtwalk->dd_name); dumpme = (dt != NULL && dt->fs_freq != 0 && - dtwalk->dd_ddate < tnow - (dt->fs_freq * SECSPERDAY)); + dtwalk->dd_ddate < tnow - (dt->fs_freq * 86400)); if (arg != 'w' || dumpme) (void) printf( "%c %8s\t(%6s) Last dump: Level %c, Date %s\n", @@ -572,8 +572,7 @@ lastdump(arg) } int -datesort(a1, a2) - const void *a1, *a2; +datesort(const void *a1, const void *a2) { struct dumpdates *d1 = *(struct dumpdates **)a1; struct dumpdates *d2 = *(struct dumpdates **)a2;