]> git.wh0rd.org - dump.git/blobdiff - dump/traverse.c
Compatibility between dumps made on little endian machines vs. big endian machines...
[dump.git] / dump / traverse.c
index 9c275c1a1d4934a658943151c9118c82f8c084ba..204f518de8e5b6cf712eb9913361673745eedac8 100644 (file)
@@ -2,7 +2,7 @@
  *     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
  */
 
 /*-
@@ -40,7 +40,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: traverse.c,v 1.12 2000/01/09 23:47:33 tiniou Exp $";
+       "$Id: traverse.c,v 1.16 2000/02/10 09:42:32 stelian Exp $";
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -190,6 +190,9 @@ blockest(struct dinode *dp)
 #define        WANTTODUMP(dp) CHANGEDSINCE(dp, spcl.c_ddate)
 #endif
 
+extern ino_t iexclude_list[IEXCLUDE_MAXNUM];   /* the inode exclude list */
+extern int iexclude_num;       /* number of elements in the list */
+
 /*
  * Determine if given inode should be dumped
  */
@@ -217,6 +220,18 @@ mapfileino(ino_t ino, long *tapesize, int *dirskipped)
         * to the 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 (WANTTODUMP(dp)) {
@@ -667,7 +682,7 @@ dumpino(struct dinode *dp, ino_t ino)
        obi.di_gen = dp->di_gen;
        memmove(&obi.di_db, &dp->di_db, (NDADDR + NIADDR) * sizeof(daddr_t));
        if (dp->di_file_acl || dp->di_dir_acl)
-               warn("ACLs in inode #%ld won't be dumped", ino);
+               warn("ACLs in inode #%ld won't be dumped", (long)ino);
        memmove(&spcl.c_dinode, &obi, sizeof(obi));
 #else  /* __linux__ */
        spcl.c_dinode = *dp;
@@ -788,22 +803,21 @@ static int
 convert_dir(struct ext2_dir_entry *dirent, int offset, int blocksize, char *buf, void *private)
 {
        struct convert_dir_context *p;
-       struct direct *dp;
+       struct olddirect *dp;
        int reclen;
 
        p = (struct convert_dir_context *)private;
 
        reclen = EXT2_DIR_REC_LEN((dirent->name_len & 0xFF) + 1);
        if (((p->offset + reclen - 1) / p->bs) != (p->offset / p->bs)) {
-               dp = (struct direct *)(p->buf + p->prev_offset);
+               dp = (struct olddirect *)(p->buf + p->prev_offset);
                dp->d_reclen += p->bs - (p->offset % p->bs);
                p->offset += p->bs - (p->offset % p->bs);
        }
 
-       dp = (struct direct *)(p->buf + p->offset);
+       dp = (struct olddirect *)(p->buf + p->offset);
        dp->d_ino = dirent->inode;
        dp->d_reclen = reclen;
-       dp->d_type = 0;
        dp->d_namlen = dirent->name_len & 0xFF;
        strncpy(dp->d_name, dirent->name, dp->d_namlen);
        dp->d_name[dp->d_namlen] = '\0';
@@ -850,7 +864,7 @@ dumpdirino(struct dinode *dp, ino_t ino)
        /* Do the conversion */
        retval = ext2fs_dir_iterate(fs, ino, 0, NULL, convert_dir, (void *)&cdc);
        if (retval) {
-               com_err(disk, retval, "while converting directory #%ld\n", ino);
+               com_err(disk, retval, "while converting directory #%ld\n", (long)ino);
                exit(X_ABORT);
        }
        /* Fix the last entry */
@@ -877,7 +891,7 @@ dumpdirino(struct dinode *dp, ino_t ino)
        obi.di_gen = dp->di_gen;
        memmove(&obi.di_db, &dp->di_db, (NDADDR + NIADDR) * sizeof(daddr_t));
        if (dp->di_file_acl || dp->di_dir_acl)
-               warn("ACLs in inode #%ld won't be dumped", ino);
+               warn("ACLs in inode #%ld won't be dumped", (long)ino);
        memmove(&spcl.c_dinode, &obi, sizeof(obi));
 #else  /* __linux__ */
        spcl.c_dinode = *dp;