diff --git a/build.rs b/build.rs index 4d67888be835a..66a333d9d0fd7 100644 --- a/build.rs +++ b/build.rs @@ -8,8 +8,6 @@ use std::string::String; // make sure to add it to this list as well. const ALLOWED_CFGS: &'static [&'static str] = &[ "emscripten_new_stat_abi", - "freebsd10", - "freebsd11", "freebsd12", "freebsd13", "freebsd14", @@ -56,18 +54,13 @@ fn main() { ); } - // The ABI of libc used by libstd is backward compatible with FreeBSD 10. - // The ABI of libc from crates.io is backward compatible with FreeBSD 11. - // // On CI, we detect the actual FreeBSD version and match its ABI exactly, // running tests to ensure that the ABI is correct. match which_freebsd() { - Some(10) if libc_ci || rustc_dep_of_std => set_cfg("freebsd10"), - Some(11) if libc_ci => set_cfg("freebsd11"), Some(12) if libc_ci => set_cfg("freebsd12"), Some(13) if libc_ci => set_cfg("freebsd13"), Some(14) if libc_ci => set_cfg("freebsd14"), - Some(_) | None => set_cfg("freebsd11"), + Some(_) | None => set_cfg("freebsd12"), } match emcc_version_code() { diff --git a/ci/dox.sh b/ci/dox.sh index 6dd1e4a2282c7..3ec54c923a08d 100644 --- a/ci/dox.sh +++ b/ci/dox.sh @@ -47,7 +47,7 @@ while read -r target; do rustup target add "${target}" || true # Enable extra configuration flags: - export RUSTDOCFLAGS="--cfg freebsd11" + export RUSTDOCFLAGS="--cfg freebsd12" # If cargo doc fails, then try with unstable feature: if ! cargo doc --target "${target}" \ diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs deleted file mode 100644 index f32128f775574..0000000000000 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs +++ /dev/null @@ -1,32 +0,0 @@ -#[repr(C)] -#[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] -pub struct stat { - pub st_dev: ::dev_t, - pub st_ino: ::ino_t, - pub st_mode: ::mode_t, - pub st_nlink: ::nlink_t, - pub st_uid: ::uid_t, - pub st_gid: ::gid_t, - pub st_rdev: ::dev_t, - pub st_atime: ::time_t, - pub st_atime_nsec: ::c_long, - pub st_mtime: ::time_t, - pub st_mtime_nsec: ::c_long, - pub st_ctime: ::time_t, - pub st_ctime_nsec: ::c_long, - pub st_size: ::off_t, - pub st_blocks: ::blkcnt_t, - pub st_blksize: ::blksize_t, - pub st_flags: ::fflags_t, - pub st_gen: u32, - pub st_lspare: i32, - pub st_birthtime: ::time_t, - pub st_birthtime_nsec: ::c_long, -} - -impl ::Copy for ::stat {} -impl ::Clone for ::stat { - fn clone(&self) -> ::stat { - *self - } -} diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs deleted file mode 100644 index de34069eabdf2..0000000000000 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs +++ /dev/null @@ -1,488 +0,0 @@ -// APIs that were changed after FreeBSD 11 - -// The type of `nlink_t` changed from `u16` to `u64` in FreeBSD 12: -pub type nlink_t = u16; -// Type of `dev_t` changed from `u32` to `u64` in FreeBSD 12: -pub type dev_t = u32; -// Type of `ino_t` changed from `unsigned int` to `unsigned long` in FreeBSD 12: -pub type ino_t = u32; - -s! { - pub struct kevent { - pub ident: ::uintptr_t, - pub filter: ::c_short, - pub flags: ::c_ushort, - pub fflags: ::c_uint, - pub data: ::intptr_t, - pub udata: *mut ::c_void, - } - - pub struct shmid_ds { - pub shm_perm: ::ipc_perm, - pub shm_segsz: ::size_t, - pub shm_lpid: ::pid_t, - pub shm_cpid: ::pid_t, - // Type of shm_nattc changed from `int` to `shmatt_t` (aka `unsigned - // int`) in FreeBSD 12: - pub shm_nattch: ::c_int, - pub shm_atime: ::time_t, - pub shm_dtime: ::time_t, - pub shm_ctime: ::time_t, - } - - pub struct kinfo_proc { - /// Size of this structure. - pub ki_structsize: ::c_int, - /// Reserved: layout identifier. - pub ki_layout: ::c_int, - /// Address of command arguments. - pub ki_args: *mut ::pargs, - // This is normally "struct proc". - /// Address of proc. - pub ki_paddr: *mut ::c_void, - // This is normally "struct user". - /// Kernel virtual address of u-area. - pub ki_addr: *mut ::c_void, - // This is normally "struct vnode". - /// Pointer to trace file. - pub ki_tracep: *mut ::c_void, - // This is normally "struct vnode". - /// Pointer to executable file. - pub ki_textvp: *mut ::c_void, - // This is normally "struct filedesc". - /// Pointer to open file info. - pub ki_fd: *mut ::c_void, - // This is normally "struct vmspace". - /// Pointer to kernel vmspace struct. - pub ki_vmspace: *mut ::c_void, - /// Sleep address. - pub ki_wchan: *mut ::c_void, - /// Process identifier. - pub ki_pid: ::pid_t, - /// Parent process ID. - pub ki_ppid: ::pid_t, - /// Process group ID. - pub ki_pgid: ::pid_t, - /// tty process group ID. - pub ki_tpgid: ::pid_t, - /// Process session ID. - pub ki_sid: ::pid_t, - /// Terminal session ID. - pub ki_tsid: ::pid_t, - /// Job control counter. - pub ki_jobc: ::c_short, - /// Unused (just here for alignment). - pub ki_spare_short1: ::c_short, - /// Controlling tty dev. - pub ki_tdev: ::dev_t, - /// Signals arrived but not delivered. - pub ki_siglist: ::sigset_t, - /// Current signal mask. - pub ki_sigmask: ::sigset_t, - /// Signals being ignored. - pub ki_sigignore: ::sigset_t, - /// Signals being caught by user. - pub ki_sigcatch: ::sigset_t, - /// Effective user ID. - pub ki_uid: ::uid_t, - /// Real user ID. - pub ki_ruid: ::uid_t, - /// Saved effective user ID. - pub ki_svuid: ::uid_t, - /// Real group ID. - pub ki_rgid: ::gid_t, - /// Saved effective group ID. - pub ki_svgid: ::gid_t, - /// Number of groups. - pub ki_ngroups: ::c_short, - /// Unused (just here for alignment). - pub ki_spare_short2: ::c_short, - /// Groups. - pub ki_groups: [::gid_t; ::KI_NGROUPS], - /// Virtual size. - pub ki_size: ::vm_size_t, - /// Current resident set size in pages. - pub ki_rssize: ::segsz_t, - /// Resident set size before last swap. - pub ki_swrss: ::segsz_t, - /// Text size (pages) XXX. - pub ki_tsize: ::segsz_t, - /// Data size (pages) XXX. - pub ki_dsize: ::segsz_t, - /// Stack size (pages). - pub ki_ssize: ::segsz_t, - /// Exit status for wait & stop signal. - pub ki_xstat: ::u_short, - /// Accounting flags. - pub ki_acflag: ::u_short, - /// %cpu for process during `ki_swtime`. - pub ki_pctcpu: ::fixpt_t, - /// Time averaged value of `ki_cpticks`. - pub ki_estcpu: ::u_int, - /// Time since last blocked. - pub ki_slptime: ::u_int, - /// Time swapped in or out. - pub ki_swtime: ::u_int, - /// Number of copy-on-write faults. - pub ki_cow: ::u_int, - /// Real time in microsec. - pub ki_runtime: u64, - /// Starting time. - pub ki_start: ::timeval, - /// Time used by process children. - pub ki_childtime: ::timeval, - /// P_* flags. - pub ki_flag: ::c_long, - /// KI_* flags (below). - pub ki_kiflag: ::c_long, - /// Kernel trace points. - pub ki_traceflag: ::c_int, - /// S* process status. - pub ki_stat: ::c_char, - /// Process "nice" value. - pub ki_nice: i8, // signed char - /// Process lock (prevent swap) count. - pub ki_lock: ::c_char, - /// Run queue index. - pub ki_rqindex: ::c_char, - /// Which cpu we are on. - pub ki_oncpu_old: ::c_uchar, - /// Last cpu we were on. - pub ki_lastcpu_old: ::c_uchar, - /// Thread name. - pub ki_tdname: [::c_char; ::TDNAMLEN + 1], - /// Wchan message. - pub ki_wmesg: [::c_char; ::WMESGLEN + 1], - /// Setlogin name. - pub ki_login: [::c_char; ::LOGNAMELEN + 1], - /// Lock name. - pub ki_lockname: [::c_char; ::LOCKNAMELEN + 1], - /// Command name. - pub ki_comm: [::c_char; ::COMMLEN + 1], - /// Emulation name. - pub ki_emul: [::c_char; ::KI_EMULNAMELEN + 1], - /// Login class. - pub ki_loginclass: [::c_char; ::LOGINCLASSLEN + 1], - /// More thread name. - pub ki_moretdname: [::c_char; ::MAXCOMLEN - ::TDNAMLEN + 1], - /// Spare string space. - pub ki_sparestrings: [[::c_char; 23]; 2], // little hack to allow PartialEq - /// Spare room for growth. - pub ki_spareints: [::c_int; ::KI_NSPARE_INT], - /// Which cpu we are on. - pub ki_oncpu: ::c_int, - /// Last cpu we were on. - pub ki_lastcpu: ::c_int, - /// PID of tracing process. - pub ki_tracer: ::c_int, - /// P2_* flags. - pub ki_flag2: ::c_int, - /// Default FIB number. - pub ki_fibnum: ::c_int, - /// Credential flags. - pub ki_cr_flags: ::u_int, - /// Process jail ID. - pub ki_jid: ::c_int, - /// Number of threads in total. - pub ki_numthreads: ::c_int, - /// Thread ID. - pub ki_tid: ::lwpid_t, - /// Process priority. - pub ki_pri: ::priority, - /// Process rusage statistics. - pub ki_rusage: ::rusage, - /// rusage of children processes. - pub ki_rusage_ch: ::rusage, - // This is normally "struct pcb". - /// Kernel virtual addr of pcb. - pub ki_pcb: *mut ::c_void, - /// Kernel virtual addr of stack. - pub ki_kstack: *mut ::c_void, - /// User convenience pointer. - pub ki_udata: *mut ::c_void, - // This is normally "struct thread". - pub ki_tdaddr: *mut ::c_void, - pub ki_spareptrs: [*mut ::c_void; ::KI_NSPARE_PTR], - pub ki_sparelongs: [::c_long; ::KI_NSPARE_LONG], - /// PS_* flags. - pub ki_sflag: ::c_long, - /// kthread flag. - pub ki_tdflags: ::c_long, - } -} - -s_no_extra_traits! { - pub struct dirent { - pub d_fileno: ::ino_t, - pub d_reclen: u16, - pub d_type: u8, - // Type of `d_namlen` changed from `char` to `u16` in FreeBSD 12: - pub d_namlen: u8, - pub d_name: [::c_char; 256], - } - - pub struct statfs { - pub f_version: u32, - pub f_type: u32, - pub f_flags: u64, - pub f_bsize: u64, - pub f_iosize: u64, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: i64, - pub f_files: u64, - pub f_ffree: i64, - pub f_syncwrites: u64, - pub f_asyncwrites: u64, - pub f_syncreads: u64, - pub f_asyncreads: u64, - f_spare: [u64; 10], - pub f_namemax: u32, - pub f_owner: ::uid_t, - pub f_fsid: ::fsid_t, - f_charspare: [::c_char; 80], - pub f_fstypename: [::c_char; 16], - // Array length changed from 88 to 1024 in FreeBSD 12: - pub f_mntfromname: [::c_char; 88], - // Array length changed from 88 to 1024 in FreeBSD 12: - pub f_mntonname: [::c_char; 88], - } - - pub struct vnstat { - pub vn_fileid: u64, - pub vn_size: u64, - pub vn_mntdir: *mut ::c_char, - pub vn_dev: u32, - pub vn_fsid: u32, - pub vn_type: ::c_int, - pub vn_mode: u16, - pub vn_devname: [::c_char; ::SPECNAMELEN as usize + 1], - } -} - -cfg_if! { - if #[cfg(feature = "extra_traits")] { - impl PartialEq for statfs { - fn eq(&self, other: &statfs) -> bool { - self.f_version == other.f_version - && self.f_type == other.f_type - && self.f_flags == other.f_flags - && self.f_bsize == other.f_bsize - && self.f_iosize == other.f_iosize - && self.f_blocks == other.f_blocks - && self.f_bfree == other.f_bfree - && self.f_bavail == other.f_bavail - && self.f_files == other.f_files - && self.f_ffree == other.f_ffree - && self.f_syncwrites == other.f_syncwrites - && self.f_asyncwrites == other.f_asyncwrites - && self.f_syncreads == other.f_syncreads - && self.f_asyncreads == other.f_asyncreads - && self.f_namemax == other.f_namemax - && self.f_owner == other.f_owner - && self.f_fsid == other.f_fsid - && self.f_fstypename == other.f_fstypename - && self - .f_mntfromname - .iter() - .zip(other.f_mntfromname.iter()) - .all(|(a,b)| a == b) - && self - .f_mntonname - .iter() - .zip(other.f_mntonname.iter()) - .all(|(a,b)| a == b) - } - } - impl Eq for statfs {} - impl ::fmt::Debug for statfs { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - f.debug_struct("statfs") - .field("f_bsize", &self.f_bsize) - .field("f_iosize", &self.f_iosize) - .field("f_blocks", &self.f_blocks) - .field("f_bfree", &self.f_bfree) - .field("f_bavail", &self.f_bavail) - .field("f_files", &self.f_files) - .field("f_ffree", &self.f_ffree) - .field("f_syncwrites", &self.f_syncwrites) - .field("f_asyncwrites", &self.f_asyncwrites) - .field("f_syncreads", &self.f_syncreads) - .field("f_asyncreads", &self.f_asyncreads) - .field("f_namemax", &self.f_namemax) - .field("f_owner", &self.f_owner) - .field("f_fsid", &self.f_fsid) - .field("f_fstypename", &self.f_fstypename) - .field("f_mntfromname", &&self.f_mntfromname[..]) - .field("f_mntonname", &&self.f_mntonname[..]) - .finish() - } - } - impl ::hash::Hash for statfs { - fn hash(&self, state: &mut H) { - self.f_version.hash(state); - self.f_type.hash(state); - self.f_flags.hash(state); - self.f_bsize.hash(state); - self.f_iosize.hash(state); - self.f_blocks.hash(state); - self.f_bfree.hash(state); - self.f_bavail.hash(state); - self.f_files.hash(state); - self.f_ffree.hash(state); - self.f_syncwrites.hash(state); - self.f_asyncwrites.hash(state); - self.f_syncreads.hash(state); - self.f_asyncreads.hash(state); - self.f_namemax.hash(state); - self.f_owner.hash(state); - self.f_fsid.hash(state); - self.f_fstypename.hash(state); - self.f_mntfromname.hash(state); - self.f_mntonname.hash(state); - } - } - - impl PartialEq for dirent { - fn eq(&self, other: &dirent) -> bool { - self.d_fileno == other.d_fileno - && self.d_reclen == other.d_reclen - && self.d_type == other.d_type - && self.d_namlen == other.d_namlen - && self - .d_name[..self.d_namlen as _] - .iter() - .zip(other.d_name.iter()) - .all(|(a,b)| a == b) - } - } - impl Eq for dirent {} - impl ::fmt::Debug for dirent { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - f.debug_struct("dirent") - .field("d_fileno", &self.d_fileno) - .field("d_reclen", &self.d_reclen) - .field("d_type", &self.d_type) - .field("d_namlen", &self.d_namlen) - .field("d_name", &&self.d_name[..self.d_namlen as _]) - .finish() - } - } - impl ::hash::Hash for dirent { - fn hash(&self, state: &mut H) { - self.d_fileno.hash(state); - self.d_reclen.hash(state); - self.d_type.hash(state); - self.d_namlen.hash(state); - self.d_name[..self.d_namlen as _].hash(state); - } - } - - impl PartialEq for vnstat { - fn eq(&self, other: &vnstat) -> bool { - let self_vn_devname: &[::c_char] = &self.vn_devname; - let other_vn_devname: &[::c_char] = &other.vn_devname; - - self.vn_fileid == other.vn_fileid && - self.vn_size == other.vn_size && - self.vn_mntdir == other.vn_mntdir && - self.vn_dev == other.vn_dev && - self.vn_fsid == other.vn_fsid && - self.vn_type == other.vn_type && - self.vn_mode == other.vn_mode && - self_vn_devname == other_vn_devname - } - } - impl Eq for vnstat {} - impl ::fmt::Debug for vnstat { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - let self_vn_devname: &[::c_char] = &self.vn_devname; - - f.debug_struct("vnstat") - .field("vn_fileid", &self.vn_fileid) - .field("vn_size", &self.vn_size) - .field("vn_mntdir", &self.vn_mntdir) - .field("vn_dev", &self.vn_dev) - .field("vn_fsid", &self.vn_fsid) - .field("vn_type", &self.vn_type) - .field("vn_mode", &self.vn_mode) - .field("vn_devname", &self_vn_devname) - .finish() - } - } - impl ::hash::Hash for vnstat { - fn hash(&self, state: &mut H) { - let self_vn_devname: &[::c_char] = &self.vn_devname; - - self.vn_fileid.hash(state); - self.vn_size.hash(state); - self.vn_mntdir.hash(state); - self.vn_dev.hash(state); - self.vn_fsid.hash(state); - self.vn_type.hash(state); - self.vn_mode.hash(state); - self_vn_devname.hash(state); - } - } - } -} - -pub const ELAST: ::c_int = 96; -pub const RAND_MAX: ::c_int = 0x7fff_fffd; -pub const KI_NSPARE_PTR: usize = 6; -pub const MINCORE_SUPER: ::c_int = 0x20; -/// max length of devicename -pub const SPECNAMELEN: ::c_int = 63; - -safe_f! { - pub {const} fn makedev(major: ::c_uint, minor: ::c_uint) -> ::dev_t { - let major = major as ::dev_t; - let minor = minor as ::dev_t; - (major << 8) | minor - } -} - -f! { - pub fn major(dev: ::dev_t) -> ::c_int { - ((dev >> 8) & 0xff) as ::c_int - } - - pub fn minor(dev: ::dev_t) -> ::c_int { - (dev & 0xffff00ff) as ::c_int - } -} - -extern "C" { - // Return type ::c_int was removed in FreeBSD 12 - pub fn setgrent() -> ::c_int; - - // Type of `addr` argument changed from `const void*` to `void*` - // in FreeBSD 12 - pub fn mprotect(addr: *const ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; - - // Return type ::c_int was removed in FreeBSD 12 - pub fn freelocale(loc: ::locale_t) -> ::c_int; - - // Return type ::c_int changed to ::ssize_t in FreeBSD 12: - pub fn msgrcv( - msqid: ::c_int, - msgp: *mut ::c_void, - msgsz: ::size_t, - msgtyp: ::c_long, - msgflg: ::c_int, - ) -> ::c_int; - - // Type of `path` argument changed from `const void*` to `void*` - // in FreeBSD 12 - pub fn dirname(path: *const ::c_char) -> *mut ::c_char; - pub fn basename(path: *const ::c_char) -> *mut ::c_char; -} - -cfg_if! { - if #[cfg(any(target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "riscv64"))] { - mod b64; - pub use self::b64::*; - } -} diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs index 10fcaa03a4ef6..5df6df9499731 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs @@ -1,32 +1,6 @@ // APIs in FreeBSD 12 that have changed since 11. -pub type nlink_t = u64; -pub type dev_t = u64; -pub type ino_t = ::c_ulong; -pub type shmatt_t = ::c_uint; - s! { - pub struct shmid_ds { - pub shm_perm: ::ipc_perm, - pub shm_segsz: ::size_t, - pub shm_lpid: ::pid_t, - pub shm_cpid: ::pid_t, - pub shm_nattch: ::shmatt_t, - pub shm_atime: ::time_t, - pub shm_dtime: ::time_t, - pub shm_ctime: ::time_t, - } - - pub struct kevent { - pub ident: ::uintptr_t, - pub filter: ::c_short, - pub flags: ::c_ushort, - pub fflags: ::c_uint, - pub data: i64, - pub udata: *mut ::c_void, - pub ext: [u64; 4], - } - pub struct kvm_page { pub version: ::c_uint, pub paddr: ::c_ulong, @@ -221,42 +195,6 @@ s! { } s_no_extra_traits! { - pub struct dirent { - pub d_fileno: ::ino_t, - pub d_off: ::off_t, - pub d_reclen: u16, - pub d_type: u8, - d_pad0: u8, - pub d_namlen: u16, - d_pad1: u16, - pub d_name: [::c_char; 256], - } - - pub struct statfs { - pub f_version: u32, - pub f_type: u32, - pub f_flags: u64, - pub f_bsize: u64, - pub f_iosize: u64, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: i64, - pub f_files: u64, - pub f_ffree: i64, - pub f_syncwrites: u64, - pub f_asyncwrites: u64, - pub f_syncreads: u64, - pub f_asyncreads: u64, - f_spare: [u64; 10], - pub f_namemax: u32, - pub f_owner: ::uid_t, - pub f_fsid: ::fsid_t, - f_charspare: [::c_char; 80], - pub f_fstypename: [::c_char; 16], - pub f_mntfromname: [::c_char; 1024], - pub f_mntonname: [::c_char; 1024], - } - pub struct vnstat { pub vn_fileid: u64, pub vn_size: u64, @@ -271,126 +209,6 @@ s_no_extra_traits! { cfg_if! { if #[cfg(feature = "extra_traits")] { - impl PartialEq for statfs { - fn eq(&self, other: &statfs) -> bool { - self.f_version == other.f_version - && self.f_type == other.f_type - && self.f_flags == other.f_flags - && self.f_bsize == other.f_bsize - && self.f_iosize == other.f_iosize - && self.f_blocks == other.f_blocks - && self.f_bfree == other.f_bfree - && self.f_bavail == other.f_bavail - && self.f_files == other.f_files - && self.f_ffree == other.f_ffree - && self.f_syncwrites == other.f_syncwrites - && self.f_asyncwrites == other.f_asyncwrites - && self.f_syncreads == other.f_syncreads - && self.f_asyncreads == other.f_asyncreads - && self.f_namemax == other.f_namemax - && self.f_owner == other.f_owner - && self.f_fsid == other.f_fsid - && self.f_fstypename == other.f_fstypename - && self - .f_mntfromname - .iter() - .zip(other.f_mntfromname.iter()) - .all(|(a,b)| a == b) - && self - .f_mntonname - .iter() - .zip(other.f_mntonname.iter()) - .all(|(a,b)| a == b) - } - } - impl Eq for statfs {} - impl ::fmt::Debug for statfs { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - f.debug_struct("statfs") - .field("f_bsize", &self.f_bsize) - .field("f_iosize", &self.f_iosize) - .field("f_blocks", &self.f_blocks) - .field("f_bfree", &self.f_bfree) - .field("f_bavail", &self.f_bavail) - .field("f_files", &self.f_files) - .field("f_ffree", &self.f_ffree) - .field("f_syncwrites", &self.f_syncwrites) - .field("f_asyncwrites", &self.f_asyncwrites) - .field("f_syncreads", &self.f_syncreads) - .field("f_asyncreads", &self.f_asyncreads) - .field("f_namemax", &self.f_namemax) - .field("f_owner", &self.f_owner) - .field("f_fsid", &self.f_fsid) - .field("f_fstypename", &self.f_fstypename) - .field("f_mntfromname", &&self.f_mntfromname[..]) - .field("f_mntonname", &&self.f_mntonname[..]) - .finish() - } - } - impl ::hash::Hash for statfs { - fn hash(&self, state: &mut H) { - self.f_version.hash(state); - self.f_type.hash(state); - self.f_flags.hash(state); - self.f_bsize.hash(state); - self.f_iosize.hash(state); - self.f_blocks.hash(state); - self.f_bfree.hash(state); - self.f_bavail.hash(state); - self.f_files.hash(state); - self.f_ffree.hash(state); - self.f_syncwrites.hash(state); - self.f_asyncwrites.hash(state); - self.f_syncreads.hash(state); - self.f_asyncreads.hash(state); - self.f_namemax.hash(state); - self.f_owner.hash(state); - self.f_fsid.hash(state); - self.f_charspare.hash(state); - self.f_fstypename.hash(state); - self.f_mntfromname.hash(state); - self.f_mntonname.hash(state); - } - } - - impl PartialEq for dirent { - fn eq(&self, other: &dirent) -> bool { - self.d_fileno == other.d_fileno - && self.d_off == other.d_off - && self.d_reclen == other.d_reclen - && self.d_type == other.d_type - && self.d_namlen == other.d_namlen - && self - .d_name[..self.d_namlen as _] - .iter() - .zip(other.d_name.iter()) - .all(|(a,b)| a == b) - } - } - impl Eq for dirent {} - impl ::fmt::Debug for dirent { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - f.debug_struct("dirent") - .field("d_fileno", &self.d_fileno) - .field("d_off", &self.d_off) - .field("d_reclen", &self.d_reclen) - .field("d_type", &self.d_type) - .field("d_namlen", &self.d_namlen) - .field("d_name", &&self.d_name[..self.d_namlen as _]) - .finish() - } - } - impl ::hash::Hash for dirent { - fn hash(&self, state: &mut H) { - self.d_fileno.hash(state); - self.d_off.hash(state); - self.d_reclen.hash(state); - self.d_type.hash(state); - self.d_namlen.hash(state); - self.d_name[..self.d_namlen as _].hash(state); - } - } - impl PartialEq for vnstat { fn eq(&self, other: &vnstat) -> bool { let self_vn_devname: &[::c_char] = &self.vn_devname; @@ -454,10 +272,10 @@ safe_f! { let major = major as ::dev_t; let minor = minor as ::dev_t; let mut dev = 0; - dev |= ((major & 0xffffff00) as dev_t) << 32; - dev |= ((major & 0x000000ff) as dev_t) << 8; - dev |= ((minor & 0x0000ff00) as dev_t) << 24; - dev |= ((minor & 0xffff00ff) as dev_t) << 0; + dev |= ((major & 0xffffff00) as ::dev_t) << 32; + dev |= ((major & 0x000000ff) as ::dev_t) << 8; + dev |= ((minor & 0x0000ff00) as ::dev_t) << 24; + dev |= ((minor & 0xffff00ff) as ::dev_t) << 0; dev } } @@ -472,22 +290,6 @@ f! { } } -extern "C" { - pub fn setgrent(); - pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; - pub fn freelocale(loc: ::locale_t); - pub fn msgrcv( - msqid: ::c_int, - msgp: *mut ::c_void, - msgsz: ::size_t, - msgtyp: ::c_long, - msgflg: ::c_int, - ) -> ::ssize_t; - - pub fn dirname(path: *mut ::c_char) -> *mut ::c_char; - pub fn basename(path: *mut ::c_char) -> *mut ::c_char; -} - cfg_if! { if #[cfg(any(target_arch = "x86_64", target_arch = "aarch64", diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs index 0e04a12e70e47..6d0de88f58910 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs @@ -1,35 +1,10 @@ // APIs in FreeBSD 14 that have changed since 11. -pub type nlink_t = u64; -pub type dev_t = u64; -pub type ino_t = ::c_ulong; -pub type shmatt_t = ::c_uint; pub type kpaddr_t = u64; pub type kssize_t = i64; pub type domainset_t = __c_anonymous_domainset; s! { - pub struct shmid_ds { - pub shm_perm: ::ipc_perm, - pub shm_segsz: ::size_t, - pub shm_lpid: ::pid_t, - pub shm_cpid: ::pid_t, - pub shm_nattch: ::shmatt_t, - pub shm_atime: ::time_t, - pub shm_dtime: ::time_t, - pub shm_ctime: ::time_t, - } - - pub struct kevent { - pub ident: ::uintptr_t, - pub filter: ::c_short, - pub flags: ::c_ushort, - pub fflags: ::c_uint, - pub data: i64, - pub udata: *mut ::c_void, - pub ext: [u64; 4], - } - pub struct kvm_page { pub kp_version: ::u_int, pub kp_paddr: ::kpaddr_t, @@ -231,42 +206,6 @@ s! { } s_no_extra_traits! { - pub struct dirent { - pub d_fileno: ::ino_t, - pub d_off: ::off_t, - pub d_reclen: u16, - pub d_type: u8, - d_pad0: u8, - pub d_namlen: u16, - d_pad1: u16, - pub d_name: [::c_char; 256], - } - - pub struct statfs { - pub f_version: u32, - pub f_type: u32, - pub f_flags: u64, - pub f_bsize: u64, - pub f_iosize: u64, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: i64, - pub f_files: u64, - pub f_ffree: i64, - pub f_syncwrites: u64, - pub f_asyncwrites: u64, - pub f_syncreads: u64, - pub f_asyncreads: u64, - f_spare: [u64; 10], - pub f_namemax: u32, - pub f_owner: ::uid_t, - pub f_fsid: ::fsid_t, - f_charspare: [::c_char; 80], - pub f_fstypename: [::c_char; 16], - pub f_mntfromname: [::c_char; 1024], - pub f_mntonname: [::c_char; 1024], - } - pub struct vnstat { pub vn_fileid: u64, pub vn_size: u64, @@ -281,126 +220,6 @@ s_no_extra_traits! { cfg_if! { if #[cfg(feature = "extra_traits")] { - impl PartialEq for statfs { - fn eq(&self, other: &statfs) -> bool { - self.f_version == other.f_version - && self.f_type == other.f_type - && self.f_flags == other.f_flags - && self.f_bsize == other.f_bsize - && self.f_iosize == other.f_iosize - && self.f_blocks == other.f_blocks - && self.f_bfree == other.f_bfree - && self.f_bavail == other.f_bavail - && self.f_files == other.f_files - && self.f_ffree == other.f_ffree - && self.f_syncwrites == other.f_syncwrites - && self.f_asyncwrites == other.f_asyncwrites - && self.f_syncreads == other.f_syncreads - && self.f_asyncreads == other.f_asyncreads - && self.f_namemax == other.f_namemax - && self.f_owner == other.f_owner - && self.f_fsid == other.f_fsid - && self.f_fstypename == other.f_fstypename - && self - .f_mntfromname - .iter() - .zip(other.f_mntfromname.iter()) - .all(|(a,b)| a == b) - && self - .f_mntonname - .iter() - .zip(other.f_mntonname.iter()) - .all(|(a,b)| a == b) - } - } - impl Eq for statfs {} - impl ::fmt::Debug for statfs { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - f.debug_struct("statfs") - .field("f_bsize", &self.f_bsize) - .field("f_iosize", &self.f_iosize) - .field("f_blocks", &self.f_blocks) - .field("f_bfree", &self.f_bfree) - .field("f_bavail", &self.f_bavail) - .field("f_files", &self.f_files) - .field("f_ffree", &self.f_ffree) - .field("f_syncwrites", &self.f_syncwrites) - .field("f_asyncwrites", &self.f_asyncwrites) - .field("f_syncreads", &self.f_syncreads) - .field("f_asyncreads", &self.f_asyncreads) - .field("f_namemax", &self.f_namemax) - .field("f_owner", &self.f_owner) - .field("f_fsid", &self.f_fsid) - .field("f_fstypename", &self.f_fstypename) - .field("f_mntfromname", &&self.f_mntfromname[..]) - .field("f_mntonname", &&self.f_mntonname[..]) - .finish() - } - } - impl ::hash::Hash for statfs { - fn hash(&self, state: &mut H) { - self.f_version.hash(state); - self.f_type.hash(state); - self.f_flags.hash(state); - self.f_bsize.hash(state); - self.f_iosize.hash(state); - self.f_blocks.hash(state); - self.f_bfree.hash(state); - self.f_bavail.hash(state); - self.f_files.hash(state); - self.f_ffree.hash(state); - self.f_syncwrites.hash(state); - self.f_asyncwrites.hash(state); - self.f_syncreads.hash(state); - self.f_asyncreads.hash(state); - self.f_namemax.hash(state); - self.f_owner.hash(state); - self.f_fsid.hash(state); - self.f_charspare.hash(state); - self.f_fstypename.hash(state); - self.f_mntfromname.hash(state); - self.f_mntonname.hash(state); - } - } - - impl PartialEq for dirent { - fn eq(&self, other: &dirent) -> bool { - self.d_fileno == other.d_fileno - && self.d_off == other.d_off - && self.d_reclen == other.d_reclen - && self.d_type == other.d_type - && self.d_namlen == other.d_namlen - && self - .d_name[..self.d_namlen as _] - .iter() - .zip(other.d_name.iter()) - .all(|(a,b)| a == b) - } - } - impl Eq for dirent {} - impl ::fmt::Debug for dirent { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - f.debug_struct("dirent") - .field("d_fileno", &self.d_fileno) - .field("d_off", &self.d_off) - .field("d_reclen", &self.d_reclen) - .field("d_type", &self.d_type) - .field("d_namlen", &self.d_namlen) - .field("d_name", &&self.d_name[..self.d_namlen as _]) - .finish() - } - } - impl ::hash::Hash for dirent { - fn hash(&self, state: &mut H) { - self.d_fileno.hash(state); - self.d_off.hash(state); - self.d_reclen.hash(state); - self.d_type.hash(state); - self.d_namlen.hash(state); - self.d_name[..self.d_namlen as _].hash(state); - } - } - impl PartialEq for vnstat { fn eq(&self, other: &vnstat) -> bool { let self_vn_devname: &[::c_char] = &self.vn_devname; @@ -473,10 +292,10 @@ safe_f! { let major = major as ::dev_t; let minor = minor as ::dev_t; let mut dev = 0; - dev |= ((major & 0xffffff00) as dev_t) << 32; - dev |= ((major & 0x000000ff) as dev_t) << 8; - dev |= ((minor & 0x0000ff00) as dev_t) << 24; - dev |= ((minor & 0xffff00ff) as dev_t) << 0; + dev |= ((major & 0xffffff00) as ::dev_t) << 32; + dev |= ((major & 0x000000ff) as ::dev_t) << 8; + dev |= ((minor & 0x0000ff00) as ::dev_t) << 24; + dev |= ((minor & 0xffff00ff) as ::dev_t) << 0; dev } } @@ -492,17 +311,6 @@ f! { } extern "C" { - pub fn setgrent(); - pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; - pub fn freelocale(loc: ::locale_t); - pub fn msgrcv( - msqid: ::c_int, - msgp: *mut ::c_void, - msgsz: ::size_t, - msgtyp: ::c_long, - msgflg: ::c_int, - ) -> ::ssize_t; - pub fn cpuset_getdomain( level: ::cpulevel_t, which: ::cpuwhich_t, @@ -519,9 +327,6 @@ extern "C" { mask: *const ::domainset_t, policy: ::c_int, ) -> ::c_int; - - pub fn dirname(path: *mut ::c_char) -> *mut ::c_char; - pub fn basename(path: *mut ::c_char) -> *mut ::c_char; } #[link(name = "kvm")] diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs index a86ca6e7c56ea..fec43231570f5 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs @@ -1,35 +1,10 @@ // APIs in FreeBSD 13 that have changed since 11. -pub type nlink_t = u64; -pub type dev_t = u64; -pub type ino_t = ::c_ulong; -pub type shmatt_t = ::c_uint; pub type kpaddr_t = u64; pub type kssize_t = i64; pub type domainset_t = __c_anonymous_domainset; s! { - pub struct shmid_ds { - pub shm_perm: ::ipc_perm, - pub shm_segsz: ::size_t, - pub shm_lpid: ::pid_t, - pub shm_cpid: ::pid_t, - pub shm_nattch: ::shmatt_t, - pub shm_atime: ::time_t, - pub shm_dtime: ::time_t, - pub shm_ctime: ::time_t, - } - - pub struct kevent { - pub ident: ::uintptr_t, - pub filter: ::c_short, - pub flags: ::c_ushort, - pub fflags: ::c_uint, - pub data: i64, - pub udata: *mut ::c_void, - pub ext: [u64; 4], - } - pub struct kvm_page { pub kp_version: ::u_int, pub kp_paddr: ::kpaddr_t, @@ -231,42 +206,6 @@ s! { } s_no_extra_traits! { - pub struct dirent { - pub d_fileno: ::ino_t, - pub d_off: ::off_t, - pub d_reclen: u16, - pub d_type: u8, - d_pad0: u8, - pub d_namlen: u16, - d_pad1: u16, - pub d_name: [::c_char; 256], - } - - pub struct statfs { - pub f_version: u32, - pub f_type: u32, - pub f_flags: u64, - pub f_bsize: u64, - pub f_iosize: u64, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: i64, - pub f_files: u64, - pub f_ffree: i64, - pub f_syncwrites: u64, - pub f_asyncwrites: u64, - pub f_syncreads: u64, - pub f_asyncreads: u64, - f_spare: [u64; 10], - pub f_namemax: u32, - pub f_owner: ::uid_t, - pub f_fsid: ::fsid_t, - f_charspare: [::c_char; 80], - pub f_fstypename: [::c_char; 16], - pub f_mntfromname: [::c_char; 1024], - pub f_mntonname: [::c_char; 1024], - } - pub struct vnstat { pub vn_fileid: u64, pub vn_size: u64, @@ -281,126 +220,6 @@ s_no_extra_traits! { cfg_if! { if #[cfg(feature = "extra_traits")] { - impl PartialEq for statfs { - fn eq(&self, other: &statfs) -> bool { - self.f_version == other.f_version - && self.f_type == other.f_type - && self.f_flags == other.f_flags - && self.f_bsize == other.f_bsize - && self.f_iosize == other.f_iosize - && self.f_blocks == other.f_blocks - && self.f_bfree == other.f_bfree - && self.f_bavail == other.f_bavail - && self.f_files == other.f_files - && self.f_ffree == other.f_ffree - && self.f_syncwrites == other.f_syncwrites - && self.f_asyncwrites == other.f_asyncwrites - && self.f_syncreads == other.f_syncreads - && self.f_asyncreads == other.f_asyncreads - && self.f_namemax == other.f_namemax - && self.f_owner == other.f_owner - && self.f_fsid == other.f_fsid - && self.f_fstypename == other.f_fstypename - && self - .f_mntfromname - .iter() - .zip(other.f_mntfromname.iter()) - .all(|(a,b)| a == b) - && self - .f_mntonname - .iter() - .zip(other.f_mntonname.iter()) - .all(|(a,b)| a == b) - } - } - impl Eq for statfs {} - impl ::fmt::Debug for statfs { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - f.debug_struct("statfs") - .field("f_bsize", &self.f_bsize) - .field("f_iosize", &self.f_iosize) - .field("f_blocks", &self.f_blocks) - .field("f_bfree", &self.f_bfree) - .field("f_bavail", &self.f_bavail) - .field("f_files", &self.f_files) - .field("f_ffree", &self.f_ffree) - .field("f_syncwrites", &self.f_syncwrites) - .field("f_asyncwrites", &self.f_asyncwrites) - .field("f_syncreads", &self.f_syncreads) - .field("f_asyncreads", &self.f_asyncreads) - .field("f_namemax", &self.f_namemax) - .field("f_owner", &self.f_owner) - .field("f_fsid", &self.f_fsid) - .field("f_fstypename", &self.f_fstypename) - .field("f_mntfromname", &&self.f_mntfromname[..]) - .field("f_mntonname", &&self.f_mntonname[..]) - .finish() - } - } - impl ::hash::Hash for statfs { - fn hash(&self, state: &mut H) { - self.f_version.hash(state); - self.f_type.hash(state); - self.f_flags.hash(state); - self.f_bsize.hash(state); - self.f_iosize.hash(state); - self.f_blocks.hash(state); - self.f_bfree.hash(state); - self.f_bavail.hash(state); - self.f_files.hash(state); - self.f_ffree.hash(state); - self.f_syncwrites.hash(state); - self.f_asyncwrites.hash(state); - self.f_syncreads.hash(state); - self.f_asyncreads.hash(state); - self.f_namemax.hash(state); - self.f_owner.hash(state); - self.f_fsid.hash(state); - self.f_charspare.hash(state); - self.f_fstypename.hash(state); - self.f_mntfromname.hash(state); - self.f_mntonname.hash(state); - } - } - - impl PartialEq for dirent { - fn eq(&self, other: &dirent) -> bool { - self.d_fileno == other.d_fileno - && self.d_off == other.d_off - && self.d_reclen == other.d_reclen - && self.d_type == other.d_type - && self.d_namlen == other.d_namlen - && self - .d_name[..self.d_namlen as _] - .iter() - .zip(other.d_name.iter()) - .all(|(a,b)| a == b) - } - } - impl Eq for dirent {} - impl ::fmt::Debug for dirent { - fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { - f.debug_struct("dirent") - .field("d_fileno", &self.d_fileno) - .field("d_off", &self.d_off) - .field("d_reclen", &self.d_reclen) - .field("d_type", &self.d_type) - .field("d_namlen", &self.d_namlen) - .field("d_name", &&self.d_name[..self.d_namlen as _]) - .finish() - } - } - impl ::hash::Hash for dirent { - fn hash(&self, state: &mut H) { - self.d_fileno.hash(state); - self.d_off.hash(state); - self.d_reclen.hash(state); - self.d_type.hash(state); - self.d_namlen.hash(state); - self.d_name[..self.d_namlen as _].hash(state); - } - } - impl PartialEq for vnstat { fn eq(&self, other: &vnstat) -> bool { let self_vn_devname: &[::c_char] = &self.vn_devname; @@ -473,10 +292,10 @@ safe_f! { let major = major as ::dev_t; let minor = minor as ::dev_t; let mut dev = 0; - dev |= ((major & 0xffffff00) as dev_t) << 32; - dev |= ((major & 0x000000ff) as dev_t) << 8; - dev |= ((minor & 0x0000ff00) as dev_t) << 24; - dev |= ((minor & 0xffff00ff) as dev_t) << 0; + dev |= ((major & 0xffffff00) as ::dev_t) << 32; + dev |= ((major & 0x000000ff) as ::dev_t) << 8; + dev |= ((minor & 0x0000ff00) as ::dev_t) << 24; + dev |= ((minor & 0xffff00ff) as ::dev_t) << 0; dev } } diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs index 4138af576e936..8ab463b525668 100644 --- a/src/unix/bsd/freebsdlike/freebsd/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs @@ -48,6 +48,11 @@ pub type cpusetid_t = ::c_int; pub type sctp_assoc_t = u32; +pub type nlink_t = u64; +pub type dev_t = u64; +pub type ino_t = ::c_ulong; +pub type shmatt_t = ::c_uint; + #[cfg_attr(feature = "extra_traits", derive(Debug, Hash, PartialEq, Eq))] #[repr(u32)] pub enum devstat_support_flags { @@ -429,8 +434,6 @@ s! { pub kve_vn_fileid: u64, #[cfg(not(freebsd11))] pub kve_vn_fsid_freebsd11: u32, - #[cfg(freebsd11)] - pub kve_vn_fsid: u32, pub kve_flags: ::c_int, pub kve_resident: ::c_int, pub kve_private_resident: ::c_int, @@ -441,8 +444,6 @@ s! { pub kve_vn_size: u64, #[cfg(not(freebsd11))] pub kve_vn_rdev_freebsd11: u32, - #[cfg(freebsd11)] - pub kve_vn_rdev: u32, pub kve_vn_mode: u16, pub kve_status: u16, #[cfg(not(freebsd11))] @@ -451,8 +452,6 @@ s! { pub kve_vn_rdev: u64, #[cfg(not(freebsd11))] _kve_is_spare: [::c_int; 8], - #[cfg(freebsd11)] - _kve_is_spare: [::c_int; 12], pub kve_path: [[::c_char; 32]; 32], } @@ -1319,6 +1318,28 @@ s! { pub strchange_instrms: u16, pub strchange_outstrms: u16, } + + pub struct kevent { + pub ident: ::uintptr_t, + pub filter: ::c_short, + pub flags: ::c_ushort, + pub fflags: ::c_uint, + pub data: i64, + pub udata: *mut ::c_void, + pub ext: [u64; 4], + } + + pub struct shmid_ds { + pub shm_perm: ::ipc_perm, + pub shm_segsz: ::size_t, + pub shm_lpid: ::pid_t, + pub shm_cpid: ::pid_t, + pub shm_nattch: ::shmatt_t, + pub shm_atime: ::time_t, + pub shm_dtime: ::time_t, + pub shm_ctime: ::time_t, + } + } s_no_extra_traits! { @@ -1611,6 +1632,42 @@ s_no_extra_traits! { pub cause: sctp_error_cause, pub hmac_id: u16, } + + pub struct dirent { + pub d_fileno: ::ino_t, + pub d_off: ::off_t, + pub d_reclen: u16, + pub d_type: u8, + d_pad0: u8, + pub d_namlen: u16, + d_pad1: u16, + pub d_name: [::c_char; 256], + } + + pub struct statfs { + pub f_version: u32, + pub f_type: u32, + pub f_flags: u64, + pub f_bsize: u64, + pub f_iosize: u64, + pub f_blocks: u64, + pub f_bfree: u64, + pub f_bavail: i64, + pub f_files: u64, + pub f_ffree: i64, + pub f_syncwrites: u64, + pub f_asyncwrites: u64, + pub f_syncreads: u64, + pub f_asyncreads: u64, + f_spare: [u64; 10], + pub f_namemax: u32, + pub f_owner: ::uid_t, + pub f_fsid: ::fsid_t, + f_charspare: [::c_char; 80], + pub f_fstypename: [::c_char; 16], + pub f_mntfromname: [::c_char; 1024], + pub f_mntonname: [::c_char; 1024], + } } cfg_if! { @@ -2567,6 +2624,121 @@ cfg_if! { {self.hmac_id}.hash(state); } } + impl PartialEq for statfs { + fn eq(&self, other: &statfs) -> bool { + self.f_version == other.f_version + && self.f_type == other.f_type + && self.f_flags == other.f_flags + && self.f_bsize == other.f_bsize + && self.f_iosize == other.f_iosize + && self.f_blocks == other.f_blocks + && self.f_bfree == other.f_bfree + && self.f_bavail == other.f_bavail + && self.f_files == other.f_files + && self.f_ffree == other.f_ffree + && self.f_syncwrites == other.f_syncwrites + && self.f_asyncwrites == other.f_asyncwrites + && self.f_syncreads == other.f_syncreads + && self.f_asyncreads == other.f_asyncreads + && self.f_namemax == other.f_namemax + && self.f_owner == other.f_owner + && self.f_fsid == other.f_fsid + && self.f_fstypename == other.f_fstypename + && self + .f_mntfromname + .iter() + .zip(other.f_mntfromname.iter()) + .all(|(a,b)| a == b) + && self + .f_mntonname + .iter() + .zip(other.f_mntonname.iter()) + .all(|(a,b)| a == b) + } + } + impl Eq for statfs {} + impl ::fmt::Debug for statfs { + fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { + f.debug_struct("statfs") + .field("f_bsize", &self.f_bsize) + .field("f_iosize", &self.f_iosize) + .field("f_blocks", &self.f_blocks) + .field("f_bfree", &self.f_bfree) + .field("f_bavail", &self.f_bavail) + .field("f_files", &self.f_files) + .field("f_ffree", &self.f_ffree) + .field("f_syncwrites", &self.f_syncwrites) + .field("f_asyncwrites", &self.f_asyncwrites) + .field("f_syncreads", &self.f_syncreads) + .field("f_asyncreads", &self.f_asyncreads) + .field("f_namemax", &self.f_namemax) + .field("f_owner", &self.f_owner) + .field("f_fsid", &self.f_fsid) + .field("f_fstypename", &self.f_fstypename) + .field("f_mntfromname", &&self.f_mntfromname[..]) + .field("f_mntonname", &&self.f_mntonname[..]) + .finish() + } + } + impl ::hash::Hash for statfs { + fn hash(&self, state: &mut H) { + self.f_version.hash(state); + self.f_type.hash(state); + self.f_flags.hash(state); + self.f_bsize.hash(state); + self.f_iosize.hash(state); + self.f_blocks.hash(state); + self.f_bfree.hash(state); + self.f_bavail.hash(state); + self.f_files.hash(state); + self.f_ffree.hash(state); + self.f_syncwrites.hash(state); + self.f_asyncwrites.hash(state); + self.f_syncreads.hash(state); + self.f_asyncreads.hash(state); + self.f_namemax.hash(state); + self.f_owner.hash(state); + self.f_fsid.hash(state); + self.f_fstypename.hash(state); + self.f_mntfromname.hash(state); + self.f_mntonname.hash(state); + } + } + + impl PartialEq for dirent { + fn eq(&self, other: &dirent) -> bool { + self.d_fileno == other.d_fileno + && self.d_reclen == other.d_reclen + && self.d_type == other.d_type + && self.d_namlen == other.d_namlen + && self + .d_name[..self.d_namlen as _] + .iter() + .zip(other.d_name.iter()) + .all(|(a,b)| a == b) + } + } + impl Eq for dirent {} + impl ::fmt::Debug for dirent { + fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { + f.debug_struct("dirent") + .field("d_fileno", &self.d_fileno) + .field("d_reclen", &self.d_reclen) + .field("d_type", &self.d_type) + .field("d_namlen", &self.d_namlen) + .field("d_name", &&self.d_name[..self.d_namlen as _]) + .finish() + } + } + impl ::hash::Hash for dirent { + fn hash(&self, state: &mut H) { + self.d_fileno.hash(state); + self.d_reclen.hash(state); + self.d_type.hash(state); + self.d_namlen.hash(state); + self.d_name[..self.d_namlen as _].hash(state); + } + } } } @@ -3880,13 +4052,7 @@ pub const COMMLEN: usize = 19; pub const KI_EMULNAMELEN: usize = 16; /// number of groups in ki_groups pub const KI_NGROUPS: usize = 16; -cfg_if! { - if #[cfg(freebsd11)] { - pub const KI_NSPARE_INT: usize = 4; - } else { - pub const KI_NSPARE_INT: usize = 2; - } -} +pub const KI_NSPARE_INT: usize = 2; pub const KI_NSPARE_LONG: usize = 12; /// Flags for the process credential. pub const KI_CRF_CAPABILITY_MODE: usize = 0x00000001; @@ -4062,7 +4228,7 @@ pub const NZERO: ::c_int = 0; pub const RUSAGE_THREAD: ::c_int = 1; cfg_if! { - if #[cfg(any(freebsd11, target_pointer_width = "32"))] { + if #[cfg(target_pointer_width = "32")] { pub const ARG_MAX: ::c_int = 256 * 1024; } else { pub const ARG_MAX: ::c_int = 2 * 256 * 1024; @@ -4357,15 +4523,8 @@ pub const PS_FST_FFLAG_HASLOCK: ::c_int = 0x4000; pub const MAXFIDSZ: ::c_int = 16; /// Length of type name including null. pub const MFSNAMELEN: ::c_int = 16; -cfg_if! { - if #[cfg(any(freebsd10, freebsd11))] { - /// Size of on/from name bufs. - pub const MNAMELEN: ::c_int = 88; - } else { - /// Size of on/from name bufs. - pub const MNAMELEN: ::c_int = 1024; - } -} +/// Size of on/from name bufs. +pub const MNAMELEN: ::c_int = 1024; /// Using journaled soft updates. pub const MNT_SUJ: u64 = 0x100000000; @@ -4861,26 +5020,6 @@ safe_f! { } } -cfg_if! { - if #[cfg(not(any(freebsd10, freebsd11)))] { - extern "C" { - pub fn fhlink(fhp: *mut fhandle_t, to: *const ::c_char) -> ::c_int; - pub fn fhlinkat(fhp: *mut fhandle_t, tofd: ::c_int, to: *const ::c_char) -> ::c_int; - pub fn fhreadlink( - fhp: *mut fhandle_t, - buf: *mut ::c_char, - bufsize: ::size_t, - ) -> ::c_int; - pub fn getfhat( - fd: ::c_int, - path: *mut ::c_char, - fhp: *mut fhandle, - flag: ::c_int, - ) -> ::c_int; - } - } -} - extern "C" { #[cfg_attr(doc, doc(alias = "__errno_location"))] #[cfg_attr(doc, doc(alias = "errno"))] @@ -5174,9 +5313,7 @@ extern "C" { pub fn pthread_spin_trylock(lock: *mut pthread_spinlock_t) -> ::c_int; pub fn pthread_spin_unlock(lock: *mut pthread_spinlock_t) -> ::c_int; - #[cfg_attr(all(target_os = "freebsd", freebsd11), link_name = "statfs@FBSD_1.0")] pub fn statfs(path: *const ::c_char, buf: *mut statfs) -> ::c_int; - #[cfg_attr(all(target_os = "freebsd", freebsd11), link_name = "fstatfs@FBSD_1.0")] pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int; pub fn dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int; @@ -5208,10 +5345,6 @@ extern "C" { pub fn getfh(path: *const ::c_char, fhp: *mut fhandle_t) -> ::c_int; pub fn lgetfh(path: *const ::c_char, fhp: *mut fhandle_t) -> ::c_int; pub fn getfsstat(buf: *mut ::statfs, bufsize: ::c_long, mode: ::c_int) -> ::c_int; - #[cfg_attr( - all(target_os = "freebsd", freebsd11), - link_name = "getmntinfo@FBSD_1.0" - )] pub fn getmntinfo(mntbufp: *mut *mut ::statfs, mode: ::c_int) -> ::c_int; pub fn mount( type_: *const ::c_char, @@ -5406,6 +5539,18 @@ extern "C" { infotype: *mut ::c_uint, flags: *mut ::c_int, ) -> ::ssize_t; + pub fn setgrent(); + pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; + pub fn freelocale(loc: ::locale_t); + pub fn msgrcv( + msqid: ::c_int, + msgp: *mut ::c_void, + msgsz: ::size_t, + msgtyp: ::c_long, + msgflg: ::c_int, + ) -> ::ssize_t; + pub fn dirname(path: *mut ::c_char) -> *mut ::c_char; + pub fn basename(path: *mut ::c_char) -> *mut ::c_char; } #[link(name = "memstat")] @@ -5656,9 +5801,6 @@ cfg_if! { } else if #[cfg(freebsd12)] { mod freebsd12; pub use self::freebsd12::*; - } else if #[cfg(any(freebsd10, freebsd11))] { - mod freebsd11; - pub use self::freebsd11::*; } else { // Unknown freebsd version } diff --git a/src/unix/bsd/freebsdlike/mod.rs b/src/unix/bsd/freebsdlike/mod.rs index fe69ca42044ca..c46829c8aa0c6 100644 --- a/src/unix/bsd/freebsdlike/mod.rs +++ b/src/unix/bsd/freebsdlike/mod.rs @@ -1545,10 +1545,6 @@ extern "C" { pub fn getutxid(ut: *const utmpx) -> *mut utmpx; pub fn getutxline(ut: *const utmpx) -> *mut utmpx; pub fn initgroups(name: *const ::c_char, basegid: ::gid_t) -> ::c_int; - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "kevent@FBSD_1.0" - )] pub fn kevent( kq: ::c_int, changelist: *const ::kevent, @@ -1561,10 +1557,6 @@ extern "C" { pub fn lutimes(file: *const ::c_char, times: *const ::timeval) -> ::c_int; pub fn memrchr(cx: *const ::c_void, c: ::c_int, n: ::size_t) -> *mut ::c_void; pub fn mkfifoat(dirfd: ::c_int, pathname: *const ::c_char, mode: ::mode_t) -> ::c_int; - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "mknodat@FBSD_1.1" - )] pub fn mknodat( dirfd: ::c_int, pathname: *const ::c_char, diff --git a/src/unix/bsd/mod.rs b/src/unix/bsd/mod.rs index 6ce041357ebee..e6ce1cecea625 100644 --- a/src/unix/bsd/mod.rs +++ b/src/unix/bsd/mod.rs @@ -614,15 +614,9 @@ extern "C" { pub fn strerror_r(errnum: ::c_int, buf: *mut c_char, buflen: ::size_t) -> ::c_int; pub fn abs(i: ::c_int) -> ::c_int; pub fn labs(i: ::c_long) -> ::c_long; - #[cfg_attr( - all(target_os = "freebsd", any(freebsd12, freebsd11, freebsd10)), - link_name = "rand@FBSD_1.0" - )] + #[cfg_attr(all(target_os = "freebsd", freebsd12), link_name = "rand@FBSD_1.0")] pub fn rand() -> ::c_int; - #[cfg_attr( - all(target_os = "freebsd", any(freebsd12, freebsd11, freebsd10)), - link_name = "srand@FBSD_1.0" - )] + #[cfg_attr(all(target_os = "freebsd", freebsd12), link_name = "srand@FBSD_1.0")] pub fn srand(seed: ::c_uint); pub fn getifaddrs(ifap: *mut *mut ::ifaddrs) -> ::c_int; @@ -653,10 +647,6 @@ extern "C" { link_name = "glob$INODE64" )] #[cfg_attr(target_os = "netbsd", link_name = "__glob30")] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "glob@FBSD_1.0" - )] pub fn glob( pattern: *const ::c_char, flags: ::c_int, @@ -664,10 +654,6 @@ extern "C" { pglob: *mut ::glob_t, ) -> ::c_int; #[cfg_attr(target_os = "netbsd", link_name = "__globfree30")] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "globfree@FBSD_1.0" - )] pub fn globfree(pglob: *mut ::glob_t); pub fn posix_madvise(addr: *mut ::c_void, len: ::size_t, advice: ::c_int) -> ::c_int; @@ -835,10 +821,7 @@ extern "C" { all(target_os = "macos", target_arch = "x86"), link_name = "wait4$UNIX2003" )] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd12, freebsd11, freebsd10)), - link_name = "wait4@FBSD_1.0" - )] + #[cfg_attr(all(target_os = "freebsd", freebsd12), link_name = "wait4@FBSD_1.0")] pub fn wait4( pid: ::pid_t, status: *mut ::c_int, diff --git a/src/unix/mod.rs b/src/unix/mod.rs index 9b5ce0fceaafb..90ba885a00d4a 100644 --- a/src/unix/mod.rs +++ b/src/unix/mod.rs @@ -732,10 +732,6 @@ extern "C" { link_name = "fstat$INODE64" )] #[cfg_attr(target_os = "netbsd", link_name = "__fstat50")] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "fstat@FBSD_1.0" - )] pub fn fstat(fildes: ::c_int, buf: *mut stat) -> ::c_int; pub fn mkdir(path: *const c_char, mode: mode_t) -> ::c_int; @@ -745,10 +741,6 @@ extern "C" { link_name = "stat$INODE64" )] #[cfg_attr(target_os = "netbsd", link_name = "__stat50")] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "stat@FBSD_1.0" - )] pub fn stat(path: *const c_char, buf: *mut stat) -> ::c_int; pub fn pclose(stream: *mut ::FILE) -> ::c_int; @@ -791,10 +783,6 @@ extern "C" { link_name = "readdir$INODE64" )] #[cfg_attr(target_os = "netbsd", link_name = "__readdir30")] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "readdir@FBSD_1.0" - )] pub fn readdir(dirp: *mut ::DIR) -> *mut ::dirent; #[cfg_attr( all(target_os = "macos", target_arch = "x86"), @@ -829,10 +817,6 @@ extern "C" { all(target_os = "macos", not(target_arch = "aarch64")), link_name = "fstatat$INODE64" )] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "fstatat@FBSD_1.1" - )] pub fn fstatat( dirfd: ::c_int, pathname: *const ::c_char, @@ -1022,10 +1006,6 @@ extern "C" { link_name = "lstat$INODE64" )] #[cfg_attr(target_os = "netbsd", link_name = "__lstat50")] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "lstat@FBSD_1.0" - )] pub fn lstat(path: *const c_char, buf: *mut stat) -> ::c_int; #[cfg_attr( @@ -1277,10 +1257,6 @@ extern "C" { pub fn timegm(tm: *mut ::tm) -> time_t; #[cfg_attr(target_os = "netbsd", link_name = "__mknod50")] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "mknod@FBSD_1.0" - )] pub fn mknod(pathname: *const ::c_char, mode: ::mode_t, dev: ::dev_t) -> ::c_int; pub fn gethostname(name: *mut ::c_char, len: ::size_t) -> ::c_int; pub fn endservent(); @@ -1466,10 +1442,6 @@ cfg_if! { #[cfg_attr(all(target_os = "macos", not(target_arch = "aarch64")), link_name = "readdir_r$INODE64")] #[cfg_attr(target_os = "netbsd", link_name = "__readdir_r30")] - #[cfg_attr( - all(target_os = "freebsd", any(freebsd11, freebsd10)), - link_name = "readdir_r@FBSD_1.0" - )] #[allow(non_autolinks)] // FIXME: `<>` breaks line length limit. /// The 64-bit libc on Solaris and illumos only has readdir_r. If a /// 32-bit Solaris or illumos target is ever created, it should use