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/ext_clone.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/ext_clone.c (limited to 'src/ext_clone.c') diff --git a/src/ext_clone.c b/src/ext_clone.c new file mode 100644 index 0000000..1899455 --- /dev/null +++ b/src/ext_clone.c @@ -0,0 +1,99 @@ +#include "project.h" + +static void +usage (void) +{ + fprintf (stderr, "ext_clone -s src_dev -d dest_dev\n"); + exit (1); +} + + +char buf[BUF_SZ]; + + + +int main (int argc, char *argv[]) +{ + int ret; + ext2_filsys src_fs = NULL; + ext2_filsys dst_fs = NULL; + char *src_dev = NULL; + char *dst_dev = NULL; + + int opt; + + while ((opt = getopt (argc, argv, "d:s:")) != -1) { + switch (opt) { + case 'd': + dst_dev = optarg; + break; + + case 's': + src_dev = optarg; + break; + + default: + usage(); + } + } + + if ((!src_dev) || (!dst_dev)) usage(); + + do { + EXT2_MOAN_FAIL (ret, ext2fs_open (src_dev, EXT2_FLAG_64BITS, 0, 0, unix_io_manager, &src_fs)); + + if (ret) + break; + + EXT2_MOAN_FAIL (ret, ext2fs_open (dst_dev, EXT2_FLAG_64BITS | EXT2_FLAG_RW, 0, 0, unix_io_manager, &dst_fs)); + + if (ret) + break; + + + /*make the hash seed the same */ + + memcpy (dst_fs->super->s_hash_seed, src_fs->super->s_hash_seed, sizeof (src_fs->super->s_hash_seed)); + dst_fs->super->s_def_hash_version = src_fs->super->s_def_hash_version; + + ext2fs_mark_super_dirty (dst_fs); + + + + + EXT2_MOAN_FAIL (ret, ext2fs_read_inode_bitmap (dst_fs)); + + if (ret) + break; + + EXT2_MOAN_FAIL (ret, ext2fs_read_block_bitmap (dst_fs)); + + if (ret) + break; + + ret = zap_fs (dst_fs); + + if (ret) + break; + + + ret = clone_fs (src_fs, dst_fs); + + } while (0); + + + + if (dst_fs) + ext2fs_close (dst_fs); + + if (src_fs) + ext2fs_close (src_fs); + + stats (1); + + return ret; +} + + + + -- cgit v1.2.3