diff options
Diffstat (limited to 'commands/src/cp.rs')
-rw-r--r-- | commands/src/cp.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/commands/src/cp.rs b/commands/src/cp.rs new file mode 100644 index 0000000..f8362ee --- /dev/null +++ b/commands/src/cp.rs @@ -0,0 +1,34 @@ +use alloc::vec::Vec; +use toolkit::Toolkit; +use toolkit::error::*; +use crate::parser::Command; + +pub fn run(tk: &mut Toolkit, command: Command) { + if command.names.len() == 2 { + let path1 = tk.resolve_path(&command.names[0]); + let path2 = tk.resolve_path(&command.names[1]); + let path2_copy = path2.clone(); + + let parts = path2_copy.split("\\").collect::<Vec<&str>>(); + let len = parts.len() - 1; + let path_dir = parts[..len].join("\\"); + + if tk.file_exists(&path1) { + if tk.file_exists(&path_dir) { + if tk.is_file(&path1) { + tk.copy_file(&path1, &path2); + } else { + display_error(tk, Error::E12); + } + } else { + display_error(tk, Error::E04); + } + } else { + display_error(tk, Error::E04); + } + } else if command.names.is_empty() { + display_error(tk, Error::E03); + } else if command.names.len() > 2 { + display_error(tk, Error::E08); + } +}
\ No newline at end of file |