//! Libc call arguments and return values are often things like `c_int`, //! `c_uint`, or libc-specific pointer types. This module provides functions //! for converting between rustix's types and libc types.
usesuper::c; #[cfg(all(feature = "alloc", not(any(windows, target_os = "espidf"))))] usesuper::fd::IntoRawFd as _; usesuper::fd::{AsRawFd as _, BorrowedFd, FromRawFd as _, LibcFd, OwnedFd, RawFd}; #[cfg(not(windows))] usecrate::ffi::CStr; usecrate::io;
/// Convert a `c_int` returned from a libc function to an `OwnedFd`, if valid. /// /// # Safety /// /// The caller must ensure that this is the return value of a libc function /// which returns an owned file descriptor. #[inline] pub(super) unsafefn ret_owned_fd(raw: LibcFd) -> io::Result<OwnedFd> { if raw == !0 {
Err(io::Errno::last_os_error())
} else {
Ok(OwnedFd::from_raw_fd(raw as RawFd))
}
}
/// Convert the buffer-length argument value of a `send` or `recv` call. #[cfg(not(any(windows, target_os = "wasi")))] #[inline] pub(super) fn send_recv_len(len: usize) -> usize {
len
}
/// Convert the buffer-length argument value of a `send` or `recv` call. #[cfg(windows)] #[inline] pub(super) fn send_recv_len(len: usize) -> i32 { // On Windows, the length argument has type `i32`; saturate the length, // since `send` and `recv` are allowed to send and recv less data than // requested.
len.try_into().unwrap_or(i32::MAX)
}
/// Convert the return value of a `send` or `recv` call. #[cfg(not(any(windows, target_os = "wasi")))] #[inline] pub(super) fn ret_send_recv(len: isize) -> io::Result<usize> {
ret_usize(len)
}
/// Convert the return value of a `send` or `recv` call. #[cfg(windows)] #[inline] pub(super) fn ret_send_recv(len: i32) -> io::Result<usize> {
ret_usize(len as isize)
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.