mirror of
https://github.com/Llewellynvdm/starship.git
synced 2025-01-13 10:25:33 +00:00
refactor(directory/lock): fix clippy, replace str with Path (#1544)
This commit is contained in:
parent
b14be4dfb1
commit
36ae36282a
@ -107,7 +107,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
|||||||
.map(|variable| match variable {
|
.map(|variable| match variable {
|
||||||
"path" => Some(Ok(&final_dir_string)),
|
"path" => Some(Ok(&final_dir_string)),
|
||||||
"read_only" => {
|
"read_only" => {
|
||||||
if is_readonly_dir(context.current_dir.to_str()?) {
|
if is_readonly_dir(&context.current_dir) {
|
||||||
Some(Ok(&lock_symbol))
|
Some(Ok(&lock_symbol))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
@ -129,12 +129,12 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
|||||||
Some(module)
|
Some(module)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_readonly_dir(path: &str) -> bool {
|
fn is_readonly_dir(path: &Path) -> bool {
|
||||||
match directory_utils::is_write_allowed(path) {
|
match directory_utils::is_write_allowed(path) {
|
||||||
Ok(res) => !res,
|
Ok(res) => !res,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::debug!(
|
log::debug!(
|
||||||
"Failed to detemine read only status of directory '{}': {}",
|
"Failed to detemine read only status of directory '{:?}': {}",
|
||||||
path,
|
path,
|
||||||
e
|
e
|
||||||
);
|
);
|
||||||
|
@ -3,6 +3,7 @@ use nix::unistd::{Gid, Uid};
|
|||||||
use std::fs;
|
use std::fs;
|
||||||
use std::os::unix::fs::MetadataExt;
|
use std::os::unix::fs::MetadataExt;
|
||||||
use std::os::unix::fs::PermissionsExt;
|
use std::os::unix::fs::PermissionsExt;
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
/// Checks if the current user can write to the `folder_path`.
|
/// Checks if the current user can write to the `folder_path`.
|
||||||
///
|
///
|
||||||
@ -12,7 +13,7 @@ use std::os::unix::fs::PermissionsExt;
|
|||||||
/// 2a) (not implemented on macOS) one of the supplementary groups of the current user is the
|
/// 2a) (not implemented on macOS) one of the supplementary groups of the current user is the
|
||||||
/// directory group owner and whether it has write access
|
/// directory group owner and whether it has write access
|
||||||
/// 3) 'others' part of the access mask has the write access
|
/// 3) 'others' part of the access mask has the write access
|
||||||
pub fn is_write_allowed(folder_path: &str) -> Result<bool, &'static str> {
|
pub fn is_write_allowed(folder_path: &Path) -> Result<bool, &'static str> {
|
||||||
let meta = fs::metadata(folder_path).map_err(|_| "Unable to stat() directory")?;
|
let meta = fs::metadata(folder_path).map_err(|_| "Unable to stat() directory")?;
|
||||||
let perms = meta.permissions().mode();
|
let perms = meta.permissions().mode();
|
||||||
|
|
||||||
@ -52,9 +53,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
#[ignore]
|
#[ignore]
|
||||||
fn read_only_test() {
|
fn read_only_test() {
|
||||||
assert_eq!(is_write_allowed("/etc"), Ok(false));
|
assert_eq!(is_write_allowed(Path::new("/etc")), Ok(false));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
is_write_allowed("/i_dont_exist"),
|
is_write_allowed(Path::new("/i_dont_exist")),
|
||||||
Err("Unable to stat() directory")
|
Err("Unable to stat() directory")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
extern crate winapi;
|
extern crate winapi;
|
||||||
|
|
||||||
use std::ffi::OsStr;
|
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::os::windows::ffi::OsStrExt;
|
use std::os::windows::ffi::OsStrExt;
|
||||||
|
use std::path::Path;
|
||||||
use winapi::ctypes::c_void;
|
use winapi::ctypes::c_void;
|
||||||
use winapi::shared::minwindef::{BOOL, DWORD};
|
use winapi::shared::minwindef::{BOOL, DWORD};
|
||||||
use winapi::um::handleapi;
|
use winapi::um::handleapi;
|
||||||
@ -21,8 +21,9 @@ use winapi::um::winnt::{
|
|||||||
/// First, the function extracts DACL from the given directory and then calls `AccessCheck` against
|
/// First, the function extracts DACL from the given directory and then calls `AccessCheck` against
|
||||||
/// the current process access token and directory's security descriptor.
|
/// the current process access token and directory's security descriptor.
|
||||||
/// Does not work for network drives and always returns true
|
/// Does not work for network drives and always returns true
|
||||||
pub fn is_write_allowed(folder_path: &str) -> std::result::Result<bool, &'static str> {
|
pub fn is_write_allowed(folder_path: &Path) -> std::result::Result<bool, &'static str> {
|
||||||
let folder_name: Vec<u16> = OsStr::new(folder_path)
|
let folder_name: Vec<u16> = folder_path
|
||||||
|
.as_os_str()
|
||||||
.encode_wide()
|
.encode_wide()
|
||||||
.chain(iter::once(0))
|
.chain(iter::once(0))
|
||||||
.collect();
|
.collect();
|
||||||
@ -131,6 +132,6 @@ extern "system" {
|
|||||||
fn PathIsNetworkPathW(pszPath: LPCWSTR) -> BOOLEAN;
|
fn PathIsNetworkPathW(pszPath: LPCWSTR) -> BOOLEAN;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_network_path(folder_path: &Vec<u16>) -> bool {
|
fn is_network_path(folder_path: &[u16]) -> bool {
|
||||||
return unsafe { PathIsNetworkPathW(folder_path.as_ptr()) } == 1;
|
unsafe { PathIsNetworkPathW(folder_path.as_ptr()) == 1 }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user