From 5f15c8009e24d74f59571faeda1dd85f54eb0f8d Mon Sep 17 00:00:00 2001 From: Ryuichi Ueda Date: Sun, 31 Dec 2023 23:41:39 +0900 Subject: [PATCH] Change structure --- src/core/builtins.rs | 35 +++-------------------------------- src/core/builtins/cd.rs | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 32 deletions(-) create mode 100644 src/core/builtins/cd.rs diff --git a/src/core/builtins.rs b/src/core/builtins.rs index 2bf8a425..b5ee3bd7 100644 --- a/src/core/builtins.rs +++ b/src/core/builtins.rs @@ -2,15 +2,16 @@ //SPDX-FileCopyrightText: 2023 @caro@mi.shellgei.org //SPDX-License-Identifier: BSD-3-Clause -mod utils; +mod cd; mod pwd; +mod utils; use crate::ShellCore; impl ShellCore { pub fn set_builtins(&mut self) { self.builtins.insert(":".to_string(), true_); - self.builtins.insert("cd".to_string(), cd); + self.builtins.insert("cd".to_string(), cd::cd); self.builtins.insert("exit".to_string(), exit); self.builtins.insert("false".to_string(), false_); self.builtins.insert("pwd".to_string(), pwd::pwd); @@ -18,36 +19,6 @@ impl ShellCore { } } -pub fn cd(core: &mut ShellCore, args: &mut Vec) -> i32 { - if args.len() > 2 { - eprintln!("sush: cd: too many arguments"); - return 1; - } - - if args.len() == 1 { //only "cd" - let var = "~".to_string(); - args.push(var); - }else if args.len() == 2 && args[1] == "-" { // cd - - if let Some(old) = core.vars.get("OLDPWD") { - println!("{}", &old); - args[1] = old.to_string(); - } - }; - - if let Some(old) = core.get_current_directory().clone() { - core.vars.insert("OLDPWD".to_string(), old.display().to_string()); - }; - - let path = utils::make_canonical_path(utils::make_absolute_path(core, &args[1])); - if core.set_current_directory(&path).is_ok() { - core.vars.insert("PWD".to_string(), path.display().to_string()); - 0 - }else{ - eprintln!("sush: cd: {:?}: No such file or directory", &path); - 1 - } -} - pub fn exit(core: &mut ShellCore, args: &mut Vec) -> i32 { eprintln!("exit"); if args.len() > 1 { diff --git a/src/core/builtins/cd.rs b/src/core/builtins/cd.rs new file mode 100644 index 00000000..482523fc --- /dev/null +++ b/src/core/builtins/cd.rs @@ -0,0 +1,36 @@ +//SPDX-FileCopyrightText: 2023 Ryuichi Ueda +//SPDX-FileCopyrightText: 2023 @caro@mi.shellgei.org +//SPDX-License-Identifier: BSD-3-Clause + +use crate::ShellCore; +use super::utils; + +pub fn cd(core: &mut ShellCore, args: &mut Vec) -> i32 { + if args.len() > 2 { + eprintln!("sush: cd: too many arguments"); + return 1; + } + + if args.len() == 1 { //only "cd" + let var = "~".to_string(); + args.push(var); + }else if args.len() == 2 && args[1] == "-" { // cd - + if let Some(old) = core.vars.get("OLDPWD") { + println!("{}", &old); + args[1] = old.to_string(); + } + }; + + if let Some(old) = core.get_current_directory().clone() { + core.vars.insert("OLDPWD".to_string(), old.display().to_string()); + }; + + let path = utils::make_canonical_path(utils::make_absolute_path(core, &args[1])); + if core.set_current_directory(&path).is_ok() { + core.vars.insert("PWD".to_string(), path.display().to_string()); + 0 + }else{ + eprintln!("sush: cd: {:?}: No such file or directory", &path); + 1 + } +}