mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-30 23:03:06 +03:00
Auto merge of #88587 - bdbai:fix/uwpio, r=joshtriplett
Fix WinUWP std compilation errors due to I/O safety I/O safety for Windows has landed in #87329. However, it does not cover UWP specific parts and prevents all UWP targets from building. See https://github.com/YtFlow/Maple/issues/18. This PR fixes these compile errors when building std for UWP targets.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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,8 @@ 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);
|
||||
// SAFETY: The handle returned from `get_handle` must be valid and non-null.
|
||||
let handle = unsafe { Handle::from_raw_handle(handle) };
|
||||
ManuallyDrop::new(handle).write(data)
|
||||
}
|
||||
|
||||
@@ -38,7 +40,8 @@ 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);
|
||||
// SAFETY: The handle returned from `get_handle` must be valid and non-null.
|
||||
let handle = unsafe { Handle::from_raw_handle(handle) };
|
||||
ManuallyDrop::new(handle).read(buf)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user