]> git.lizzy.rs Git - rust.git/commitdiff
I/O safety for WinUWP
authorbdbai <bdbaiapp@163.com>
Thu, 2 Sep 2021 10:18:00 +0000 (18:18 +0800)
committerbdbai <bdbaiapp@163.com>
Thu, 2 Sep 2021 10:18:00 +0000 (18:18 +0800)
library/std/src/sys/windows/fs.rs
library/std/src/sys/windows/stdio_uwp.rs

index 0c1a50e231cd4f87cbfd63a85a4e1b5be5806237..cc137771bb8d41bf79c4dd6efa7717e330901b1d 100644 (file)
@@ -357,7 +357,7 @@ pub fn file_attr(&self) -> io::Result<FileAttr> {
             let mut info: c::FILE_BASIC_INFO = mem::zeroed();
             let size = mem::size_of_val(&info);
             cvt(c::GetFileInformationByHandleEx(
-                self.handle.raw(),
+                self.handle.as_raw_handle(),
                 c::FileBasicInfo,
                 &mut info as *mut _ as *mut libc::c_void,
                 size as c::DWORD,
@@ -385,7 +385,7 @@ pub fn file_attr(&self) -> io::Result<FileAttr> {
             let mut info: c::FILE_STANDARD_INFO = mem::zeroed();
             let size = mem::size_of_val(&info);
             cvt(c::GetFileInformationByHandleEx(
-                self.handle.raw(),
+                self.handle.as_raw_handle(),
                 c::FileStandardInfo,
                 &mut info as *mut _ as *mut libc::c_void,
                 size as c::DWORD,
index 872511af862a72d47ce767a0975fba1083600617..31ffa8c95718d2c97dbcfca0d664f175004bf657 100644 (file)
@@ -2,6 +2,7 @@
 
 use crate::io;
 use crate::mem::ManuallyDrop;
+use crate::os::windows::io::FromRawHandle;
 use crate::sys::c;
 use crate::sys::handle::Handle;
 
@@ -25,7 +26,7 @@ pub fn get_handle(handle_id: c::DWORD) -> io::Result<c::HANDLE> {
 
 fn write(handle_id: c::DWORD, data: &[u8]) -> io::Result<usize> {
     let handle = get_handle(handle_id)?;
-    let handle = Handle::new(handle);
+    let handle = unsafe { Handle::from_raw_handle(handle) };
     ManuallyDrop::new(handle).write(data)
 }
 
@@ -38,7 +39,7 @@ pub const fn new() -> Stdin {
 impl io::Read for Stdin {
     fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
         let handle = get_handle(c::STD_INPUT_HANDLE)?;
-        let handle = Handle::new(handle);
+        let handle = unsafe { Handle::from_raw_handle(handle) };
         ManuallyDrop::new(handle).read(buf)
     }
 }