e2fsprogs: introduce ext2fs_close_free() helper
Currently there are many uses of ext2fs_close() which might be wrong.
First of all ext2fs_close() does not set the ext2_filsys pointer to NULL
so the caller is responsible for clearing it, however there are some
cases there we do not do it.
Second of all very small number of users of ext2fs_close() actually
check the return value. If there is a problem in ext2fs_close() it will
not even free the ext2_filsys structure, but majority of users expect it
to do so.
To fix both problems this commit introduces a new helper
ext2fs_close_free() which will not only check for the return value and
free the ext2_filsys structure if the call to ext2fs_close2() failed,
but it will also set the ext2_filsys pointer to NULL.
Replace every use of ext2fs_close() in e2fsprogs tools with
ext2fs_close_free() - there is no real reason to keep using
ext2fs_close().
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
diff --git a/misc/e4defrag.c b/misc/e4defrag.c
index 0db5e4b..a204793 100644
--- a/misc/e4defrag.c
+++ b/misc/e4defrag.c
@@ -1808,7 +1808,7 @@
feature_incompat = fs->super->s_feature_incompat;
log_groups_per_flex = fs->super->s_log_groups_per_flex;
- ext2fs_close(fs);
+ ext2fs_close_free(&fs);
}
switch (arg_type) {