diff options
| author | David Lönnhager <david.l@mullvad.net> | 2025-05-19 15:56:28 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2025-05-19 16:20:27 +0200 |
| commit | 33a7108b7ade4f8e0dc05aa25155ea60e92c4617 (patch) | |
| tree | 763f7b9819ce8734d67909270de99dcfe60bb032 | |
| parent | 8016afc61217df9fac683a4d2a33cfb52cfaf965 (diff) | |
| download | mullvadvpn-33a7108b7ade4f8e0dc05aa25155ea60e92c4617.tar.xz mullvadvpn-33a7108b7ade4f8e0dc05aa25155ea60e92c4617.zip | |
Rename create_dir_and_return and add documentation
| -rw-r--r-- | mullvad-paths/src/cache.rs | 2 | ||||
| -rw-r--r-- | mullvad-paths/src/lib.rs | 4 | ||||
| -rw-r--r-- | mullvad-paths/src/logs.rs | 4 | ||||
| -rw-r--r-- | mullvad-paths/src/settings.rs | 4 | ||||
| -rw-r--r-- | mullvad-paths/src/unix.rs | 7 | ||||
| -rw-r--r-- | mullvad-paths/src/windows.rs | 36 |
6 files changed, 28 insertions, 29 deletions
diff --git a/mullvad-paths/src/cache.rs b/mullvad-paths/src/cache.rs index 0481766a34..3b31a9460b 100644 --- a/mullvad-paths/src/cache.rs +++ b/mullvad-paths/src/cache.rs @@ -8,7 +8,7 @@ pub fn cache_dir() -> Result<PathBuf> { let permissions = crate::unix::Permissions::ReadExecOnly; #[cfg(target_os = "windows")] let permissions = true; - crate::create_and_return(get_cache_dir()?, permissions) + crate::create_dir(get_cache_dir()?, permissions) } pub fn get_cache_dir() -> Result<PathBuf> { diff --git a/mullvad-paths/src/lib.rs b/mullvad-paths/src/lib.rs index 4e7ab1dae2..c5eb5b9a52 100644 --- a/mullvad-paths/src/lib.rs +++ b/mullvad-paths/src/lib.rs @@ -47,10 +47,10 @@ pub enum Error { } #[cfg(unix)] -use unix::create_and_return; +use unix::create_dir; #[cfg(windows)] -use windows::create_and_return; +use windows::create_dir; mod cache; pub use crate::cache::{cache_dir, get_cache_dir, get_default_cache_dir}; diff --git a/mullvad-paths/src/logs.rs b/mullvad-paths/src/logs.rs index e7940a51d5..03ab990632 100644 --- a/mullvad-paths/src/logs.rs +++ b/mullvad-paths/src/logs.rs @@ -6,11 +6,11 @@ use std::{env, path::PathBuf}; pub fn log_dir() -> Result<PathBuf> { #[cfg(unix)] { - crate::create_and_return(get_log_dir()?, crate::unix::Permissions::ReadExecOnly) + crate::create_dir(get_log_dir()?, crate::unix::Permissions::ReadExecOnly) } #[cfg(target_os = "windows")] { - crate::create_and_return(get_log_dir()?, true) + crate::create_dir(get_log_dir()?, true) } } diff --git a/mullvad-paths/src/settings.rs b/mullvad-paths/src/settings.rs index 8dc1f425bb..016e158bee 100644 --- a/mullvad-paths/src/settings.rs +++ b/mullvad-paths/src/settings.rs @@ -6,12 +6,12 @@ use std::{env, path::PathBuf}; pub fn settings_dir() -> Result<PathBuf> { #[cfg(unix)] { - crate::create_and_return(get_settings_dir()?, crate::unix::Permissions::Any) + crate::create_dir(get_settings_dir()?, crate::unix::Permissions::Any) } #[cfg(target_os = "windows")] { - crate::create_and_return(get_settings_dir()?, false) + crate::create_dir(get_settings_dir()?, false) } } diff --git a/mullvad-paths/src/unix.rs b/mullvad-paths/src/unix.rs index 8f2e5572b1..90a5d2fc5c 100644 --- a/mullvad-paths/src/unix.rs +++ b/mullvad-paths/src/unix.rs @@ -26,7 +26,10 @@ impl Permissions { } } -pub fn create_and_return(dir: PathBuf, permissions: Permissions) -> Result<PathBuf> { +/// Create a directory at `dir`, setting the permissions given by `permissions`, unless it exists. +/// If the directory already exists, but the permissions are not at least as strict as expected, +/// then it will be deleted and recreated. +pub fn create_dir(dir: PathBuf, permissions: Permissions) -> Result<PathBuf> { let mut dir_builder = fs::DirBuilder::new(); let fs_perms = permissions.fs_permissions(); if let Some(fs_perms) = fs_perms.as_ref() { @@ -55,7 +58,7 @@ pub fn create_and_return(dir: PathBuf, permissions: Permissions) -> Result<PathB .map_err(|e| Error::RemoveDir(dir.display().to_string(), e))?; // Try to create it again - return create_and_return(dir, permissions); + return create_dir(dir, permissions); } // Correct permissions, so we're done Ok(dir) diff --git a/mullvad-paths/src/windows.rs b/mullvad-paths/src/windows.rs index 06db6a7752..102fa53f5f 100644 --- a/mullvad-paths/src/windows.rs +++ b/mullvad-paths/src/windows.rs @@ -54,9 +54,22 @@ pub fn get_allusersprofile_dir() -> Result<PathBuf> { } } -pub fn create_and_return(dir: PathBuf, set_security_permissions: bool) -> Result<PathBuf> { - create_dir_recursive(&dir, set_security_permissions)?; - Ok(dir) +/// This recursively creates directories, if set_security_permissions is true it will set +/// file permissions corresponding to Authenticated Users - Read Only and Administrators - Full +/// Access. Only directories that do not already exist and the leaf directory will have their +/// permissions set. +pub fn create_dir(path: PathBuf, set_security_permissions: bool) -> Result<PathBuf> { + if set_security_permissions { + create_dir_with_permissions_recursive(&path)?; + } else { + std::fs::create_dir_all(&path).map_err(|e| { + Error::CreateDirFailed( + format!("Could not create directory at {}", path.display()), + e, + ) + })?; + } + Ok(path) } struct Handle(HANDLE); @@ -80,23 +93,6 @@ fn get_wide_str<S: AsRef<OsStr>>(string: S) -> Vec<u16> { wide_string } -/// Recursively creates directories, if set_security_permissions is true it will set -/// file permissions corresponding to Authenticated Users - Read Only and Administrators - Full -/// Access. Only directories that do not already exist and the leaf directory will have their -/// permissions set. -pub fn create_dir_recursive(path: &Path, set_security_permissions: bool) -> Result<()> { - if set_security_permissions { - create_dir_with_permissions_recursive(path) - } else { - std::fs::create_dir_all(path).map_err(|e| { - Error::CreateDirFailed( - format!("Could not create directory at {}", path.display()), - e, - ) - }) - } -} - /// If directory at path already exists, set permissions for it. /// If directory at path don't exist but parent does, create directory and set permissions. /// If parent directory at path does not exist then recurse and create parent directory and set |
