File tree 1 file changed +7
-1
lines changed
library/std/src/sys/windows
1 file changed +7
-1
lines changed Original file line number Diff line number Diff line change @@ -156,7 +156,13 @@ pub fn unrolled_find_u16s(needle: u16, haystack: &[u16]) -> Option<usize> {
156
156
157
157
pub fn to_u16s < S : AsRef < OsStr > > ( s : S ) -> crate :: io:: Result < Vec < u16 > > {
158
158
fn inner ( s : & OsStr ) -> crate :: io:: Result < Vec < u16 > > {
159
- let mut maybe_result: Vec < u16 > = s. encode_wide ( ) . collect ( ) ;
159
+ // Most paths are ASCII, so reserve capacity for as much as there are bytes
160
+ // in the OsStr plus one for the null-terminating character. We are not
161
+ // wasting bytes here as paths created by this function are primarily used
162
+ // in an ephemeral fashion.
163
+ let mut maybe_result: Vec < u16 > = Vec :: with_capacity ( s. len ( ) + 1 ) ;
164
+ maybe_result. extend ( s. encode_wide ( ) ) ;
165
+
160
166
if unrolled_find_u16s ( 0 , & maybe_result) . is_some ( ) {
161
167
return Err ( crate :: io:: const_io_error!(
162
168
ErrorKind :: InvalidInput ,
You can’t perform that action at this time.
0 commit comments