#include "project.h" int clone_fs (ext2_filsys src_fs, ext2_filsys dst_fs) { int skip; int ret; ext2_inode_scan scan; ext2_ino_t i_num; struct ext2_inode src_i; EXT2_MOAN_FAIL (ret, ext2fs_open_inode_scan (src_fs, 0, &scan)); if (ret) return -1; for (;;) { EXT2_MOAN_FAIL (ret, ext2fs_get_next_inode (scan, &i_num, &src_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 == src_fs->super->s_journal_inum) skip = 1; if (skip) continue; if (clone_inode (src_fs, dst_fs, i_num, &src_i)) { fprintf (stderr, "clone_inode(%d) failed\n", (int) i_num); break; } } ext2fs_close_inode_scan (scan); return 0; }