mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-07 12:05:46 +00:00
Utf8 checks, using references and avoid allocating
And add docs
This commit is contained in:
parent
f1c0c82323
commit
05d83a3726
@ -10,14 +10,13 @@ use fs_err as fs;
|
|||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
use zip::{self, read::ZipFile, ZipArchive};
|
use zip::{self, read::ZipFile, ZipArchive};
|
||||||
|
|
||||||
use self::utf8::get_invalid_utf8_paths;
|
|
||||||
use crate::{
|
use crate::{
|
||||||
error::FinalError,
|
error::FinalError,
|
||||||
info,
|
info,
|
||||||
list::FileInArchive,
|
list::FileInArchive,
|
||||||
utils::{
|
utils::{
|
||||||
cd_into_same_dir_as, concatenate_os_str_list, dir_is_empty, strip_cur_dir, to_utf, user_wants_to_overwrite,
|
cd_into_same_dir_as, concatenate_os_str_list, dir_is_empty, get_invalid_utf8_paths, strip_cur_dir, to_utf,
|
||||||
Bytes,
|
user_wants_to_overwrite, Bytes,
|
||||||
},
|
},
|
||||||
QuestionPolicy,
|
QuestionPolicy,
|
||||||
};
|
};
|
||||||
|
@ -16,23 +16,15 @@ pub use question::{
|
|||||||
pub use utf8::{get_invalid_utf8_paths, is_invalid_utf8};
|
pub use utf8::{get_invalid_utf8_paths, is_invalid_utf8};
|
||||||
|
|
||||||
mod utf8 {
|
mod utf8 {
|
||||||
use std::path::{Path, PathBuf};
|
use std::{ffi::OsStr, path::PathBuf};
|
||||||
|
|
||||||
pub fn is_invalid_utf8(path: &Path) -> bool {
|
/// Check, without allocating, if os_str can be converted into &str
|
||||||
#[cfg(unix)]
|
pub fn is_invalid_utf8(os_str: impl AsRef<OsStr>) -> bool {
|
||||||
{
|
os_str.as_ref().to_str().is_none()
|
||||||
use std::{os::unix::prelude::OsStrExt, str};
|
|
||||||
|
|
||||||
let bytes = path.as_os_str().as_bytes();
|
|
||||||
str::from_utf8(bytes).is_err()
|
|
||||||
}
|
|
||||||
#[cfg(not(unix))]
|
|
||||||
{
|
|
||||||
path.to_str().is_none()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_invalid_utf8_paths(paths: &[PathBuf]) -> Vec<PathBuf> {
|
/// Filter out list of paths that are not utf8 valid
|
||||||
paths.iter().filter_map(|path| is_invalid_utf8(&path).then(|| path.clone())).collect()
|
pub fn get_invalid_utf8_paths(paths: &[PathBuf]) -> Vec<&PathBuf> {
|
||||||
|
paths.iter().filter_map(|path| is_invalid_utf8(path).then(|| path)).collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user