about summary refs log tree commit diff
path: root/library/std
diff options
context:
space:
mode:
authorThom Chiovoloni <thom@shift.click>2022-08-30 00:16:53 -0700
committerThom Chiovoloni <thom@shift.click>2022-08-30 00:16:53 -0700
commitd9c760db43d8ab701a71f633d820efc72d8cedea (patch)
tree131f03a525300458ad49c3d38246ea3a1dfd3b83 /library/std
parent1b8025a24c4b063d2566671f0664e5dfc263c2a4 (diff)
downloadrust-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.rs11
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,