catch trailing space/period as well

This commit is contained in:
Damien Elmes 2020-02-09 11:43:11 +10:00
parent 5ccdeb46b8
commit 58da7988c3

View File

@ -37,6 +37,16 @@ lazy_static! {
"# "#
) )
.unwrap(); .unwrap();
static ref WINDOWS_TRAILING_CHAR: Regex = Regex::new(
r#"(?x)
# filenames can't end with a space or period
(
\x20 | \.
)
$
"#
)
.unwrap();
pub(super) static ref NONSYNCABLE_FILENAME: Regex = Regex::new( pub(super) static ref NONSYNCABLE_FILENAME: Regex = Regex::new(
r#"(?xi) r#"(?xi)
^ ^
@ -84,6 +94,10 @@ fn normalize_nfc_filename(mut fname: Cow<str>) -> Cow<str> {
fname = o.into(); fname = o.into();
} }
if WINDOWS_TRAILING_CHAR.is_match(fname.as_ref()) {
fname = format!("{}_", fname.as_ref()).into();
}
if let Cow::Owned(o) = truncate_filename(fname.as_ref(), MAX_FILENAME_LENGTH) { if let Cow::Owned(o) = truncate_filename(fname.as_ref(), MAX_FILENAME_LENGTH) {
fname = o.into(); fname = o.into();
} }
@ -393,6 +407,9 @@ mod test {
"con_.jpg" "con_.jpg"
); );
assert_eq!(normalize_filename("test.").as_ref(), "test._");
assert_eq!(normalize_filename("test ").as_ref(), "test _");
let expected_stem_len = MAX_FILENAME_LENGTH - ".jpg".len(); let expected_stem_len = MAX_FILENAME_LENGTH - ".jpg".len();
assert_eq!( assert_eq!(
normalize_filename(&format!("{}.jpg", "x".repeat(MAX_FILENAME_LENGTH * 2))), normalize_filename(&format!("{}.jpg", "x".repeat(MAX_FILENAME_LENGTH * 2))),