Host: mkdir support for absolute path

This commit is contained in:
ChristianVisintin
2020-11-28 11:53:43 +01:00
parent e60ebb2648
commit e037263ead

View File

@@ -159,21 +159,40 @@ impl Localhost {
/// ### mkdir /// ### mkdir
/// ///
/// Make a directory in the current path and update the file list /// Make a directory at path and update the file list (only if relative)
pub fn mkdir(&mut self, dir_name: String) -> Result<(), HostError> { pub fn mkdir(&mut self, dir_name: &Path) -> Result<(), HostError> {
let mut dir_path: PathBuf = self.wrkdir.clone(); self.mkdir_ex(dir_name, false)
dir_path.push(dir_name); }
/// ### mkdir_ex
///
/// Extended option version of makedir.
/// ignex: don't report error if directory already exists
pub fn mkdir_ex(&mut self, dir_name: &Path, ignex: bool) -> Result<(), HostError> {
let mut dir_path: PathBuf = match dir_name.is_absolute() {
true => PathBuf::from(dir_name),
false => {
let mut dir_path: PathBuf = self.wrkdir.clone();
dir_path.push(dir_name);
dir_path
}
};
// If dir already exists, return Error // If dir already exists, return Error
if dir_path.exists() { if dir_path.exists() {
return Err(HostError::new(HostErrorType::FileAlreadyExists, None)); match ignex {
true => return Ok(()),
false => return Err(HostError::new(HostErrorType::FileAlreadyExists, None))
}
} }
match std::fs::create_dir(dir_path) { match std::fs::create_dir(dir_path) {
Ok(_) => { Ok(_) => {
// Update dir // Update dir
self.files = match self.scan_dir(self.wrkdir.as_path()) { if dir_name.is_relative() {
Ok(f) => f, self.files = match self.scan_dir(self.wrkdir.as_path()) {
Err(err) => return Err(err) Ok(f) => f,
}; Err(err) => return Err(err)
};
}
Ok(()) Ok(())
}, },
Err(err) => Err(HostError::new(HostErrorType::CouldNotCreateFile, Some(err))) Err(err) => Err(HostError::new(HostErrorType::CouldNotCreateFile, Some(err)))