]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
libext2fs: Add EXT2_FLAG_NONFREE_ON_ERROR to ext2fs_open2()
authorTheodore Ts'o <tytso@mit.edu>
Wed, 27 Feb 2008 01:45:36 +0000 (20:45 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 27 Feb 2008 01:45:36 +0000 (20:45 -0500)
Add a flag which returns the partially completed filesystem object so
e2fsck can print more intelligent error messages.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/ext2fs.h
lib/ext2fs/openfs.c

index e1ae89d3a60d34db0665828c001ab2adabe27fb3..0b2c321e8d524bed767897b34cbf10127b25a65c 100644 (file)
@@ -188,6 +188,7 @@ typedef struct ext2_file *ext2_file_t;
 #define EXT2_FLAG_IMAGE_FILE           0x2000
 #define EXT2_FLAG_EXCLUSIVE            0x4000
 #define EXT2_FLAG_SOFTSUPP_FEATURES    0x8000
+#define EXT2_FLAG_NOFREE_ON_ERROR      0x10000
 
 /*
  * Special flag in the ext2 inode i_flag field that means that this is
index 947675e579e33fb5ac2ab5cec96e9b0d654a64b2..d705b1c3a49cdc43b9a2945185cd915a0b847db6 100644 (file)
@@ -305,10 +305,14 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
 
        fs->stride = fs->super->s_raid_stride;
 
+       fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR;
        *ret_fs = fs;
        return 0;
 cleanup:
-       ext2fs_free(fs);
+       if (flags & EXT2_FLAG_NOFREE_ON_ERROR)
+               *ret_fs = fs;
+       else
+               ext2fs_free(fs);
        return retval;
 }