From ab52e12a904b4a31fc3416f0ef7d959f0c38e773 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Tue, 26 Feb 2008 20:45:36 -0500 Subject: [PATCH] libext2fs: Add EXT2_FLAG_NONFREE_ON_ERROR to ext2fs_open2() Add a flag which returns the partially completed filesystem object so e2fsck can print more intelligent error messages. Signed-off-by: "Theodore Ts'o" --- lib/ext2fs/ext2fs.h | 1 + lib/ext2fs/openfs.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h index e1ae89d..0b2c321 100644 --- a/lib/ext2fs/ext2fs.h +++ b/lib/ext2fs/ext2fs.h @@ -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 diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c index 947675e..d705b1c 100644 --- a/lib/ext2fs/openfs.c +++ b/lib/ext2fs/openfs.c @@ -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; } -- 1.8.3.1