X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lib%2Fext2fs%2Ffreefs.c;h=ea9742efb5d12ea52e35f901bf0ded81c22d05ca;hb=7595699d09d32863b40deac1190e5c2b091efb36;hp=485f9218ecd9289b8af27423cffde27801f3f6a5;hpb=c180ac86533bcbfb1560bd4aa01464785a760f70;p=tools%2Fe2fsprogs.git diff --git a/lib/ext2fs/freefs.c b/lib/ext2fs/freefs.c index 485f921..ea9742e 100644 --- a/lib/ext2fs/freefs.c +++ b/lib/ext2fs/freefs.c @@ -1,48 +1,48 @@ /* * freefs.c --- free an ext2 filesystem - * + * * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o. * * %Begin-Header% - * This file may be redistributed under the terms of the GNU Public - * License. + * This file may be redistributed under the terms of the GNU Library + * General Public License, version 2. * %End-Header% */ +#include "config.h" #include #if HAVE_UNISTD_H #include #endif -#if EXT2_FLAT_INCLUDES #include "ext2_fs.h" -#else -#include -#endif - #include "ext2fsP.h" -static void ext2fs_free_inode_cache(struct ext2_inode_cache *icache); - void ext2fs_free(ext2_filsys fs) { if (!fs || (fs->magic != EXT2_ET_MAGIC_EXT2FS_FILSYS)) return; + if (fs->image_io != fs->io) { + if (fs->image_io) + io_channel_close(fs->image_io); + } if (fs->io) { io_channel_close(fs->io); } if (fs->device_name) - ext2fs_free_mem((void **) &fs->device_name); + ext2fs_free_mem(&fs->device_name); if (fs->super) - ext2fs_free_mem((void **) &fs->super); + ext2fs_free_mem(&fs->super); if (fs->orig_super) - ext2fs_free_mem((void **) &fs->orig_super); + ext2fs_free_mem(&fs->orig_super); if (fs->group_desc) - ext2fs_free_mem((void **) &fs->group_desc); + ext2fs_free_mem(&fs->group_desc); if (fs->block_map) ext2fs_free_block_bitmap(fs->block_map); if (fs->inode_map) ext2fs_free_inode_bitmap(fs->inode_map); + if (fs->image_header) + ext2fs_free_mem(&fs->image_header); if (fs->badblocks) ext2fs_badblocks_list_free(fs->badblocks); @@ -53,76 +53,38 @@ void ext2fs_free(ext2_filsys fs) if (fs->icache) ext2fs_free_inode_cache(fs->icache); - - fs->magic = 0; - - ext2fs_free_mem((void **) &fs); -} - -void ext2fs_free_generic_bitmap(ext2fs_inode_bitmap bitmap) -{ - if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_GENERIC_BITMAP)) - return; - - bitmap->magic = 0; - if (bitmap->description) { - ext2fs_free_mem((void **) &bitmap->description); - bitmap->description = 0; - } - if (bitmap->bitmap) { - ext2fs_free_mem((void **) &bitmap->bitmap); - bitmap->bitmap = 0; - } - ext2fs_free_mem((void **) &bitmap); -} - -void ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap) -{ - if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_INODE_BITMAP)) - return; - bitmap->magic = EXT2_ET_MAGIC_GENERIC_BITMAP; - ext2fs_free_generic_bitmap(bitmap); -} + if (fs->mmp_buf) + ext2fs_free_mem(&fs->mmp_buf); + if (fs->mmp_cmp) + ext2fs_free_mem(&fs->mmp_cmp); -void ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap) -{ - if (!bitmap || (bitmap->magic != EXT2_ET_MAGIC_BLOCK_BITMAP)) - return; + fs->magic = 0; - bitmap->magic = EXT2_ET_MAGIC_GENERIC_BITMAP; - ext2fs_free_generic_bitmap(bitmap); -} - -/* - * Free the inode cache structure - */ -static void ext2fs_free_inode_cache(struct ext2_inode_cache *icache) -{ - if (--icache->refcount) - return; - if (icache->buffer) - ext2fs_free_mem((void **) &icache->buffer); - if (icache->cache) - ext2fs_free_mem((void **) &icache->cache); - icache->buffer_blk = 0; - ext2fs_free_mem((void **) &icache); + ext2fs_zero_blocks2(NULL, 0, 0, NULL, NULL); + ext2fs_free_mem(&fs); } /* * This procedure frees a badblocks list. */ -void ext2fs_badblocks_list_free(ext2_badblocks_list bb) +void ext2fs_u32_list_free(ext2_u32_list bb) { if (bb->magic != EXT2_ET_MAGIC_BADBLOCKS_LIST) return; if (bb->list) - ext2fs_free_mem((void **) &bb->list); + ext2fs_free_mem(&bb->list); bb->list = 0; - ext2fs_free_mem((void **) &bb); + ext2fs_free_mem(&bb); +} + +void ext2fs_badblocks_list_free(ext2_badblocks_list bb) +{ + ext2fs_u32_list_free((ext2_u32_list) bb); } + /* * Free a directory block list */ @@ -132,11 +94,11 @@ void ext2fs_free_dblist(ext2_dblist dblist) return; if (dblist->list) - ext2fs_free_mem((void **) &dblist->list); + ext2fs_free_mem(&dblist->list); dblist->list = 0; if (dblist->fs && dblist->fs->dblist == dblist) dblist->fs->dblist = 0; dblist->magic = 0; - ext2fs_free_mem((void **) &dblist); + ext2fs_free_mem(&dblist); }