1*6a54128fSAndroid Build Coastguard Worker /* 2*6a54128fSAndroid Build Coastguard Worker * freefs.c --- free an ext2 filesystem 3*6a54128fSAndroid Build Coastguard Worker * 4*6a54128fSAndroid Build Coastguard Worker * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o. 5*6a54128fSAndroid Build Coastguard Worker * 6*6a54128fSAndroid Build Coastguard Worker * %Begin-Header% 7*6a54128fSAndroid Build Coastguard Worker * This file may be redistributed under the terms of the GNU Library 8*6a54128fSAndroid Build Coastguard Worker * General Public License, version 2. 9*6a54128fSAndroid Build Coastguard Worker * %End-Header% 10*6a54128fSAndroid Build Coastguard Worker */ 11*6a54128fSAndroid Build Coastguard Worker 12*6a54128fSAndroid Build Coastguard Worker #include "config.h" 13*6a54128fSAndroid Build Coastguard Worker #include <stdio.h> 14*6a54128fSAndroid Build Coastguard Worker #if HAVE_UNISTD_H 15*6a54128fSAndroid Build Coastguard Worker #include <unistd.h> 16*6a54128fSAndroid Build Coastguard Worker #endif 17*6a54128fSAndroid Build Coastguard Worker 18*6a54128fSAndroid Build Coastguard Worker #include "ext2_fs.h" 19*6a54128fSAndroid Build Coastguard Worker #include "ext2fsP.h" 20*6a54128fSAndroid Build Coastguard Worker #include "hashmap.h" 21*6a54128fSAndroid Build Coastguard Worker ext2fs_free(ext2_filsys fs)22*6a54128fSAndroid Build Coastguard Workervoid ext2fs_free(ext2_filsys fs) 23*6a54128fSAndroid Build Coastguard Worker { 24*6a54128fSAndroid Build Coastguard Worker if (!fs || (fs->magic != EXT2_ET_MAGIC_EXT2FS_FILSYS)) 25*6a54128fSAndroid Build Coastguard Worker return; 26*6a54128fSAndroid Build Coastguard Worker if (fs->image_io != fs->io) { 27*6a54128fSAndroid Build Coastguard Worker if (fs->image_io) 28*6a54128fSAndroid Build Coastguard Worker io_channel_close(fs->image_io); 29*6a54128fSAndroid Build Coastguard Worker } 30*6a54128fSAndroid Build Coastguard Worker if (fs->io) { 31*6a54128fSAndroid Build Coastguard Worker io_channel_close(fs->io); 32*6a54128fSAndroid Build Coastguard Worker } 33*6a54128fSAndroid Build Coastguard Worker if (fs->device_name) 34*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&fs->device_name); 35*6a54128fSAndroid Build Coastguard Worker if (fs->super) 36*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&fs->super); 37*6a54128fSAndroid Build Coastguard Worker if (fs->orig_super) 38*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&fs->orig_super); 39*6a54128fSAndroid Build Coastguard Worker if (fs->group_desc) 40*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&fs->group_desc); 41*6a54128fSAndroid Build Coastguard Worker if (fs->block_map) 42*6a54128fSAndroid Build Coastguard Worker ext2fs_free_block_bitmap(fs->block_map); 43*6a54128fSAndroid Build Coastguard Worker if (fs->inode_map) 44*6a54128fSAndroid Build Coastguard Worker ext2fs_free_inode_bitmap(fs->inode_map); 45*6a54128fSAndroid Build Coastguard Worker if (fs->image_header) 46*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&fs->image_header); 47*6a54128fSAndroid Build Coastguard Worker 48*6a54128fSAndroid Build Coastguard Worker if (fs->badblocks) 49*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(fs->badblocks); 50*6a54128fSAndroid Build Coastguard Worker fs->badblocks = 0; 51*6a54128fSAndroid Build Coastguard Worker 52*6a54128fSAndroid Build Coastguard Worker if (fs->dblist) 53*6a54128fSAndroid Build Coastguard Worker ext2fs_free_dblist(fs->dblist); 54*6a54128fSAndroid Build Coastguard Worker 55*6a54128fSAndroid Build Coastguard Worker if (fs->icache) 56*6a54128fSAndroid Build Coastguard Worker ext2fs_free_inode_cache(fs->icache); 57*6a54128fSAndroid Build Coastguard Worker 58*6a54128fSAndroid Build Coastguard Worker if (fs->mmp_buf) 59*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&fs->mmp_buf); 60*6a54128fSAndroid Build Coastguard Worker if (fs->mmp_cmp) 61*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&fs->mmp_cmp); 62*6a54128fSAndroid Build Coastguard Worker 63*6a54128fSAndroid Build Coastguard Worker if (fs->block_sha_map) 64*6a54128fSAndroid Build Coastguard Worker ext2fs_hashmap_free(fs->block_sha_map); 65*6a54128fSAndroid Build Coastguard Worker 66*6a54128fSAndroid Build Coastguard Worker fs->magic = 0; 67*6a54128fSAndroid Build Coastguard Worker 68*6a54128fSAndroid Build Coastguard Worker ext2fs_zero_blocks2(NULL, 0, 0, NULL, NULL); 69*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&fs); 70*6a54128fSAndroid Build Coastguard Worker } 71*6a54128fSAndroid Build Coastguard Worker 72*6a54128fSAndroid Build Coastguard Worker /* 73*6a54128fSAndroid Build Coastguard Worker * This procedure frees a badblocks list. 74*6a54128fSAndroid Build Coastguard Worker */ ext2fs_u32_list_free(ext2_u32_list bb)75*6a54128fSAndroid Build Coastguard Workervoid ext2fs_u32_list_free(ext2_u32_list bb) 76*6a54128fSAndroid Build Coastguard Worker { 77*6a54128fSAndroid Build Coastguard Worker if (bb->magic != EXT2_ET_MAGIC_BADBLOCKS_LIST) 78*6a54128fSAndroid Build Coastguard Worker return; 79*6a54128fSAndroid Build Coastguard Worker 80*6a54128fSAndroid Build Coastguard Worker if (bb->list) 81*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&bb->list); 82*6a54128fSAndroid Build Coastguard Worker bb->list = 0; 83*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&bb); 84*6a54128fSAndroid Build Coastguard Worker } 85*6a54128fSAndroid Build Coastguard Worker ext2fs_badblocks_list_free(ext2_badblocks_list bb)86*6a54128fSAndroid Build Coastguard Workervoid ext2fs_badblocks_list_free(ext2_badblocks_list bb) 87*6a54128fSAndroid Build Coastguard Worker { 88*6a54128fSAndroid Build Coastguard Worker ext2fs_u32_list_free((ext2_u32_list) bb); 89*6a54128fSAndroid Build Coastguard Worker } 90*6a54128fSAndroid Build Coastguard Worker 91*6a54128fSAndroid Build Coastguard Worker 92*6a54128fSAndroid Build Coastguard Worker /* 93*6a54128fSAndroid Build Coastguard Worker * Free a directory block list 94*6a54128fSAndroid Build Coastguard Worker */ ext2fs_free_dblist(ext2_dblist dblist)95*6a54128fSAndroid Build Coastguard Workervoid ext2fs_free_dblist(ext2_dblist dblist) 96*6a54128fSAndroid Build Coastguard Worker { 97*6a54128fSAndroid Build Coastguard Worker if (!dblist || (dblist->magic != EXT2_ET_MAGIC_DBLIST)) 98*6a54128fSAndroid Build Coastguard Worker return; 99*6a54128fSAndroid Build Coastguard Worker 100*6a54128fSAndroid Build Coastguard Worker if (dblist->list) 101*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&dblist->list); 102*6a54128fSAndroid Build Coastguard Worker dblist->list = 0; 103*6a54128fSAndroid Build Coastguard Worker if (dblist->fs && dblist->fs->dblist == dblist) 104*6a54128fSAndroid Build Coastguard Worker dblist->fs->dblist = 0; 105*6a54128fSAndroid Build Coastguard Worker dblist->magic = 0; 106*6a54128fSAndroid Build Coastguard Worker ext2fs_free_mem(&dblist); 107*6a54128fSAndroid Build Coastguard Worker } 108*6a54128fSAndroid Build Coastguard Worker 109