@@ -261,8 +261,13 @@ impl GenericPathUnsafe for Path {
261
261
let mut s = str:: with_capacity ( me. repr . len ( ) + 1 + pathlen) ;
262
262
s. push_str ( me. repr ) ;
263
263
let plen = me. prefix_len ( ) ;
264
- if !( me. repr . len ( ) > plen && me. repr [ me. repr . len ( ) -1 ] == sep as u8 ) {
265
- s. push_char ( sep) ;
264
+ // if me is "C:" we don't want to add a path separator
265
+ match me. prefix {
266
+ Some ( DiskPrefix ) if me. repr . len ( ) == plen => ( ) ,
267
+ _ if !( me. repr . len ( ) > plen && me. repr [ me. repr . len ( ) -1 ] == sep as u8 ) => {
268
+ s. push_char ( sep) ;
269
+ }
270
+ _ => ( )
266
271
}
267
272
match path_ {
268
273
None => s. push_str ( path) ,
@@ -1549,6 +1554,8 @@ mod tests {
1549
1554
t ! ( s: "C:a\\ b\\ c" , "C:d" , "C:a\\ b\\ c\\ d" ) ;
1550
1555
t ! ( s: "C:a\\ b" , "..\\ ..\\ ..\\ c" , "C:..\\ c" ) ;
1551
1556
t ! ( s: "C:\\ a\\ b" , "..\\ ..\\ ..\\ c" , "C:\\ c" ) ;
1557
+ t ! ( s: "C:" , r"a\b\c" , r"C:a\b\c" ) ;
1558
+ t ! ( s: "C:" , r"..\a" , r"C:..\a" ) ;
1552
1559
t ! ( s: "\\ \\ server\\ share\\ foo" , "bar" , "\\ \\ server\\ share\\ foo\\ bar" ) ;
1553
1560
t ! ( s: "\\ \\ server\\ share\\ foo" , "..\\ ..\\ bar" , "\\ \\ server\\ share\\ bar" ) ;
1554
1561
t ! ( s: "\\ \\ server\\ share\\ foo" , "C:baz" , "C:baz" ) ;
0 commit comments