1 //! Windows system calls in the `io` module.
4 use super::super::conv
::{borrowed_fd, ret, ret_c_int}
;
5 use super::super::fd
::LibcFd
;
6 use crate::fd
::{BorrowedFd, RawFd}
;
9 use core
::convert
::TryInto
;
10 use core
::mem
::MaybeUninit
;
12 pub(crate) unsafe fn close(raw_fd
: RawFd
) {
13 let _
= c
::close(raw_fd
as LibcFd
);
16 pub(crate) fn ioctl_fionread(fd
: BorrowedFd
<'_
>) -> io
::Result
<u64> {
17 let mut nread
= MaybeUninit
::<c
::c_ulong
>::uninit();
19 ret(c
::ioctl(borrowed_fd(fd
), c
::FIONREAD
, nread
.as_mut_ptr()))?
;
20 Ok(u64::from(nread
.assume_init()))
24 pub(crate) fn ioctl_fionbio(fd
: BorrowedFd
<'_
>, value
: bool
) -> io
::Result
<()> {
26 let mut data
= value
as c
::c_uint
;
27 ret(c
::ioctl(borrowed_fd(fd
), c
::FIONBIO
, &mut data
))
31 pub(crate) fn poll(fds
: &mut [PollFd
<'_
>], timeout
: c
::c_int
) -> io
::Result
<usize> {
35 .map_err(|_convert_err
| io
::Errno
::INVAL
)?
;
37 ret_c_int(unsafe { c::poll(fds.as_mut_ptr().cast(), nfds, timeout) }
)
38 .map(|nready
| nready
as usize)