* Ported to Linux's Second Extended File System as part of the
* dump and restore backup suit
* Remy Card <card@Linux.EU.Org>, 1994-1997
- * Stelian Pop <pop@cybercable.fr>, 1999
- *
+ * Stelian Pop <pop@cybercable.fr>, 1999-2000
*/
/*-
*/
#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 $";
+ "$Id: optr.c,v 1.10 2000/02/10 09:42:32 stelian Exp $";
#endif /* not lint */
#include <sys/param.h>
#include <stdarg.h>
#include <unistd.h>
#include <utmp.h>
+#include <sys/stat.h>
#ifdef __linux__
#include <linux/ext2_fs.h>
FILE *mytty;
time_t firstprompt, when_answered;
- firstprompt = time(NULL);
+#ifdef __linux__
+ (void)time4(&(firstprompt));
+#else
+ (void)time((time_t *)&(firstprompt));
+#endif
if ((mytty = fopen(_PATH_TTY, "r")) == NULL)
quit("fopen on %s fails: %s\n", _PATH_TTY, strerror(errno));
if (signal(SIGALRM, sig) == SIG_IGN)
signal(SIGALRM, SIG_IGN);
(void) fclose(mytty);
- when_answered = time(NULL);
+#ifdef __linux__
+ (void)time4(&(when_answered));
+#else
+ (void)time((time_t *)&(when_answered));
+#endif
/*
* Adjust the base for time estimates to ignore time we spent waiting
* for operator input.
*/
- if (tstart_writing != 0)
+ if ((tstart_writing != 0) && (when_answered != (time_t)-1) && (firstprompt != (time_t)-1))
tstart_writing += (when_answered - firstprompt);
return(back);
}
{
time_t tnow, deltat;
+#ifdef __linux__
+ (void) time4(&tnow);
+#else
(void) time((time_t *) &tnow);
+#endif
if (tnow >= tschedule) {
tschedule = tnow + 300;
if (blockswritten < 500)
return;
+ if (blockswritten > tapesize)
+ tapesize = blockswritten;
deltat = tstart_writing - tnow +
(1.0 * (tnow - tstart_writing))
/ blockswritten * tapesize;
va_start(ap);
#endif
(void) vfprintf(stderr, fmt, ap);
+ va_end(ap);
(void) fflush(stdout);
(void) fflush(stderr);
+#ifdef __STDC__
+ va_start(ap, fmt);
+#else
+ va_start(ap);
+#endif
(void) vsnprintf(lastmsg, sizeof(lastmsg), fmt, ap);
va_end(ap);
}
register struct fstab *new;
new = (struct fstab *)malloc(sizeof (*fs));
- if (new == NULL ||
- (new->fs_file = strdup(fs->fs_file)) == NULL ||
+ if (new == NULL)
+ quit("%s\n", strerror(errno));
+ if (strlen(fs->fs_file) > 1 && fs->fs_file[strlen(fs->fs_file) - 1] == '/')
+ fs->fs_file[strlen(fs->fs_file) - 1] = '\0';
+ if ((new->fs_file = strdup(fs->fs_file)) == NULL ||
(new->fs_type = strdup(fs->fs_type)) == NULL ||
(new->fs_spec = strdup(fs->fs_spec)) == NULL)
quit("%s\n", strerror(errno));
register struct fstab *fs;
register struct fstab *found_fs = NULL;
unsigned int size = 0;
+ struct stat buf;
+
+ if (stat(key, &buf) == 0 && S_ISBLK(buf.st_mode))
+ return NULL;
for (pf = table; pf != NULL; pf = pf->pf_next) {
fs = pf->pf_fstab;
{
register int i;
register struct fstab *dt;
- register struct dumpdates *dtwalk;
+ register struct dumpdates *dtwalk=NULL;
char *lastname, *date;
int dumpme;
time_t tnow;
(void) time(&tnow);
getfstab(); /* /etc/fstab input */
- initdumptimes(); /* /etc/dumpdates input */
- qsort((char *) ddatev, nddates, sizeof(struct dumpdates *), datesort);
-
- if (arg == 'w')
- (void) printf("Dump these file systems:\n");
- else
- (void) printf("Last dump(s) done (Dump '>' file systems):\n");
- lastname = "??";
- ITITERATE(i, dtwalk) {
- if (strncmp(lastname, dtwalk->dd_name,
- sizeof(dtwalk->dd_name)) == 0)
- continue;
- date = (char *)ctime(&dtwalk->dd_ddate);
- date[16] = '\0'; /* blast away seconds and year */
- lastname = dtwalk->dd_name;
- dt = fstabsearch(dtwalk->dd_name);
- dumpme = (dt != NULL &&
- dt->fs_freq != 0 &&
- 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",
- dumpme && (arg != 'w') ? '>' : ' ',
- dtwalk->dd_name,
- dt ? dt->fs_file : "",
- dtwalk->dd_level,
- date);
+ initdumptimes(0); /* dumpdates input */
+ if (ddatev != NULL) {
+ qsort((char *) ddatev, nddates, sizeof(struct dumpdates *), datesort);
+
+ if (arg == 'w')
+ (void) printf("Dump these file systems:\n");
+ else
+ (void) printf("Last dump(s) done (Dump '>' file systems):\n");
+ lastname = "??";
+ ITITERATE(i, dtwalk) {
+ if (strncmp(lastname, dtwalk->dd_name,
+ sizeof(dtwalk->dd_name)) == 0)
+ continue;
+ date = (char *)ctime(&dtwalk->dd_ddate);
+ date[16] = '\0'; /* blast away seconds and year */
+ lastname = dtwalk->dd_name;
+ dt = fstabsearch(dtwalk->dd_name);
+ dumpme = (dt != NULL &&
+ dt->fs_freq != 0 &&
+ 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",
+ dumpme && (arg != 'w') ? '>' : ' ',
+ dtwalk->dd_name,
+ dt ? dt->fs_file : "",
+ dtwalk->dd_level,
+ date);
+ }
}
}