summaryrefslogtreecommitdiff
path: root/vendor/rustix/src/backend/libc/io/windows_syscalls.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/rustix/src/backend/libc/io/windows_syscalls.rs')
-rw-r--r--vendor/rustix/src/backend/libc/io/windows_syscalls.rs58
1 files changed, 58 insertions, 0 deletions
diff --git a/vendor/rustix/src/backend/libc/io/windows_syscalls.rs b/vendor/rustix/src/backend/libc/io/windows_syscalls.rs
new file mode 100644
index 00000000..0f953d7f
--- /dev/null
+++ b/vendor/rustix/src/backend/libc/io/windows_syscalls.rs
@@ -0,0 +1,58 @@
+//! Windows system calls in the `io` module.
+
+use crate::backend::c;
+#[cfg(feature = "try_close")]
+use crate::backend::conv::ret;
+use crate::backend::conv::{borrowed_fd, ret_c_int, ret_send_recv, send_recv_len};
+use crate::fd::{BorrowedFd, RawFd};
+use crate::io;
+use crate::ioctl::{IoctlOutput, Opcode};
+
+pub(crate) unsafe fn read(fd: BorrowedFd<'_>, buf: (*mut u8, usize)) -> io::Result<usize> {
+ // `read` on a socket is equivalent to `recv` with no flags.
+ ret_send_recv(c::recv(
+ borrowed_fd(fd),
+ buf.0.cast(),
+ send_recv_len(buf.1),
+ 0,
+ ))
+}
+
+pub(crate) fn write(fd: BorrowedFd<'_>, buf: &[u8]) -> io::Result<usize> {
+ // `write` on a socket is equivalent to `send` with no flags.
+ unsafe {
+ ret_send_recv(c::send(
+ borrowed_fd(fd),
+ buf.as_ptr().cast(),
+ send_recv_len(buf.len()),
+ 0,
+ ))
+ }
+}
+
+pub(crate) unsafe fn close(raw_fd: RawFd) {
+ let _ = c::closesocket(raw_fd as c::SOCKET);
+}
+
+#[cfg(feature = "try_close")]
+pub(crate) unsafe fn try_close(raw_fd: RawFd) -> io::Result<()> {
+ ret(c::closesocket(raw_fd as c::SOCKET))
+}
+
+#[inline]
+pub(crate) unsafe fn ioctl(
+ fd: BorrowedFd<'_>,
+ request: Opcode,
+ arg: *mut c::c_void,
+) -> io::Result<IoctlOutput> {
+ ret_c_int(c::ioctl(borrowed_fd(fd), request, arg.cast()))
+}
+
+#[inline]
+pub(crate) unsafe fn ioctl_readonly(
+ fd: BorrowedFd<'_>,
+ request: Opcode,
+ arg: *mut c::c_void,
+) -> io::Result<IoctlOutput> {
+ ioctl(fd, request, arg)
+}