]> git.wh0rd.org - dump.git/blobdiff - dump/itime.c
Check for the e2fsprogs header <ext2fs/ext2_fs.h> instead of the kernel header if...
[dump.git] / dump / itime.c
index e9a9802a0f7e78327204e509a07935966b8e7b47..cc92bb5b9e1e2a08ea111e95e8379d39bebcd51e 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.8 2000/01/07 19:24:04 tiniou Exp $";
+       "$Id: itime.c,v 1.19 2001/06/18 10:58:28 stelian Exp $";
 #endif /* not lint */
 
+#include <config.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#ifdef __STDC__
+#include <stdlib.h>
+#include <string.h>
+#endif
+
 #include <sys/param.h>
 #include <sys/time.h>
 #ifdef __linux__
+#ifdef HAVE_EXT2FS_EXT2_FS_H
+#include <ext2fs/ext2_fs.h>
+#else
 #include <linux/ext2_fs.h>
+#endif
+#include <ext2fs/ext2fs.h>
+#include <time.h>
 #include <bsdcompat.h>
 #include <sys/file.h>
 #include <unistd.h>
-#else
-#ifdef sunos
+#elif defined sunos
 #include <sys/vnode.h>
 
 #include <ufs/fsdir.h>
@@ -60,28 +75,15 @@ static const char rcsid[] =
 #else
 #include <ufs/ufs/dinode.h>
 #endif
-#endif
 
 #include <protocols/dumprestore.h>
 
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-#ifdef __linux__
-#include <ext2fs/ext2fs.h>
-#endif
-
 #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 *));
@@ -158,12 +160,10 @@ getdumptime(int createdumpdates)
 {
        register struct dumpdates *ddp;
        register int i;
-       char *fname;
 
-       fname = disk;
 #ifdef FDEBUG
        msg("Looking for name %s in dumpdates = %s for level = %c\n",
-               fname, dumpdates, level);
+               disk, dumpdates, level);
 #endif
        spcl.c_ddate = 0;
        lastlevel = '0';
@@ -182,15 +182,11 @@ getdumptime(int createdumpdates)
         *      and older date
         */
        ITITERATE(i, ddp) {
-               if (strncmp(fname, ddp->dd_name, sizeof (ddp->dd_name)) != 0)
+               if (strncmp(disk, ddp->dd_name, sizeof (ddp->dd_name)) != 0)
                        continue;
                if (ddp->dd_level >= level)
                        continue;
-#ifdef __linux__
                if (ddp->dd_ddate <= (time_t)spcl.c_ddate)
-#else
-               if (ddp->dd_ddate <= spcl.c_ddate)
-#endif
                        continue;
                spcl.c_ddate = ddp->dd_ddate;
                lastlevel = ddp->dd_level;
@@ -204,7 +200,6 @@ putdumptime(void)
        register struct dumpdates *dtwalk;
        register int i;
        int fd;
-       char *fname;
 
        if(uflag == 0)
                return;
@@ -212,7 +207,6 @@ putdumptime(void)
                quit("cannot rewrite %s: %s\n", dumpdates, strerror(errno));
        fd = fileno(df);
        (void) flock(fd, LOCK_EX);
-       fname = disk;
        free((char *)ddatev);
        ddatev = 0;
        nddates = 0;
@@ -223,7 +217,7 @@ putdumptime(void)
                quit("fseek: %s\n", strerror(errno));
        spcl.c_ddate = 0;
        ITITERATE(i, dtwalk) {
-               if (strncmp(fname, dtwalk->dd_name,
+               if (strncmp(disk, dtwalk->dd_name,
                                sizeof (dtwalk->dd_name)) != 0)
                        continue;
                if (dtwalk->dd_level != level)
@@ -238,7 +232,7 @@ putdumptime(void)
                (struct dumpdates *)calloc(1, sizeof (struct dumpdates));
        nddates += 1;
   found:
-       (void) strncpy(dtwalk->dd_name, fname, sizeof (dtwalk->dd_name));
+       (void) strncpy(dtwalk->dd_name, disk, sizeof (dtwalk->dd_name));
        dtwalk->dd_level = level;
        dtwalk->dd_ddate = spcl.c_date;
 
@@ -250,12 +244,6 @@ putdumptime(void)
        if (ftruncate(fd, ftell(df)))
                quit("ftruncate (%s): %s\n", dumpdates, strerror(errno));
        (void) fclose(df);
-       msg("level %c dump on %s", level,
-#ifdef __linux__
-               spcl.c_date == 0 ? "the epoch\n" : ctime4(&spcl.c_date));
-#else
-               spcl.c_date == 0 ? "the epoch\n" : ctime(&spcl.c_date));
-#endif
 }
 
 static void
@@ -299,7 +287,7 @@ makedumpdate(struct dumpdates *ddp, char *tbuf)
        /* device name */
        if ( NULL == (tok = strsep( &tbuf, " ")) )
                return(-1);
-       if ( strlen(tok) >  NAME_MAX )
+       if ( strlen(tok) >  MAXPATHLEN )
                return(-1);
        strcpy(ddp->dd_name, tok);
 
@@ -317,5 +305,7 @@ makedumpdate(struct dumpdates *ddp, char *tbuf)
        ddp->dd_ddate = unctime(tbuf);
        if (ddp->dd_ddate < 0)
                return(-1);
+       /* fstab entry */
+       ddp->dd_fstab = fstabsearch(ddp->dd_name);
        return(0);
 }