Skip to content

Commit 9b9ad9b

Browse files
committed
Simplify GenericPath::set_extension.
1 parent d1e2048 commit 9b9ad9b

File tree

1 file changed

+21
-34
lines changed

1 file changed

+21
-34
lines changed

src/libstd/path/mod.rs

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -287,42 +287,29 @@ pub trait GenericPath: Clone + GenericPathUnsafe {
287287
/// Fails the task if the extension contains a NUL.
288288
fn set_extension<T: BytesContainer>(&mut self, extension: T) {
289289
assert!(!contains_nul(&extension));
290-
// borrowck causes problems here too
291-
let val = {
292-
match self.filename() {
293-
None => None,
294-
Some(name) => {
295-
let dot = '.' as u8;
296-
match name.rposition_elem(&dot) {
297-
None | Some(0) => {
298-
if extension.container_as_bytes().is_empty() {
299-
None
300-
} else {
301-
let mut v;
302-
let extension = extension.container_as_bytes();
303-
v = slice::with_capacity(name.len() + extension.len() + 1);
304-
v.push_all(name);
305-
v.push(dot);
306-
v.push_all(extension);
307-
Some(v)
308-
}
309-
}
310-
Some(idx) => {
311-
if extension.container_as_bytes().is_empty() {
312-
Some(name.slice_to(idx).to_owned())
313-
} else {
314-
let mut v;
315-
let extension = extension.container_as_bytes();
316-
v = slice::with_capacity(idx + extension.len() + 1);
317-
v.push_all(name.slice_to(idx+1));
318-
v.push_all(extension);
319-
Some(v)
320-
}
321-
}
322-
}
290+
291+
let val = self.filename().and_then(|name| {
292+
let dot = '.' as u8;
293+
let extlen = extension.container_as_bytes().len();
294+
match (name.rposition_elem(&dot), extlen) {
295+
(None, 0) | (Some(0), 0) => None,
296+
(Some(idx), 0) => Some(name.slice_to(idx).to_owned()),
297+
(idx, extlen) => {
298+
let idx = match idx {
299+
None | Some(0) => name.len(),
300+
Some(val) => val
301+
};
302+
303+
let mut v;
304+
v = slice::with_capacity(idx + extlen + 1);
305+
v.push_all(name.slice_to(idx));
306+
v.push(dot);
307+
v.push_all(extension.container_as_bytes());
308+
Some(v)
323309
}
324310
}
325-
};
311+
});
312+
326313
match val {
327314
None => (),
328315
Some(v) => unsafe { self.set_filename_unchecked(v) }

0 commit comments

Comments
 (0)