+static void mapfileino __P((ino_t ino, struct dinode const *dp, long *tapesize, int *dirskipped));
+static int exclude_ino __P((ino_t ino));
+
+/* #define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 */
+#ifdef EXT3_FEATURE_INCOMPAT_RECOVER
+#define FORCE_OPEN EXT2_FLAG_FORCE
+#else
+#define FORCE_OPEN 0
+#endif
+
+int dump_fs_open(const char *disk, ext2_filsys *fs)
+{
+ int retval;
+ struct ext2fs_sb *s;
+
+ retval = ext2fs_open(disk, FORCE_OPEN, 0, 0, unix_io_manager, fs);
+#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) ||
+#ifdef EXT3_FEATURE_INCOMPAT_RECOVER
+ (s->s_feature_incompat & ~(EXT3_FEATURE_INCOMPAT_RECOVER | EXT2_LIB_FEATURE_INCOMPAT_SUPP))) {
+#else
+ (s->s_feature_incompat & ~EXT2_LIB_FEATURE_INCOMPAT_SUPP)) {
+#endif
+ retval = EXT2_ET_UNSUPP_FEATURE;
+ }
+ else if (s->s_feature_ro_compat & ~EXT2_LIB_FEATURE_RO_COMPAT_SUPP) {
+ retval = EXT2_ET_RO_UNSUPP_FEATURE;
+ }
+ }
+#endif /* defined && defined && defined... */
+ return retval;
+}