mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-10 07:06:53 +00:00
e94d462652
Signed-off-by: mujunxiang <1948535941@qq.com>
74 lines
2.0 KiB
Rust
74 lines
2.0 KiB
Rust
use crate::disk::RUSTFS_META_BUCKET;
|
|
|
|
pub fn match_simple(pattern: &str, name: &str) -> bool {
|
|
if pattern.is_empty() {
|
|
return name == pattern;
|
|
}
|
|
if pattern == "*" {
|
|
return true;
|
|
}
|
|
// Do an extended wildcard '*' and '?' match.
|
|
deep_match_rune(name.as_bytes(), pattern.as_bytes(), true)
|
|
}
|
|
|
|
pub fn match_pattern(pattern: &str, name: &str) -> bool {
|
|
if pattern.is_empty() {
|
|
return name == pattern;
|
|
}
|
|
if pattern == "*" {
|
|
return true;
|
|
}
|
|
// Do an extended wildcard '*' and '?' match.
|
|
deep_match_rune(name.as_bytes(), pattern.as_bytes(), false)
|
|
}
|
|
|
|
fn deep_match_rune(str_: &[u8], pattern: &[u8], simple: bool) -> bool {
|
|
let (mut str_, mut pattern) = (str_, pattern);
|
|
while !pattern.is_empty() {
|
|
match pattern[0] as char {
|
|
'*' => {
|
|
return if pattern.len() == 1 {
|
|
true
|
|
} else {
|
|
deep_match_rune(str_, &pattern[1..], simple)
|
|
|| (!str_.is_empty() && deep_match_rune(&str_[1..], pattern, simple))
|
|
}
|
|
}
|
|
'?' => {
|
|
if str_.is_empty() {
|
|
return simple;
|
|
}
|
|
}
|
|
_ => {
|
|
if str_.is_empty() || str_[0] != pattern[0] {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
str_ = &str_[1..];
|
|
pattern = &pattern[1..];
|
|
}
|
|
str_.is_empty() && pattern.is_empty()
|
|
}
|
|
|
|
pub fn match_as_pattern_prefix(pattern: &str, text: &str) -> bool {
|
|
let mut i = 0;
|
|
while i < text.len() && i < pattern.len() {
|
|
match pattern.as_bytes()[i] as char {
|
|
'*' => return true,
|
|
'?' => i += 1,
|
|
_ => {
|
|
if pattern.as_bytes()[i] != text.as_bytes()[i] {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
i += 1;
|
|
}
|
|
text.len() <= pattern.len()
|
|
}
|
|
|
|
pub fn is_rustfs_meta_bucket_name(bucket: &str) -> bool {
|
|
bucket.starts_with(RUSTFS_META_BUCKET)
|
|
}
|