diff options
| author | Thom Chiovoloni <thom@shift.click> | 2022-08-30 00:16:53 -0700 |
|---|---|---|
| committer | Thom Chiovoloni <thom@shift.click> | 2022-08-30 00:16:53 -0700 |
| commit | d9c760db43d8ab701a71f633d820efc72d8cedea (patch) | |
| tree | 131f03a525300458ad49c3d38246ea3a1dfd3b83 /library/std | |
| parent | 1b8025a24c4b063d2566671f0664e5dfc263c2a4 (diff) | |
| download | rust-d9c760db43d8ab701a71f633d820efc72d8cedea.tar.gz rust-d9c760db43d8ab701a71f633d820efc72d8cedea.zip | |
Fix UWP and use `AlignedReparseBuf` in `symlink_junction_inner`
Diffstat (limited to 'library/std')
| -rw-r--r-- | library/std/src/sys/windows/fs.rs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/library/std/src/sys/windows/fs.rs b/library/std/src/sys/windows/fs.rs index 01f914617a0..1545ba0d023 100644 --- a/library/std/src/sys/windows/fs.rs +++ b/library/std/src/sys/windows/fs.rs @@ -394,7 +394,7 @@ impl File { if attr.file_type().is_reparse_point() { let mut b = AlignedReparseBuf::new([0; c::MAXIMUM_REPARSE_DATA_BUFFER_SIZE]); if let Ok((_, buf)) = self.reparse_point(&mut b) { - attr.reparse_tag = buf.ReparseTag; + attr.reparse_tag = (*buf).ReparseTag; } } Ok(attr) @@ -1345,9 +1345,10 @@ fn symlink_junction_inner(original: &Path, junction: &Path) -> io::Result<()> { let h = f.as_inner().as_raw_handle(); unsafe { - let mut data = [0u8; c::MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; - let db = data.as_mut_ptr() as *mut c::REPARSE_MOUNTPOINT_DATA_BUFFER; - let buf = &mut (*db).ReparseTarget as *mut c::WCHAR; + let mut data = AlignedReparseBuf::new([0u8; c::MAXIMUM_REPARSE_DATA_BUFFER_SIZE]); + let data_ptr = data.value.as_mut_ptr(); + let db = data_ptr.cast::<c::REPARSE_MOUNTPOINT_DATA_BUFFER>(); + let buf = ptr::addr_of_mut!((*db).ReparseTarget).cast::<c::WCHAR>(); let mut i = 0; // FIXME: this conversion is very hacky let v = br"\??\"; @@ -1367,7 +1368,7 @@ fn symlink_junction_inner(original: &Path, junction: &Path) -> io::Result<()> { cvt(c::DeviceIoControl( h as *mut _, c::FSCTL_SET_REPARSE_POINT, - data.as_ptr() as *mut _, + data_ptr.cast(), (*db).ReparseDataLength + 8, ptr::null_mut(), 0, |
