From e5ee5eb7b360d3e15efd582d0ab5e11b880046e1 Mon Sep 17 00:00:00 2001 From: sharkdp Date: Sat, 24 Feb 2018 17:02:14 +0100 Subject: [PATCH] Minor speedup for strip_prefix --- src/output.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/output.rs b/src/output.rs index cc3fb46..115b31a 100644 --- a/src/output.rs +++ b/src/output.rs @@ -20,8 +20,22 @@ use std::os::unix::fs::PermissionsExt; use ansi_term; +/// Remove the `./` prefix from a path. +fn strip_current_dir<'a>(pathbuf: &'a PathBuf) -> &'a Path { + let mut iter = pathbuf.components(); + let mut iter_next = iter.clone(); + if iter_next.next() == Some(Component::CurDir) { + iter.next(); + } + iter.as_path() +} + pub fn print_entry(entry: &PathBuf, config: &FdOptions, wants_to_quit: &Arc) { - let path = entry.strip_prefix(".").unwrap_or(entry); + let path = if entry.is_absolute() { + entry.as_path() + } else { + strip_current_dir(entry) + }; let r = if let Some(ref ls_colors) = config.ls_colors { print_entry_colorized(path, config, ls_colors, &wants_to_quit)