* 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
*/
/*-
*/
#ifndef lint
-#if 0
-static char sccsid[] = "@(#)itime.c 8.1 (Berkeley) 6/5/93";
-#endif
static const char rcsid[] =
- "$Id: itime.c,v 1.2 1999/10/11 12:53:22 stelian Exp $";
+ "$Id: itime.c,v 1.6 1999/10/13 09:57:19 stelian Exp $";
#endif /* not lint */
#include <sys/param.h>
static void readdumptimes __P((FILE *));
void
-initdumptimes()
+initdumptimes(int createdumpdates)
{
FILE *df;
strerror(errno));
/* NOTREACHED */
}
- /*
- * Dumpdates does not exist, make an empty one.
- */
- msg("WARNING: no file `%s', making an empty one\n", dumpdates);
- if ((df = fopen(dumpdates, "w")) == NULL) {
- quit("cannot create %s: %s\n", dumpdates,
- strerror(errno));
- /* NOTREACHED */
+ if (createdumpdates) {
+ /*
+ * Dumpdates does not exist, make an empty one.
+ */
+ msg("WARNING: no file `%s', making an empty one\n", dumpdates);
+ if ((df = fopen(dumpdates, "w")) == NULL) {
+ quit("cannot create %s: %s\n", dumpdates,
+ strerror(errno));
+ /* NOTREACHED */
+ }
+ (void) fclose(df);
+ if ((df = fopen(dumpdates, "r")) == NULL) {
+ quit("cannot read %s even after creating it: %s\n",
+ dumpdates, strerror(errno));
+ /* NOTREACHED */
+ }
}
+ else
+ msg("WARNING: no file `%s'\n", dumpdates);
+ }
+ if (df != NULL) {
+ (void) flock(fileno(df), LOCK_SH);
+ readdumptimes(df);
(void) fclose(df);
- if ((df = fopen(dumpdates, "r")) == NULL) {
- quit("cannot read %s even after creating it: %s\n",
- dumpdates, strerror(errno));
- /* NOTREACHED */
- }
}
- (void) flock(fileno(df), LOCK_SH);
- readdumptimes(df);
- (void) fclose(df);
}
static void
-readdumptimes(df)
- FILE *df;
+readdumptimes(FILE *df)
{
register int i;
register struct dumptime *dtwalk;
}
void
-getdumptime()
+getdumptime(int createdumpdates)
{
register struct dumpdates *ddp;
register int i;
spcl.c_ddate = 0;
lastlevel = '0';
- initdumptimes();
+ /* if we're not going to update dumpdates, there's no point in reading
+ it, particularly since /var might not be mounted... wait until here
+ to benefit from the initialization of variables needed by parent */
+ if (!uflag && level == lastlevel)
+ return;
+ initdumptimes(createdumpdates);
+ if (ddatev == NULL)
+ return;
/*
* Go find the entry with the same name for a lower increment
* and older date
}
void
-putdumptime()
+putdumptime(void)
{
FILE *df;
register struct dumpdates *dtwalk;
}
static void
-dumprecout(file, what)
- FILE *file;
- struct dumpdates *what;
+dumprecout(FILE *file, struct dumpdates *what)
{
if (fprintf(file, DUMPOUTFMT,
int recno;
static int
-getrecord(df, ddatep)
- FILE *df;
- struct dumpdates *ddatep;
+getrecord(FILE *df, struct dumpdates *ddatep)
{
char tbuf[BUFSIZ];
recno = 0;
- if ( (fgets(tbuf, sizeof (tbuf), df)) != tbuf)
+ if (fgets(tbuf, sizeof (tbuf), df) == NULL)
return(-1);
recno++;
if (makedumpdate(ddatep, tbuf) < 0)
}
static int
-makedumpdate(ddp, tbuf)
- struct dumpdates *ddp;
- char *tbuf;
+makedumpdate(struct dumpdates *ddp, char *tbuf)
{
- char un_buf[128];
+ char un_buf[BUFSIZ];
(void) sscanf(tbuf, DUMPINFMT, ddp->dd_name, &ddp->dd_level, un_buf);
ddp->dd_ddate = unctime(un_buf);