]> git.wh0rd.org - dump.git/blobdiff - dump/traverse.c
Fixed the signal handling in dump.
[dump.git] / dump / traverse.c
index ed52904ffe6dd150c35ac0e20a438fc4c367272d..ff8e168f40ad11320c1a976278220692ebabe125 100644 (file)
@@ -40,7 +40,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: traverse.c,v 1.15 2000/02/04 20:22:21 stelian Exp $";
+       "$Id: traverse.c,v 1.18 2000/05/28 18:16:42 stelian Exp $";
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -112,6 +112,7 @@ int dump_fs_open(const char *disk, ext2_filsys *fs)
 #else
        retval = ext2fs_open(disk, 0, 0, 0, unix_io_manager, fs);
 #endif
+#if defined(EXT2_LIB_FEATURE_COMPAT_SUPP) && defined(EXT2_LIB_FEATURE_INCOMPAT_SUPP) && defined(EXT2_LIB_FEATURE_RO_COMPAT_SUPP) && defined(EXT2_ET_UNSUPP_FEATURE) && defined(EXT2_ET_RO_UNSUPP_FEATURE)
        if (!retval) {
                s = (struct ext2fs_sb *) (*fs)->super;
                if ((s->s_feature_compat & ~EXT2_LIB_FEATURE_COMPAT_SUPP) ||
@@ -126,6 +127,7 @@ int dump_fs_open(const char *disk, ext2_filsys *fs)
                        retval = EXT2_ET_RO_UNSUPP_FEATURE;
                }
        }
+#endif /* defined && defined && defined... */
        return retval;
 }
 
@@ -164,7 +166,7 @@ blockest(struct dinode *dp)
                /* calculate the number of indirect blocks on the dump tape */
                blkest +=
                        howmany(sizeest - NDADDR * fs->blocksize / TP_BSIZE,
-                       TP_NINDIR);
+                       NINDIR(sblock) * EXT2_FRAGS_PER_BLOCK(fs->super));
        }
 #else
        if (dp->di_size > sblock->fs_bsize * NDADDR) {
@@ -803,22 +805,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';