]>
Commit | Line | Data |
---|---|---|
fe692bf9 FG |
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 | ||
12 | pub(crate) unsafe fn close(raw_fd: RawFd) { | |
13 | let _ = c::close(raw_fd as LibcFd); | |
14 | } | |
15 | ||
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 | ||
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 | ||
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 | } |