File tree 1 file changed +17
-0
lines changed
1 file changed +17
-0
lines changed Original file line number Diff line number Diff line change @@ -1329,6 +1329,12 @@ impl ToOwned for CStr {
1329
1329
fn to_owned ( & self ) -> CString {
1330
1330
CString { inner : self . to_bytes_with_nul ( ) . into ( ) }
1331
1331
}
1332
+
1333
+ fn clone_into ( & self , target : & mut CString ) {
1334
+ let mut b = Vec :: from ( mem:: take ( & mut target. inner ) ) ;
1335
+ self . to_bytes_with_nul ( ) . clone_into ( & mut b) ;
1336
+ target. inner = b. into_boxed_slice ( ) ;
1337
+ }
1332
1338
}
1333
1339
1334
1340
#[ stable( feature = "cstring_asref" , since = "1.7.0" ) ]
@@ -1510,6 +1516,17 @@ mod tests {
1510
1516
assert_eq ! ( boxed. to_bytes_with_nul( ) , & [ 0 ] ) ;
1511
1517
}
1512
1518
1519
+ #[ test]
1520
+ fn test_c_str_clone_into ( ) {
1521
+ let mut c_string = CString :: new ( "lorem" ) . unwrap ( ) ;
1522
+ let c_ptr = c_string. as_ptr ( ) ;
1523
+ let c_str = CStr :: from_bytes_with_nul ( b"ipsum\0 " ) . unwrap ( ) ;
1524
+ c_str. clone_into ( & mut c_string) ;
1525
+ assert_eq ! ( c_str, c_string. as_c_str( ) ) ;
1526
+ // The exact same size shouldn't have needed to move its allocation
1527
+ assert_eq ! ( c_ptr, c_string. as_ptr( ) ) ;
1528
+ }
1529
+
1513
1530
#[ test]
1514
1531
fn into_rc ( ) {
1515
1532
let orig: & [ u8 ] = b"Hello, world!\0 " ;
You can’t perform that action at this time.
0 commit comments