diff --git a/src/builtin.rs b/src/builtin.rs index 557925c..b39f867 100644 --- a/src/builtin.rs +++ b/src/builtin.rs @@ -14,6 +14,8 @@ mod pwd; /// removes files mod rm; +mod mkdir; + /// the butt of a file mod tail; @@ -32,6 +34,7 @@ pub enum Builtin { Changedir, Echo, Ls, + Mkdir, Printenv, Pwd, Rm, @@ -46,6 +49,7 @@ impl Builtin { Changedir => &cd::Changedir, Echo => &echo::Echo, Ls => &ls::Ls, + Mkdir => &mkdir::Mkdir, Printenv => &printenv::Printenv, Pwd => &pwd::Pwd, Rm => &rm::Rm, @@ -68,6 +72,7 @@ pub fn all() -> HashMap<&'static str, Builtin> { ("cd", Changedir), ("echo", Echo), ("ls", Ls), + ("mkdir", Mkdir), ("printenv", Printenv), ("pwd", Pwd), ("rm", Rm), diff --git a/src/builtin/mkdir.rs b/src/builtin/mkdir.rs new file mode 100644 index 0000000..3b636ce --- /dev/null +++ b/src/builtin/mkdir.rs @@ -0,0 +1,25 @@ +use crate::{ + error::ExecError, + run::{Call, Context, Value}, +}; +use std::{env, fs, io::Write}; + +pub struct Mkdir; + +impl Call for Mkdir { + fn call(&self, ctx: &mut Context, args: &[Value]) -> Result { + match args.len() { + 0 => { + todo!() + } + 1 => { + let path = args[0].try_as_str()?; + fs::create_dir(path)?; + } + _ => { + todo!() + } + } + Ok(Value::None) + } +}