summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-05-19 15:56:28 +0200
committerDavid Lönnhager <david.l@mullvad.net>2025-05-19 16:20:27 +0200
commit33a7108b7ade4f8e0dc05aa25155ea60e92c4617 (patch)
tree763f7b9819ce8734d67909270de99dcfe60bb032
parent8016afc61217df9fac683a4d2a33cfb52cfaf965 (diff)
downloadmullvadvpn-33a7108b7ade4f8e0dc05aa25155ea60e92c4617.tar.xz
mullvadvpn-33a7108b7ade4f8e0dc05aa25155ea60e92c4617.zip
Rename create_dir_and_return and add documentation
-rw-r--r--mullvad-paths/src/cache.rs2
-rw-r--r--mullvad-paths/src/lib.rs4
-rw-r--r--mullvad-paths/src/logs.rs4
-rw-r--r--mullvad-paths/src/settings.rs4
-rw-r--r--mullvad-paths/src/unix.rs7
-rw-r--r--mullvad-paths/src/windows.rs36
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