mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 15:23:46 +00:00
Avoid UB in the Windows filesystem code in... bootstrap?
This commit is contained in:
parent
6e4a9ab650
commit
850090d99c
@ -67,6 +67,7 @@ features = [
|
||||
"psapi",
|
||||
"impl-default",
|
||||
"timezoneapi",
|
||||
"winbase",
|
||||
]
|
||||
|
||||
[dev-dependencies]
|
||||
|
@ -197,9 +197,11 @@ pub fn symlink_dir(config: &Config, src: &Path, dest: &Path) -> io::Result<()> {
|
||||
ptr::null_mut(),
|
||||
);
|
||||
|
||||
let mut data = [0u8; MAXIMUM_REPARSE_DATA_BUFFER_SIZE as usize];
|
||||
let db = data.as_mut_ptr() as *mut REPARSE_MOUNTPOINT_DATA_BUFFER;
|
||||
let buf = &mut (*db).ReparseTarget as *mut u16;
|
||||
#[repr(C, align(8))]
|
||||
struct Align8<T>(T);
|
||||
let mut data = Align8([0u8; MAXIMUM_REPARSE_DATA_BUFFER_SIZE as usize]);
|
||||
let db = data.0.as_mut_ptr() as *mut REPARSE_MOUNTPOINT_DATA_BUFFER;
|
||||
let buf = core::ptr::addr_of_mut!((*db).ReparseTarget) as *mut u16;
|
||||
let mut i = 0;
|
||||
// FIXME: this conversion is very hacky
|
||||
let v = br"\??\";
|
||||
@ -219,7 +221,7 @@ pub fn symlink_dir(config: &Config, src: &Path, dest: &Path) -> io::Result<()> {
|
||||
let res = DeviceIoControl(
|
||||
h as *mut _,
|
||||
FSCTL_SET_REPARSE_POINT,
|
||||
data.as_ptr() as *mut _,
|
||||
db.cast(),
|
||||
(*db).ReparseDataLength + 8,
|
||||
ptr::null_mut(),
|
||||
0,
|
||||
|
Loading…
Reference in New Issue
Block a user