]> git.proxmox.com Git - rustc.git/blame - vendor/rustix-0.37.6/src/backend/libc/io/windows_syscalls.rs
New upstream version 1.74.1+dfsg1
[rustc.git] / vendor / rustix-0.37.6 / src / backend / libc / io / windows_syscalls.rs
CommitLineData
fe692bf9
FG
1//! Windows system calls in the `io` module.
2
3use super::super::c;
4use super::super::conv::{borrowed_fd, ret, ret_c_int};
5use super::super::fd::LibcFd;
6use crate::fd::{BorrowedFd, RawFd};
7use crate::io;
8use crate::io::PollFd;
9use core::convert::TryInto;
10use core::mem::MaybeUninit;
11
12pub(crate) unsafe fn close(raw_fd: RawFd) {
13 let _ = c::close(raw_fd as LibcFd);
14}
15
16pub(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
24pub(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
31pub(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}