+static void mapfileino __P((ino_t ino, struct dinode const *dp, long *tapesize, int *dirskipped));
+static int exclude_ino __P((ino_t ino));
+extern ino_t iexclude_list[IEXCLUDE_MAXNUM]; /* the inode exclude list */
+extern int iexclude_num; /* number of elements in list */
+
+/* Temporary fix waiting for Andreas fixes... */
+#define ext2_ino_t ino_t
+#undef EXT3_FEATURE_INCOMPAT_RECOVER
+
+#ifndef EXT3_FEATURE_COMPAT_HAS_JOURNAL
+#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
+#endif
+#ifndef EXT2_FEATURE_INCOMPAT_FILETYPE
+#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
+#endif
+#ifndef EXT3_FEATURE_INCOMPAT_RECOVER
+#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004
+#define FORCE_OPEN EXT2_FLAG_FORCE
+#define ext2_journal_ino(sb) (*((__u32 *)sb + 0x38))
+#else
+#define FORCE_OPEN 0
+#define ext2_journal_ino(sb) (sb->s_journal_inum)
+#endif
+#ifndef EXT3_FEATURE_INCOMPAT_JOURNAL_DEV
+#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008
+#endif
+
+#ifndef EXT2_LIB_FEATURE_INCOMPAT_SUPP
+#define EXT2_LIB_FEATURE_INCOMPAT_SUPP (EXT3_FEATURE_INCOMPAT_RECOVER | \
+ EXT2_FEATURE_INCOMPAT_FILETYPE)
+#endif
+
+int dump_fs_open(const char *disk, ext2_filsys *fs)
+{
+ int retval;
+
+ retval = ext2fs_open(disk, FORCE_OPEN, 0, 0, unix_io_manager, fs);
+ if (!retval) {
+ struct ext2_super_block *es = (*fs)->super;
+ ext2_ino_t journal_ino = ext2_journal_ino(es);
+ if (es->s_feature_incompat & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV){
+ fprintf(stderr, "This an journal, not a filesystem!\n");
+ retval = EXT2_ET_UNSUPP_FEATURE;
+ ext2fs_close(*fs);
+ }
+ else if ((retval = es->s_feature_incompat &
+ ~(EXT2_LIB_FEATURE_INCOMPAT_SUPP |
+ EXT3_FEATURE_INCOMPAT_RECOVER))) {
+ fprintf(stderr,
+ "Unsupported feature(s) 0x%x in filesystem\n",
+ retval);
+ retval = EXT2_ET_UNSUPP_FEATURE;
+ ext2fs_close(*fs);
+ }
+ else if (es->s_feature_compat &
+ EXT3_FEATURE_COMPAT_HAS_JOURNAL && journal_ino &&
+ !exclude_ino(journal_ino)) {
+ iexclude_list[iexclude_num++] = journal_ino;
+ msg("Added ext3 journal inode %d to exclude list\n",
+ journal_ino);
+ }
+ }
+ return retval;
+}