* 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
+ * Stelian Pop <pop@cybercable.fr> - AlcĂ´ve <www.alcove.fr>, 2000
*/
/*-
#ifndef lint
static const char rcsid[] =
- "$Id: itime.c,v 1.6 1999/10/13 09:57:19 stelian Exp $";
+ "$Id: itime.c,v 1.12 2000/11/10 14:42:25 stelian Exp $";
#endif /* not lint */
#include <sys/param.h>
#include "dump.h"
-struct dumpdates **ddatev = 0;
-int nddates = 0;
-int ddates_in = 0;
-struct dumptime *dthead = 0;
+struct dumpdates **ddatev;
+int nddates;
+int ddates_in;
+struct dumptime *dthead;
static void dumprecout __P((FILE *, struct dumpdates *));
static int getrecord __P((FILE *, struct dumpdates *));
spcl.c_ddate = 0;
lastlevel = '0';
- /* 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)
+ /* If this is a level 0 dump, and we're not updating
+ dumpdates, there's no point in trying to read
+ dumpdates. It may not exist yet, or may not be mounted. For
+ incrementals, we *must* read dumpdates (fail if it's not there!) */
+ if ( (level == lastlevel) && !createdumpdates)
return;
initdumptimes(createdumpdates);
if (ddatev == NULL)
dumprecout(FILE *file, struct dumpdates *what)
{
- if (fprintf(file, DUMPOUTFMT,
+ if (fprintf(file, "%s %c %s",
what->dd_name,
what->dd_level,
ctime(&what->dd_ddate)) < 0)
static int
makedumpdate(struct dumpdates *ddp, char *tbuf)
{
- char un_buf[BUFSIZ];
+ char *tok;
+
+ /* device name */
+ if ( NULL == (tok = strsep( &tbuf, " ")) )
+ return(-1);
+ if ( strlen(tok) > MAXPATHLEN )
+ return(-1);
+ strcpy(ddp->dd_name, tok);
+
+ /* eat whitespace */
+ for( ; *tbuf == ' ' ; tbuf++);
+
+ /* dump level */
+ ddp->dd_level = *tbuf;
+ ++tbuf;
+
+ /* eat whitespace */
+ for( ; *tbuf == ' ' ; tbuf++);
- (void) sscanf(tbuf, DUMPINFMT, ddp->dd_name, &ddp->dd_level, un_buf);
- ddp->dd_ddate = unctime(un_buf);
+ /* dump date */
+ ddp->dd_ddate = unctime(tbuf);
if (ddp->dd_ddate < 0)
return(-1);
+ /* fstab entry */
+ ddp->dd_fstab = fstabsearch(ddp->dd_name);
return(0);
}