]> git.wh0rd.org - dump.git/blobdiff - dump/itime.c
64bit and glibc 2.2.2 fixes.
[dump.git] / dump / itime.c
index 62792253d13b33e0ccc8ce8a0936a3b809a47c68..6eebd2c524b00343234328e505f56a747eef4355 100644 (file)
@@ -2,7 +2,8 @@
  *     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@noos.fr>, 1999-2000
+ *     Stelian Pop <pop@noos.fr> - AlcĂ´ve <www.alcove.fr>, 2000
  */
 
 /*-
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: itime.c,v 1.7 1999/10/31 19:48:28 tiniou Exp $";
+       "$Id: itime.c,v 1.15 2001/02/22 10:57:40 stelian Exp $";
 #endif /* not lint */
 
+#include <config.h>
 #include <sys/param.h>
 #include <sys/time.h>
 #ifdef __linux__
 #include <linux/ext2_fs.h>
+#include <time.h>
 #include <bsdcompat.h>
 #include <sys/file.h>
 #include <unistd.h>
@@ -78,10 +81,10 @@ static const char rcsid[] =
 
 #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 *));
@@ -168,10 +171,11 @@ getdumptime(int createdumpdates)
        spcl.c_ddate = 0;
        lastlevel = '0';
 
-       /* If this is a level 0 dump, there's no point in trying to read
+       /* 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)
+       if ( (level == lastlevel) && !createdumpdates)
                return;
        initdumptimes(createdumpdates);
        if (ddatev == NULL)
@@ -261,7 +265,7 @@ static void
 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)
@@ -293,11 +297,30 @@ getrecord(FILE *df, struct dumpdates *ddatep)
 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);
 }