From 5406fdc6e66275e837305023d0df77f93dde7b36 Mon Sep 17 00:00:00 2001 From: Anton Liashkevich Date: Wed, 4 Mar 2026 01:01:41 -0500 Subject: [PATCH] FreeBSD: Added `xfile` structe and file descriptor types --- libc-test/build.rs | 3 +++ libc-test/semver/freebsd.txt | 1 + src/new/freebsd/mod.rs | 1 + src/new/freebsd/sys/file.rs | 46 ++++++++++++++++++++++++++++++++++++ src/new/freebsd/sys/mod.rs | 5 ++++ src/new/mod.rs | 2 ++ 6 files changed, 58 insertions(+) create mode 100644 src/new/freebsd/sys/file.rs create mode 100644 src/new/freebsd/sys/mod.rs diff --git a/libc-test/build.rs b/libc-test/build.rs index 6854e3c47d8fd..2c44847cd6360 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -2747,6 +2747,9 @@ fn test_freebsd(target: &str) { // Added in FreeBSD 15 "AT_HWCAP3" | "AT_HWCAP4" if Some(15) > freebsd_ver => true, + // Added in FreeBSD 15 + "DTYPE_INOTIFY" | "DTYPE_JAILDESC" if Some(15) > freebsd_ver => true, + _ => false, } }); diff --git a/libc-test/semver/freebsd.txt b/libc-test/semver/freebsd.txt index 110e75e2bca12..65cae415de3e7 100644 --- a/libc-test/semver/freebsd.txt +++ b/libc-test/semver/freebsd.txt @@ -2425,4 +2425,5 @@ vmtotal wait4 waitid xallocx +xfile xucred diff --git a/src/new/freebsd/mod.rs b/src/new/freebsd/mod.rs index 87c2e487560be..eedf235d1e235 100644 --- a/src/new/freebsd/mod.rs +++ b/src/new/freebsd/mod.rs @@ -3,4 +3,5 @@ //! * Headers: //! * Symbol map: +pub(crate) mod sys; pub(crate) mod unistd; diff --git a/src/new/freebsd/sys/file.rs b/src/new/freebsd/sys/file.rs new file mode 100644 index 0000000000000..3072c1de7d763 --- /dev/null +++ b/src/new/freebsd/sys/file.rs @@ -0,0 +1,46 @@ +//! Header: `sys/file.h` +//! +//! https://github.com/freebsd/freebsd-src/blob/main/sys/sys/file.h + +use crate::prelude::*; + +pub const DTYPE_NONE: c_int = 0; +pub const DTYPE_VNODE: c_int = 1; +pub const DTYPE_SOCKET: c_int = 2; +pub const DTYPE_PIPE: c_int = 3; +pub const DTYPE_FIFO: c_int = 4; +pub const DTYPE_KQUEUE: c_int = 5; +pub const DTYPE_CRYPTO: c_int = 6; +pub const DTYPE_MQUEUE: c_int = 7; +pub const DTYPE_SHM: c_int = 8; +pub const DTYPE_SEM: c_int = 9; +pub const DTYPE_PTS: c_int = 10; +pub const DTYPE_DEV: c_int = 11; +pub const DTYPE_PROCDESC: c_int = 12; +pub const DTYPE_EVENTFD: c_int = 13; +pub const DTYPE_TIMERFD: c_int = 14; +pub const DTYPE_INOTIFY: c_int = 15; +pub const DTYPE_JAILDESC: c_int = 16; + +s! { + #[cfg(not(any(freebsd10, freebsd11)))] + pub struct xfile { + pub xf_size: crate::ksize_t, + pub xf_pid: crate::pid_t, + pub xf_uid: crate::uid_t, + pub xf_fd: c_int, + _xf_int_pad1: Padding, + pub xf_file: crate::kvaddr_t, + pub xf_type: c_short, + _xf_short_pad1: Padding, + pub xf_count: c_int, + pub xf_msgcount: c_int, + _xf_int_pad2: Padding, + pub xf_offset: crate::off_t, + pub xf_data: crate::kvaddr_t, + pub xf_vnode: crate::kvaddr_t, + pub xf_flag: c_uint, + _xf_int_pad3: Padding, + _xf_int64_pad: Padding<[i64; 6]>, + } +} diff --git a/src/new/freebsd/sys/mod.rs b/src/new/freebsd/sys/mod.rs new file mode 100644 index 0000000000000..210e674072c59 --- /dev/null +++ b/src/new/freebsd/sys/mod.rs @@ -0,0 +1,5 @@ +//! Directory: `sys/` +//! +//! https://github.com/freebsd/freebsd-src/tree/main/sys/sys' + +pub(crate) mod file; diff --git a/src/new/mod.rs b/src/new/mod.rs index c0c6891242ad4..32c78467de4d9 100644 --- a/src/new/mod.rs +++ b/src/new/mod.rs @@ -210,6 +210,8 @@ cfg_if! { } else if #[cfg(target_os = "nto")] { pub use net::bpf::*; pub use net::if_::*; + } else if #[cfg(target_os = "freebsd")] { + pub use sys::file::*; } }