]> 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 ???????????????)
 =====================================================================
@@ -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.
 
+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)
 =====================================================================
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.
@@ -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
+John R. Dennison       gerdesas@users.sourceforge.net
 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[] =
-       "$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>
@@ -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 exclude_ino __P((ino_t ino));
 
 /* #define EXT3_FEATURE_INCOMPAT_RECOVER */
 
@@ -179,21 +180,41 @@ blockest(struct dinode *dp)
        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))
 
-/* 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
-#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
-#define        WANTTODUMP(dp) CHANGEDSINCE(dp, spcl.c_ddate)
+#define NODUMP_FLAG(dp) 0
 #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
@@ -223,20 +244,9 @@ mapfileino(ino_t ino, long *tapesize, int *dirskipped)
         */
        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 (WANTTODUMP(dp)) {
+       if (WANTTODUMP(dp, ino)) {
                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) {
-#ifdef UF_NODUMP
-               if (!nonodump && (dp->di_flags & UF_NODUMP))
+               if ( NODUMP_FLAG(dp) || exclude_ino(ino) )
                        CLRINO(ino, usedinomap);
-#endif
                *dirskipped = 1;
        }
 }