From e57bb39a23f5b38d8d4569958a5d86267da81d47 Mon Sep 17 00:00:00 2001 From: Antoine Gersant Date: Mon, 7 Nov 2016 23:11:32 -0800 Subject: [PATCH] More lenient parsing of file paths in config file --- src/config.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/config.rs b/src/config.rs index 141e125..2eef759 100644 --- a/src/config.rs +++ b/src/config.rs @@ -166,7 +166,7 @@ impl Config { None => return Err(ConfigError::MountDirsParseError), Some(n) => n, }; - let source = path::PathBuf::from(source); + let source = clean_path_string(source); if self.vfs.mount_points.contains_key(name) { return Err(ConfigError::ConflictingMounts); @@ -202,4 +202,25 @@ impl Config { }); Ok(()) } -} \ No newline at end of file +} + +fn clean_path_string(path_string: &str) -> path::PathBuf { + let separator = regex::Regex::new(r"\\|/").unwrap(); + let components = separator.split(path_string).collect::>(); + let mut path = path::PathBuf::new(); + for component in components { + path.push(component); + } + path +} + +#[test] +fn test_clean_path_string() { + let mut correct_path = path::PathBuf::new(); + correct_path.push("C:"); + correct_path.push("some"); + correct_path.push("path"); + assert_eq!(correct_path, clean_path_string(r#"C:/some/path"#)); + assert_eq!(correct_path, clean_path_string(r#"C:\some\path"#)); + assert_eq!(correct_path, clean_path_string(r#"C:\some\path\"#)); +}