use crate::error::{Error, Result};
use crate::path_validate::{
validate_component, validate_path, EntryMode, PathValidationKind, ProtectOptions,
};
pub fn validate_tree_walk_entry(
prefix: &[u8],
entry_name: &[u8],
mode: u32,
opts: ProtectOptions,
) -> Result<()> {
validate_component(
entry_name,
EntryMode::new(mode),
opts,
PathValidationKind::Worktree,
)
.map_err(|reason| {
let display = tree_walk_display_path(prefix, entry_name);
Error::invalid_path_component(display, reason)
})
}
fn tree_walk_display_path(prefix: &[u8], entry_name: &[u8]) -> String {
let name = String::from_utf8_lossy(entry_name);
if prefix.is_empty() {
name.into_owned()
} else {
format!("{}/{}", String::from_utf8_lossy(prefix), name)
}
}
pub fn validate_worktree_path(path: &[u8], mode: u32, opts: ProtectOptions) -> Result<()> {
validate_path(
path,
EntryMode::new(mode),
opts,
PathValidationKind::Worktree,
)
.map_err(|reason| {
Error::invalid_path_component(String::from_utf8_lossy(path).into_owned(), reason)
})
}