I/O safety for WinUWP
This commit is contained in:
parent
b27ccbc7e1
commit
a8ac6d471e
2 changed files with 5 additions and 4 deletions
|
@ -357,7 +357,7 @@ impl File {
|
||||||
let mut info: c::FILE_BASIC_INFO = mem::zeroed();
|
let mut info: c::FILE_BASIC_INFO = mem::zeroed();
|
||||||
let size = mem::size_of_val(&info);
|
let size = mem::size_of_val(&info);
|
||||||
cvt(c::GetFileInformationByHandleEx(
|
cvt(c::GetFileInformationByHandleEx(
|
||||||
self.handle.raw(),
|
self.handle.as_raw_handle(),
|
||||||
c::FileBasicInfo,
|
c::FileBasicInfo,
|
||||||
&mut info as *mut _ as *mut libc::c_void,
|
&mut info as *mut _ as *mut libc::c_void,
|
||||||
size as c::DWORD,
|
size as c::DWORD,
|
||||||
|
@ -385,7 +385,7 @@ impl File {
|
||||||
let mut info: c::FILE_STANDARD_INFO = mem::zeroed();
|
let mut info: c::FILE_STANDARD_INFO = mem::zeroed();
|
||||||
let size = mem::size_of_val(&info);
|
let size = mem::size_of_val(&info);
|
||||||
cvt(c::GetFileInformationByHandleEx(
|
cvt(c::GetFileInformationByHandleEx(
|
||||||
self.handle.raw(),
|
self.handle.as_raw_handle(),
|
||||||
c::FileStandardInfo,
|
c::FileStandardInfo,
|
||||||
&mut info as *mut _ as *mut libc::c_void,
|
&mut info as *mut _ as *mut libc::c_void,
|
||||||
size as c::DWORD,
|
size as c::DWORD,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
use crate::io;
|
use crate::io;
|
||||||
use crate::mem::ManuallyDrop;
|
use crate::mem::ManuallyDrop;
|
||||||
|
use crate::os::windows::io::FromRawHandle;
|
||||||
use crate::sys::c;
|
use crate::sys::c;
|
||||||
use crate::sys::handle::Handle;
|
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> {
|
fn write(handle_id: c::DWORD, data: &[u8]) -> io::Result<usize> {
|
||||||
let handle = get_handle(handle_id)?;
|
let handle = get_handle(handle_id)?;
|
||||||
let handle = Handle::new(handle);
|
let handle = unsafe { Handle::from_raw_handle(handle) };
|
||||||
ManuallyDrop::new(handle).write(data)
|
ManuallyDrop::new(handle).write(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +39,7 @@ impl Stdin {
|
||||||
impl io::Read for Stdin {
|
impl io::Read for Stdin {
|
||||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
||||||
let handle = get_handle(c::STD_INPUT_HANDLE)?;
|
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)
|
ManuallyDrop::new(handle).read(buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue