From b6afefb5d12dbed4801272dae3048588dfc1cb9a Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Sat, 12 May 2018 17:10:22 +0100 Subject: first working version --- src/clone_fs.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/clone_fs.c (limited to 'src/clone_fs.c') diff --git a/src/clone_fs.c b/src/clone_fs.c new file mode 100644 index 0000000..1269b30 --- /dev/null +++ b/src/clone_fs.c @@ -0,0 +1,52 @@ +#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; +} + + + -- cgit v1.2.3