summaryrefslogtreecommitdiff
path: root/commands/src/cp.rs
diff options
context:
space:
mode:
Diffstat (limited to 'commands/src/cp.rs')
-rw-r--r--commands/src/cp.rs34
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