#![unstable(issue = "0", feature = "windows_handle")]
use crate::cmp;
-use crate::io::{self, ErrorKind, Read, IoSlice, IoSliceMut};
+use crate::io::{self, ErrorKind, IoSlice, IoSliceMut, Read};
use crate::mem;
use crate::ops::Deref;
use crate::ptr;
pub fn new_event(manual: bool, init: bool) -> io::Result<Handle> {
unsafe {
- let event = c::CreateEventW(ptr::null_mut(),
- manual as c::BOOL,
- init as c::BOOL,
- ptr::null());
- if event.is_null() {
- Err(io::Error::last_os_error())
- } else {
- Ok(Handle::new(event))
- }
+ let event =
+ c::CreateEventW(ptr::null_mut(), manual as c::BOOL, init as c::BOOL, ptr::null());
+ if event.is_null() { Err(io::Error::last_os_error()) } else { Ok(Handle::new(event)) }
}
}
impl Deref for Handle {
type Target = RawHandle;
- fn deref(&self) -> &RawHandle { &self.0 }
+ fn deref(&self) -> &RawHandle {
+ &self.0
+ }
}
impl Drop for Handle {
fn drop(&mut self) {
- unsafe { let _ = c::CloseHandle(self.raw()); }
+ unsafe {
+ let _ = c::CloseHandle(self.raw());
+ }
}
}
RawHandle(handle)
}
- pub fn raw(&self) -> c::HANDLE { self.0 }
+ pub fn raw(&self) -> c::HANDLE {
+ self.0
+ }
pub fn read(&self, buf: &mut [u8]) -> io::Result<usize> {
let mut read = 0;
let len = cmp::min(buf.len(), <c::DWORD>::max_value() as usize) as c::DWORD;
let res = cvt(unsafe {
- c::ReadFile(self.0, buf.as_mut_ptr() as c::LPVOID,
- len, &mut read, ptr::null_mut())
+ c::ReadFile(self.0, buf.as_mut_ptr() as c::LPVOID, len, &mut read, ptr::null_mut())
});
match res {
// EOF on the pipe.
Err(ref e) if e.kind() == ErrorKind::BrokenPipe => Ok(0),
- Err(e) => Err(e)
+ Err(e) => Err(e),
}
}
let mut overlapped: c::OVERLAPPED = mem::zeroed();
overlapped.Offset = offset as u32;
overlapped.OffsetHigh = (offset >> 32) as u32;
- cvt(c::ReadFile(self.0, buf.as_mut_ptr() as c::LPVOID,
- len, &mut read, &mut overlapped))
+ cvt(c::ReadFile(self.0, buf.as_mut_ptr() as c::LPVOID, len, &mut read, &mut overlapped))
};
match res {
Ok(_) => Ok(read as usize),
}
}
- pub unsafe fn read_overlapped(&self,
- buf: &mut [u8],
- overlapped: *mut c::OVERLAPPED)
- -> io::Result<Option<usize>> {
+ pub unsafe fn read_overlapped(
+ &self,
+ buf: &mut [u8],
+ overlapped: *mut c::OVERLAPPED,
+ ) -> io::Result<Option<usize>> {
let len = cmp::min(buf.len(), <c::DWORD>::max_value() as usize) as c::DWORD;
let mut amt = 0;
- let res = cvt({
- c::ReadFile(self.0, buf.as_ptr() as c::LPVOID,
- len, &mut amt, overlapped)
- });
+ let res =
+ cvt({ c::ReadFile(self.0, buf.as_ptr() as c::LPVOID, len, &mut amt, overlapped) });
match res {
Ok(_) => Ok(Some(amt as usize)),
Err(e) => {
}
}
- pub fn overlapped_result(&self,
- overlapped: *mut c::OVERLAPPED,
- wait: bool) -> io::Result<usize> {
+ pub fn overlapped_result(
+ &self,
+ overlapped: *mut c::OVERLAPPED,
+ wait: bool,
+ ) -> io::Result<usize> {
unsafe {
let mut bytes = 0;
- let wait = if wait {c::TRUE} else {c::FALSE};
- let res = cvt({
- c::GetOverlappedResult(self.raw(), overlapped, &mut bytes, wait)
- });
+ let wait = if wait { c::TRUE } else { c::FALSE };
+ let res = cvt({ c::GetOverlappedResult(self.raw(), overlapped, &mut bytes, wait) });
match res {
Ok(_) => Ok(bytes as usize),
Err(e) => {
- if e.raw_os_error() == Some(c::ERROR_HANDLE_EOF as i32) ||
- e.raw_os_error() == Some(c::ERROR_BROKEN_PIPE as i32) {
+ if e.raw_os_error() == Some(c::ERROR_HANDLE_EOF as i32)
+ || e.raw_os_error() == Some(c::ERROR_BROKEN_PIPE as i32)
+ {
Ok(0)
} else {
Err(e)
}
pub fn cancel_io(&self) -> io::Result<()> {
- unsafe {
- cvt(c::CancelIo(self.raw())).map(|_| ())
- }
+ unsafe { cvt(c::CancelIo(self.raw())).map(|_| ()) }
}
pub fn write(&self, buf: &[u8]) -> io::Result<usize> {
let mut amt = 0;
let len = cmp::min(buf.len(), <c::DWORD>::max_value() as usize) as c::DWORD;
cvt(unsafe {
- c::WriteFile(self.0, buf.as_ptr() as c::LPVOID,
- len, &mut amt, ptr::null_mut())
+ c::WriteFile(self.0, buf.as_ptr() as c::LPVOID, len, &mut amt, ptr::null_mut())
})?;
Ok(amt as usize)
}
let mut overlapped: c::OVERLAPPED = mem::zeroed();
overlapped.Offset = offset as u32;
overlapped.OffsetHigh = (offset >> 32) as u32;
- cvt(c::WriteFile(self.0, buf.as_ptr() as c::LPVOID,
- len, &mut written, &mut overlapped))?;
+ cvt(c::WriteFile(
+ self.0,
+ buf.as_ptr() as c::LPVOID,
+ len,
+ &mut written,
+ &mut overlapped,
+ ))?;
}
Ok(written as usize)
}
- pub fn duplicate(&self, access: c::DWORD, inherit: bool,
- options: c::DWORD) -> io::Result<Handle> {
+ pub fn duplicate(
+ &self,
+ access: c::DWORD,
+ inherit: bool,
+ options: c::DWORD,
+ ) -> io::Result<Handle> {
let mut ret = 0 as c::HANDLE;
cvt(unsafe {
let cur_proc = c::GetCurrentProcess();
- c::DuplicateHandle(cur_proc, self.0, cur_proc, &mut ret,
- access, inherit as c::BOOL,
- options)
+ c::DuplicateHandle(
+ cur_proc,
+ self.0,
+ cur_proc,
+ &mut ret,
+ access,
+ inherit as c::BOOL,
+ options,
+ )
})?;
Ok(Handle::new(ret))
}