]> git.wh0rd.org - dump.git/commitdiff
Fixed the -e option on a directory.
authorStelian Pop <stelian@popies.net>
Fri, 1 Sep 2000 14:26:23 +0000 (14:26 +0000)
committerStelian Pop <stelian@popies.net>
Fri, 1 Sep 2000 14:26:23 +0000 (14:26 +0000)
CHANGES
THANKS
dump/traverse.c

diff --git a/CHANGES b/CHANGES
index d8d7f793402341fe708c75906df238167a11a4d2..6ca6bb17f64786fb837189be37902ee4bbcc3cb0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,4 @@
-$Id: CHANGES,v 1.80 2000/08/30 08:55:15 stelian Exp $
+$Id: CHANGES,v 1.81 2000/09/01 14:26:23 stelian Exp $
 
 Changes between versions 0.4b19 and 0.4b20 (released ???????????????)
 =====================================================================
 
 Changes between versions 0.4b19 and 0.4b20 (released ???????????????)
 =====================================================================
@@ -16,6 +16,10 @@ Changes between versions 0.4b19 and 0.4b20 (released ???????????????)
        will preserve the functionality. Thanks to Bernhard Erdmann
        <bernhard.erdmann@gmx.de> for reporting the bug.
 
        will preserve the functionality. Thanks to Bernhard Erdmann
        <bernhard.erdmann@gmx.de> for reporting the bug.
 
+3.     The 'exclude inode' option, if applied to a directory
+       inode, excludes now correctly all the leaves of this 
+       directory. Thanks to John R. Dennison 
+       <gerdesas@users.sourceforge.net> for reporting the bug.
 
 Changes between versions 0.4b18 and 0.4b19 (released August 20, 2000)
 =====================================================================
 
 Changes between versions 0.4b18 and 0.4b19 (released August 20, 2000)
 =====================================================================
diff --git a/THANKS b/THANKS
index 94d27bc90e093b0dab7db498c236215f4f48e1fb..fc1b053f60b4e332e70bdfaf940b0f0b51b03a38 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -1,4 +1,4 @@
-$Id: THANKS,v 1.36 2000/08/30 08:55:15 stelian Exp $
+$Id: THANKS,v 1.37 2000/09/01 14:26:23 stelian Exp $
 
 Dump and restore were written by the people of the CSRG at the University
 of California, Berkeley.
 
 Dump and restore were written by the people of the CSRG at the University
 of California, Berkeley.
@@ -29,6 +29,7 @@ Isaac Chuang          ike@isl.stanford.edu
 Rainer Clasen          bj@ncc.cicely.de
 W. Reilly Cooley       wcooley@nakedape.cc
 Abhijit Dasgupta       abhijit@ans.net
 Rainer Clasen          bj@ncc.cicely.de
 W. Reilly Cooley       wcooley@nakedape.cc
 Abhijit Dasgupta       abhijit@ans.net
+John R. Dennison       gerdesas@users.sourceforge.net
 Andreas Dilger         adilger@home.com
 Bernhard Erdmann       bernhard.erdmann@gmx.de
 Jason Fearon           jasonf@netrider.org.au
 Andreas Dilger         adilger@home.com
 Bernhard Erdmann       bernhard.erdmann@gmx.de
 Jason Fearon           jasonf@netrider.org.au
index ff8e168f40ad11320c1a976278220692ebabe125..90cf97b51557bde998416942f22fa6ec76930ae9 100644 (file)
@@ -40,7 +40,7 @@
 
 #ifndef lint
 static const char rcsid[] =
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: traverse.c,v 1.18 2000/05/28 18:16:42 stelian Exp $";
+       "$Id: traverse.c,v 1.19 2000/09/01 14:26:23 stelian Exp $";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -99,6 +99,7 @@ static        void dmpindir __P((ino_t ino, daddr_t blk, int level, fsizeT *size));
 static int searchdir __P((ino_t ino, daddr_t blkno, long size, long filesize));
 #endif
 static void mapfileino __P((ino_t ino, long *tapesize, int *dirskipped));
 static int searchdir __P((ino_t ino, daddr_t blkno, long size, long filesize));
 #endif
 static void mapfileino __P((ino_t ino, long *tapesize, int *dirskipped));
+static int exclude_ino __P((ino_t ino));
 
 /* #define EXT3_FEATURE_INCOMPAT_RECOVER */
 
 
 /* #define EXT3_FEATURE_INCOMPAT_RECOVER */
 
@@ -179,21 +180,41 @@ blockest(struct dinode *dp)
        return (blkest + 1);
 }
 
        return (blkest + 1);
 }
 
+extern ino_t iexclude_list[IEXCLUDE_MAXNUM];   /* the inode exclude list */
+extern int iexclude_num;       /* number of elements in the list */
+
+/*
+ * This tests whether an inode is in the exclude list 
+ */
+int
+exclude_ino(ino_t ino)
+{
+       /* 04-Feb-00 ILC */
+       if (iexclude_num) {     /* if there are inodes in the exclude list */
+               int idx;        /* then check this inode against it */
+               for (idx = 0; idx < iexclude_num; idx++)
+                       if (ino == iexclude_list[idx])
+                               return 1;
+       }
+       return 0;
+}
+
 /* Auxiliary macro to pick up files changed since previous dump. */
 #define        CHANGEDSINCE(dp, t) \
        ((dp)->di_mtime >= (t) || (dp)->di_ctime >= (t))
 
 /* Auxiliary macro to pick up files changed since previous dump. */
 #define        CHANGEDSINCE(dp, t) \
        ((dp)->di_mtime >= (t) || (dp)->di_ctime >= (t))
 
-/* The WANTTODUMP macro decides whether a file should be dumped. */
+/* The NODUMP_FLAG macro tests if a file has the nodump flag. */
 #ifdef UF_NODUMP
 #ifdef UF_NODUMP
-#define        WANTTODUMP(dp) \
-       (CHANGEDSINCE(dp, spcl.c_ddate) && \
-        (nonodump || ((dp)->di_flags & UF_NODUMP) != UF_NODUMP))
+#define NODUMP_FLAG(dp) (!nonodump && (((dp)->di_flags & UF_NODUMP) == UF_NODUMP))
 #else
 #else
-#define        WANTTODUMP(dp) CHANGEDSINCE(dp, spcl.c_ddate)
+#define NODUMP_FLAG(dp) 0
 #endif
 
 #endif
 
-extern ino_t iexclude_list[IEXCLUDE_MAXNUM];   /* the inode exclude list */
-extern int iexclude_num;       /* number of elements in the list */
+/* The WANTTODUMP macro decides whether a file should be dumped. */
+#define        WANTTODUMP(dp, ino) \
+       (CHANGEDSINCE(dp, spcl.c_ddate) && \
+        (!NODUMP_FLAG(dp)) && \
+        (!exclude_ino(ino)))
 
 /*
  * Determine if given inode should be dumped
 
 /*
  * Determine if given inode should be dumped
@@ -223,20 +244,9 @@ mapfileino(ino_t ino, long *tapesize, int *dirskipped)
         */
        SETINO(ino, usedinomap);
 
         */
        SETINO(ino, usedinomap);
 
-       /* 04-Feb-00 ILC */
-       if(iexclude_num) {      /* if there are inodes in the exclude list */
-               int idx;        /* then check this inode against it */
-               for (idx=0; idx<iexclude_num; idx++) {
-                       if (ino == iexclude_list[idx]) {
-                               msg("Excluding inode number %d\n", ino);
-                               return; /* if in list then skip */
-                       }
-               }
-       }
-
        if (mode == IFDIR)
                SETINO(ino, dumpdirmap);
        if (mode == IFDIR)
                SETINO(ino, dumpdirmap);
-       if (WANTTODUMP(dp)) {
+       if (WANTTODUMP(dp, ino)) {
                SETINO(ino, dumpinomap);
                if (mode != IFREG && mode != IFDIR && mode != IFLNK)
                        *tapesize += 1;
                SETINO(ino, dumpinomap);
                if (mode != IFREG && mode != IFDIR && mode != IFLNK)
                        *tapesize += 1;
@@ -245,10 +255,8 @@ mapfileino(ino_t ino, long *tapesize, int *dirskipped)
                return;
        }
        if (mode == IFDIR) {
                return;
        }
        if (mode == IFDIR) {
-#ifdef UF_NODUMP
-               if (!nonodump && (dp->di_flags & UF_NODUMP))
+               if ( NODUMP_FLAG(dp) || exclude_ino(ino) )
                        CLRINO(ino, usedinomap);
                        CLRINO(ino, usedinomap);
-#endif
                *dirskipped = 1;
        }
 }
                *dirskipped = 1;
        }
 }