• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //! Windows system calls in the `io` module.
2 
3 use super::super::c;
4 use super::super::conv::{borrowed_fd, ret, ret_c_int};
5 use super::super::fd::LibcFd;
6 use crate::fd::{BorrowedFd, RawFd};
7 use crate::io;
8 use crate::io::PollFd;
9 use core::convert::TryInto;
10 use core::mem::MaybeUninit;
11 
close(raw_fd: RawFd)12 pub(crate) unsafe fn close(raw_fd: RawFd) {
13     let _ = c::close(raw_fd as LibcFd);
14 }
15 
ioctl_fionread(fd: BorrowedFd<'_>) -> io::Result<u64>16 pub(crate) fn ioctl_fionread(fd: BorrowedFd<'_>) -> io::Result<u64> {
17     let mut nread = MaybeUninit::<c::c_ulong>::uninit();
18     unsafe {
19         ret(c::ioctl(borrowed_fd(fd), c::FIONREAD, nread.as_mut_ptr()))?;
20         Ok(u64::from(nread.assume_init()))
21     }
22 }
23 
ioctl_fionbio(fd: BorrowedFd<'_>, value: bool) -> io::Result<()>24 pub(crate) fn ioctl_fionbio(fd: BorrowedFd<'_>, value: bool) -> io::Result<()> {
25     unsafe {
26         let mut data = value as c::c_uint;
27         ret(c::ioctl(borrowed_fd(fd), c::FIONBIO, &mut data))
28     }
29 }
30 
poll(fds: &mut [PollFd<'_>], timeout: c::c_int) -> io::Result<usize>31 pub(crate) fn poll(fds: &mut [PollFd<'_>], timeout: c::c_int) -> io::Result<usize> {
32     let nfds = fds
33         .len()
34         .try_into()
35         .map_err(|_convert_err| io::Errno::INVAL)?;
36 
37     ret_c_int(unsafe { c::poll(fds.as_mut_ptr().cast(), nfds, timeout) })
38         .map(|nready| nready as usize)
39 }
40