From 981ec1443eef8889e7a954d8e72e7a2567ad2441 Mon Sep 17 00:00:00 2001 From: user0-07161 Date: Thu, 20 Mar 2025 20:18:10 +0100 Subject: [PATCH] feat: adjust cat to be more busybox-like, add mkdir --- coreutils/src/commands/cat.rs | 12 ++++++---- coreutils/src/commands/mkdir.rs | 42 +++++++++++++++++++++++++++++++++ coreutils/src/commands/mod.rs | 5 +++- src/registry.rs | 1 + 4 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 coreutils/src/commands/mkdir.rs diff --git a/coreutils/src/commands/cat.rs b/coreutils/src/commands/cat.rs index 160ac56..a6e1105 100644 --- a/coreutils/src/commands/cat.rs +++ b/coreutils/src/commands/cat.rs @@ -10,11 +10,15 @@ impl Command for Cat { fn execute(&self) { let args: Vec = env::args().collect::>().clone(); let arguments: Vec = get_args(String::from("cat"), args); - let filename = &arguments[0]; - - let mut read = BufReader::new(File::open(filename).unwrap()); let mut vecbuf = Vec::new(); - let _ = read.read_to_end(&mut vecbuf); + + for file in arguments.iter() { + let mut tmpbuf = Vec::new(); + let mut read = BufReader::new(File::open(file).unwrap()); + let _ = read.read_to_end(&mut tmpbuf); + let _ = vecbuf.append(&mut tmpbuf); + } + let _ = io::stdout().write_all(&vecbuf); } } diff --git a/coreutils/src/commands/mkdir.rs b/coreutils/src/commands/mkdir.rs new file mode 100644 index 0000000..54c68eb --- /dev/null +++ b/coreutils/src/commands/mkdir.rs @@ -0,0 +1,42 @@ +use boxutils::commands::Command; +use boxutils::commands::get_args; +use std::fs; +use std::env; + +pub struct Mkdir; + +impl Command for Mkdir { + fn execute(&self) { + let args: Vec = env::args().collect::>().clone(); + let arguments: Vec = get_args(String::from("mkdir"), args.clone()); + + if arguments.len() == 0 { + panic!( + "{}", + String::from( + "Usage: mkdir [DIR1] [DIR1] etc. pp. [-p, --parents]" + ) + ); + } + for arg in arguments.iter() { + if arg == "--help" { + println!( + "{}", + String::from( + "Usage: mkdir [DIR1] [DIR2] etc. pp. [-p, --parents]" + )); + return; + } + } + + for arg in arguments.iter() { + if (arg != "-p") & (arg != "--parent") { + if args.contains(&String::from("-p")) || args.contains(&String::from("--parent")) { + let _ = fs::create_dir_all(String::from(arg)); + } else { + fs::create_dir(String::from(arg)).unwrap(); + } + } + } + } +} diff --git a/coreutils/src/commands/mod.rs b/coreutils/src/commands/mod.rs index 369a80c..17f40fd 100644 --- a/coreutils/src/commands/mod.rs +++ b/coreutils/src/commands/mod.rs @@ -5,4 +5,7 @@ mod cat; pub use cat::Cat; mod echo; -pub use echo::Echo; \ No newline at end of file +pub use echo::Echo; + +mod mkdir; +pub use mkdir::Mkdir; diff --git a/src/registry.rs b/src/registry.rs index a986e98..143ab62 100644 --- a/src/registry.rs +++ b/src/registry.rs @@ -7,6 +7,7 @@ pub fn get_registry() -> CommandRegistry { registry.register("hello", Box::new(coreutils::commands::Hello)); registry.register("cat", Box::new(coreutils::commands::Cat)); registry.register("echo", Box::new(coreutils::commands::Echo)); + registry.register("mkdir", Box::new(coreutils::commands::Mkdir)); registry.register("box", Box::new(Boxcmd)); registry