diff options
Diffstat (limited to 'src/zap_fs.c')
-rw-r--r-- | src/zap_fs.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/zap_fs.c b/src/zap_fs.c new file mode 100644 index 0000000..0cfd7ac --- /dev/null +++ b/src/zap_fs.c @@ -0,0 +1,52 @@ +#include "project.h" + + +int zap_fs (ext2_filsys fs) +{ + int skip; + int ret; + ext2_inode_scan scan; + ext2_ino_t i_num; + struct ext2_inode i; + + EXT2_MOAN_FAIL (ret, ext2fs_open_inode_scan (fs, 0, &scan)); + + if (ret) return -1; + + for (;;) { + EXT2_MOAN_FAIL (ret, ext2fs_get_next_inode (scan, &i_num, &i)); + + if (ret) break; + + if (!i_num) break; + + skip = 0; + + switch (i_num) { + case EXT2_BAD_INO: + case EXT4_USR_QUOTA_INO: + case EXT4_GRP_QUOTA_INO: + case EXT2_BOOT_LOADER_INO: + case EXT2_UNDEL_DIR_INO: + case EXT2_RESIZE_INO: + case EXT2_EXCLUDE_INO: + case EXT4_REPLICA_INO: + skip = 1; + } + + if (i_num == fs->super->s_journal_inum) skip = 1; + + if (skip) continue; + + if (zap_inode (fs, i_num, &i)) { + fprintf (stderr, "zap_inode(%d) failed\n", (int) i_num); + break; + } + } + + ext2fs_close_inode_scan (scan); + return 0; +} + + + |