mirror of
https://github.com/veeso/termscp.git
synced 2025-12-07 09:36:00 -08:00
Host: mkdir support for absolute path
This commit is contained in:
@@ -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)))
|
||||||
|
|||||||
Reference in New Issue
Block a user