diff --git a/Cargo.toml b/Cargo.toml index 319c896f3a629..d7330ad20929c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -130,6 +130,7 @@ cargo-args = ["-Zbuild-std=core"] [dependencies] rustc-std-workspace-core = { version = "1.0.0", optional = true } +zerocopy = { version = "0.7.15", optional = true, features = ["derive"] } [features] default = ["std"] diff --git a/README.md b/README.md index 29d2a4b6160f7..60f836229f7c8 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ newer Rust features are only available on newer Rust toolchains: | `core::ffi::c_void` | 1.30.0 | | `repr(packed(N))` | 1.33.0 | | `cfg(target_vendor)` | 1.33.0 | +| `zerocopy` | 1.61.0 | | `const-extern-fn` | 1.62.0 | ## Platform support diff --git a/ci/run.sh b/ci/run.sh index 4de8087699e24..d85ebc2ed8595 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -101,7 +101,7 @@ if [ "$TARGET" = "s390x-unknown-linux-gnu" ]; then continue fi elif [ "$passed" = "2" ]; then - if cargo test --features extra_traits --manifest-path libc-test/Cargo.toml --target "${TARGET}" ${LIBC_CI_ZBUILD_STD+"-Zbuild-std"}; then + if cargo test --features extra_traits,zerocopy --manifest-path libc-test/Cargo.toml --target "${TARGET}" ${LIBC_CI_ZBUILD_STD+"-Zbuild-std"}; then break fi fi @@ -114,6 +114,6 @@ else cargo test --manifest-path libc-test/Cargo.toml --target "${TARGET}" ${LIBC_CI_ZBUILD_STD+"-Zbuild-std"} - RUST_BACKTRACE=1 cargo test --features extra_traits --manifest-path libc-test/Cargo.toml \ + RUST_BACKTRACE=1 cargo test --features extra_traits,zerocopy --manifest-path libc-test/Cargo.toml \ --target "${TARGET}" ${LIBC_CI_ZBUILD_STD+"-Zbuild-std"} fi diff --git a/libc-test/Cargo.toml b/libc-test/Cargo.toml index 6abf99adf9a52..fd1e7ffc6e0f2 100644 --- a/libc-test/Cargo.toml +++ b/libc-test/Cargo.toml @@ -25,6 +25,7 @@ default = ["std"] std = ["libc/std"] align = ["libc/align"] extra_traits = ["libc/extra_traits"] +zerocopy = ["libc/zerocopy"] [[test]] name = "main" diff --git a/src/lib.rs b/src/lib.rs index 1b6f0c077ab24..08b3bfd4cfcdc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -24,6 +24,10 @@ #![cfg_attr(feature = "rustc-dep-of-std", no_core)] #![cfg_attr(libc_const_extern_fn_unstable, feature(const_extern_fn))] +#[cfg(feature = "zerocopy")] +#[macro_use] +extern crate zerocopy; + #[macro_use] mod macros; diff --git a/src/unix/aix/mod.rs b/src/unix/aix/mod.rs index 66e4b7cf67204..a19e110f687ee 100644 --- a/src/unix/aix/mod.rs +++ b/src/unix/aix/mod.rs @@ -71,24 +71,29 @@ e! { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fsid_t { pub val: [::c_uint; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fsid64_t { pub val: [::uint64_t; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct timezone { pub tz_minuteswest: ::c_int, pub tz_dsttime: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq { pub imr_multiaddr: in_addr, pub imr_interface: in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_offset: ::c_ulong, pub d_ino: ::ino_t, @@ -97,6 +102,7 @@ s! { pub d_name: [::c_char; 256] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -105,6 +111,7 @@ s! { pub c_cc: [::cc_t; ::NCCS] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -125,6 +132,7 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::blksize64_t, pub f_frsize: ::blksize64_t, @@ -171,6 +179,7 @@ s! { pub int_n_sign_posn: ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct tm { pub tm_sec: ::c_int, pub tm_min: ::c_int, @@ -195,22 +204,26 @@ s! { pub ai_eflags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_addr { pub s_addr: in_addr_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq_source { pub imr_multiaddr: in_addr, pub imr_sourceaddr: in_addr, pub imr_interface: in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr { pub sa_len: ::c_uchar, pub sa_family: sa_family_t, pub sa_data: [::c_char; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_dl { pub sdl_len: ::c_uchar, pub sdl_family: ::c_uchar, @@ -222,6 +235,7 @@ s! { pub sdl_data: [::c_char; 120], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in { pub sin_len: ::c_uchar, pub sin_family: sa_family_t, @@ -230,6 +244,7 @@ s! { pub sin_zero: [::c_char; 8] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in6 { pub sin6_len: ::c_uchar, pub sin6_family: ::c_uchar, @@ -239,6 +254,7 @@ s! { pub sin6_scope_id: ::uint32_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_storage { pub __ss_len: ::c_uchar, pub ss_family: sa_family_t, @@ -247,17 +263,20 @@ s! { __ss_pad2: [::c_char; 1265], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_un { pub sun_len: ::c_uchar, pub sun_family: sa_family_t, pub sun_path: [::c_char; 1023] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct st_timespec { pub tv_sec: ::time_t, pub tv_nsec: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_version: ::c_int, pub f_type: ::c_int, @@ -289,6 +308,7 @@ s! { pub pw_shell: *mut ::c_char } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utsname { pub sysname: [::c_char; 32], pub nodename: [::c_char; 32], @@ -297,12 +317,14 @@ s! { pub machine: [::c_char; 32], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct xutsname { pub nid: ::c_uint, pub reserved: ::c_int, pub longnid: ::c_ulonglong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::socklen_t, pub cmsg_level: ::c_int, @@ -318,10 +340,12 @@ s! { } // Should be union with another 'sival_int' + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigval64 { pub sival_ptr: ::c_ulonglong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigevent64 { pub sigev_value: sigval64, pub sigev_signo: ::c_int, @@ -335,6 +359,7 @@ s! { pub sevt_signo: signal_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct poll_ctl { pub cmd: ::c_short, pub events: ::c_short, @@ -353,11 +378,13 @@ s! { pub bytes_sent: ::uint64_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mmsghdr { pub msg_hdr: ::msghdr, pub msg_len: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sched_param { pub sched_priority: ::c_int, pub sched_policy: ::c_int, @@ -371,6 +398,7 @@ s! { pub __pad: [::c_int; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct posix_spawnattr_t { pub posix_attr_flags: ::c_short, pub posix_attr_pgroup: ::pid_t, @@ -388,6 +416,7 @@ s! { pub gl_ptx: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mallinfo { pub arena: ::c_ulong, pub ordblks: ::c_int, @@ -401,11 +430,13 @@ s! { pub keepcost: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmp_exit_status { pub e_termination: ::c_short, pub e_exit: ::c_short, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmp { pub ut_user: [::c_char; 256], pub ut_id: [::c_char; 14], @@ -420,6 +451,7 @@ s! { pub __reservedV: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct regmatch_t { pub rm_so: regoff_t, pub rm_eo: regoff_t, @@ -439,11 +471,13 @@ s! { pub __unused: [*mut ::c_void; 34], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rlimit64 { pub rlim_cur: rlim64_t, pub rlim_max: rlim64_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ipc_perm, pub shm_segsz: ::size_t, @@ -462,6 +496,7 @@ s! { pub shm_reserved1: ::int64_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: dev_t, pub st_ino: ino_t, @@ -494,6 +529,7 @@ s! { pub mnt_passno: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub uid: ::uid_t, pub gid: ::gid_t, @@ -510,6 +546,7 @@ s! { pub data: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mq_attr { pub mq_flags: ::c_long, pub mq_maxmsg: ::c_long, @@ -517,6 +554,7 @@ s! { pub mq_curmsgs: ::c_long, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sembuf { pub sem_num: ::c_ushort, pub sem_op: ::c_short, @@ -528,6 +566,7 @@ s! { pub if_name: *mut ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct itimerspec { pub it_interval: ::timespec, pub it_value: ::timespec, diff --git a/src/unix/aix/powerpc64.rs b/src/unix/aix/powerpc64.rs index 2cacf29f6b418..9e837523e1b66 100644 --- a/src/unix/aix/powerpc64.rs +++ b/src/unix/aix/powerpc64.rs @@ -2,14 +2,17 @@ pub type c_long = i64; pub type c_ulong = u64; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { pub ss_set: [c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fd_set { pub fds_bits: [c_long; 1024], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -20,6 +23,7 @@ s! { pub l_len: ::off_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -37,18 +41,22 @@ s! { pub f_filler: [::c_ulong; 16] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlock_t { __rw_word: [::c_long; 10], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_cond_t { __cv_word: [::c_long; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutex_t { __mt_word: [::c_long; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -73,6 +81,7 @@ s! { pub st_size: ::off_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_version: ::c_int, pub f_type: ::c_int, @@ -125,6 +134,7 @@ s! { pub __pad: [::c_int; 1], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub gpr: [::c_ulonglong; 32], pub msr: ::c_ulonglong, @@ -145,6 +155,7 @@ s! { pub excp_type: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmpx { pub ut_user: [::c_char; 256], pub ut_id: [::c_char; 14], @@ -158,14 +169,17 @@ s! { pub __reservedV: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_spinlock_t { pub __sp_word: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_barrier_t { pub __br_word: [::c_long; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_first: ::c_uint, diff --git a/src/unix/align.rs b/src/unix/align.rs index 4fdba9a6aba69..4d63462cc54c2 100644 --- a/src/unix/align.rs +++ b/src/unix/align.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(4))] pub struct in6_addr { pub s6_addr: [u8; 16], diff --git a/src/unix/bsd/apple/b32/align.rs b/src/unix/bsd/apple/b32/align.rs index ca1fe1ce29944..043018724af19 100644 --- a/src/unix/bsd/apple/b32/align.rs +++ b/src/unix/bsd/apple/b32/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 2] diff --git a/src/unix/bsd/apple/b32/mod.rs b/src/unix/bsd/apple/b32/mod.rs index 0f1722f975744..5c0298678cd36 100644 --- a/src/unix/bsd/apple/b32/mod.rs +++ b/src/unix/bsd/apple/b32/mod.rs @@ -5,6 +5,7 @@ pub type c_ulong = u32; pub type boolean_t = ::c_int; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct if_data { pub ifi_type: ::c_uchar, pub ifi_typelen: ::c_uchar, @@ -37,6 +38,7 @@ s! { pub ifi_reserved2: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct bpf_hdr { pub bh_tstamp: ::timeval, pub bh_caplen: u32, @@ -44,12 +46,14 @@ s! { pub bh_hdrlen: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct malloc_zone_t { __private: [::uintptr_t; 18], // FIXME: keeping private for now } } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __sig: c_long, __opaque: [::c_char; 36] diff --git a/src/unix/bsd/apple/b64/aarch64/align.rs b/src/unix/bsd/apple/b64/aarch64/align.rs index 131e15b69ad94..47d562d9ae717 100644 --- a/src/unix/bsd/apple/b64/aarch64/align.rs +++ b/src/unix/bsd/apple/b64/aarch64/align.rs @@ -2,6 +2,7 @@ pub type mcontext_t = *mut __darwin_mcontext64; s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct max_align_t { priv_: f64 } @@ -17,18 +18,21 @@ s! { pub uc_mcontext: mcontext_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __darwin_mcontext64 { pub __es: __darwin_arm_exception_state64, pub __ss: __darwin_arm_thread_state64, pub __ns: __darwin_arm_neon_state64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __darwin_arm_exception_state64 { pub __far: u64, pub __esr: u32, pub __exception: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __darwin_arm_thread_state64 { pub __x: [u64; 29], pub __fp: u64, @@ -43,6 +47,7 @@ s! { // it in with repr(align) and `[u64; 2]`. uint128 isn't available // all the way back to our earliest supported versions so we // preserver the old shim. + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(not(libc_int128), repr(align(16)))] pub struct __darwin_arm_neon_state64 { #[cfg(libc_int128)] diff --git a/src/unix/bsd/apple/b64/aarch64/mod.rs b/src/unix/bsd/apple/b64/aarch64/mod.rs index 79e9ac842f9ca..a6e1b464f401e 100644 --- a/src/unix/bsd/apple/b64/aarch64/mod.rs +++ b/src/unix/bsd/apple/b64/aarch64/mod.rs @@ -1,6 +1,7 @@ pub type boolean_t = ::c_int; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct malloc_zone_t { __private: [::uintptr_t; 18], // FIXME: needs arm64 auth pointers support } diff --git a/src/unix/bsd/apple/b64/align.rs b/src/unix/bsd/apple/b64/align.rs index ca1fe1ce29944..043018724af19 100644 --- a/src/unix/bsd/apple/b64/align.rs +++ b/src/unix/bsd/apple/b64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 2] diff --git a/src/unix/bsd/apple/b64/mod.rs b/src/unix/bsd/apple/b64/mod.rs index 48d94bcd6bfdc..68c10937e4cdd 100644 --- a/src/unix/bsd/apple/b64/mod.rs +++ b/src/unix/bsd/apple/b64/mod.rs @@ -4,11 +4,13 @@ pub type c_long = i64; pub type c_ulong = u64; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct timeval32 { pub tv_sec: i32, pub tv_usec: i32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct if_data { pub ifi_type: ::c_uchar, pub ifi_typelen: ::c_uchar, @@ -41,6 +43,7 @@ s! { pub ifi_reserved2: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct bpf_hdr { pub bh_tstamp: ::timeval32, pub bh_caplen: u32, @@ -50,6 +53,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __sig: c_long, __opaque: [::c_char; 56] diff --git a/src/unix/bsd/apple/b64/x86_64/align.rs b/src/unix/bsd/apple/b64/x86_64/align.rs index ca1fe1ce29944..043018724af19 100644 --- a/src/unix/bsd/apple/b64/x86_64/align.rs +++ b/src/unix/bsd/apple/b64/x86_64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 2] diff --git a/src/unix/bsd/apple/b64/x86_64/mod.rs b/src/unix/bsd/apple/b64/x86_64/mod.rs index 653650c26289f..114aa965df991 100644 --- a/src/unix/bsd/apple/b64/x86_64/mod.rs +++ b/src/unix/bsd/apple/b64/x86_64/mod.rs @@ -11,12 +11,14 @@ s! { pub uc_mcontext: mcontext_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct __darwin_mcontext64 { pub __es: __darwin_x86_exception_state64, pub __ss: __darwin_x86_thread_state64, pub __fs: __darwin_x86_float_state64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __darwin_x86_exception_state64 { pub __trapno: u16, pub __cpu: u16, @@ -24,6 +26,7 @@ s! { pub __faultvaddr: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __darwin_x86_thread_state64 { pub __rax: u64, pub __rbx: u64, @@ -48,6 +51,7 @@ s! { pub __gs: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __darwin_x86_float_state64 { pub __fpu_reserved: [::c_int; 2], __fpu_fcw: ::c_short, @@ -94,15 +98,18 @@ s! { pub __fpu_reserved1: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __darwin_mmst_reg { pub __mmst_reg: [::c_char; 10], pub __mmst_rsrv: [::c_char; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __darwin_xmm_reg { pub __xmm_reg: [::c_char; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct malloc_introspection_t { _private: [::uintptr_t; 16], // FIXME: keeping private for now } diff --git a/src/unix/bsd/apple/long_array.rs b/src/unix/bsd/apple/long_array.rs index 4c56a275ab32a..f036b2c782746 100644 --- a/src/unix/bsd/apple/long_array.rs +++ b/src/unix/bsd/apple/long_array.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ctl_info { pub ctl_id: u32, pub ctl_name: [::c_char; MAX_KCTL_NAME], diff --git a/src/unix/bsd/apple/mod.rs b/src/unix/bsd/apple/mod.rs index ea06635332791..0378f13ee3f19 100644 --- a/src/unix/bsd/apple/mod.rs +++ b/src/unix/bsd/apple/mod.rs @@ -241,17 +241,20 @@ impl ::Clone for sysdir_search_path_domain_mask_t { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq { pub imr_multiaddr: in_addr, pub imr_interface: in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreqn { pub imr_multiaddr: in_addr, pub imr_address: in_addr, pub imr_ifindex: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq_source { pub imr_multiaddr: in_addr, pub imr_sourceaddr: in_addr, @@ -295,6 +298,7 @@ s! { pub ai_next: *mut addrinfo, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[deprecated( since = "0.2.55", note = "Use the `mach2` crate instead", @@ -304,6 +308,7 @@ s! { pub denom: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct stat { pub st_dev: dev_t, pub st_mode: mode_t, @@ -329,16 +334,19 @@ s! { pub st_qspare: [i64; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutexattr_t { __sig: ::c_long, __opaque: [u8; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_condattr_t { __sig: ::c_long, __opaque: [u8; __PTHREAD_CONDATTR_SIZE__], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlockattr_t { __sig: ::c_long, __opaque: [u8; __PTHREAD_RWLOCKATTR_SIZE__], @@ -357,6 +365,7 @@ s! { _pad: [usize; 9], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigaction { // FIXME: this field is actually a union pub sa_sigaction: ::sighandler_t, @@ -370,6 +379,7 @@ s! { pub ss_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fstore_t { pub fst_flags: ::c_uint, pub fst_posmode: ::c_int, @@ -378,6 +388,7 @@ s! { pub fst_bytesalloc: ::off_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fpunchhole_t { pub fp_flags: ::c_uint, /* unused */ pub reserved: ::c_uint, /* (to maintain 8-byte alignment) */ @@ -385,11 +396,13 @@ s! { pub fp_length: ::off_t, /* IN: size of the region */ } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ftrimactivefile_t { pub fta_offset: ::off_t, pub fta_length: ::off_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fspecread_t { pub fsr_flags: ::c_uint, pub reserved: ::c_uint, @@ -397,11 +410,13 @@ s! { pub fsr_length: ::off_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct radvisory { pub ra_offset: ::off_t, pub ra_count: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -423,6 +438,7 @@ s! { pub dli_saddr: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in { pub sin_len: u8, pub sin_family: ::sa_family_t, @@ -431,6 +447,7 @@ s! { pub sin_zero: [::c_char; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kevent64_s { pub ident: u64, pub filter: i16, @@ -441,6 +458,7 @@ s! { pub ext: [u64; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dqblk { pub dqb_bhardlimit: u64, pub dqb_bsoftlimit: u64, @@ -454,6 +472,7 @@ s! { pub dqb_spare: [u32; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct if_msghdr { pub ifm_msglen: ::c_ushort, pub ifm_version: ::c_uchar, @@ -464,6 +483,7 @@ s! { pub ifm_data: if_data, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct ifa_msghdr { pub ifam_msglen: ::c_ushort, pub ifam_version: ::c_uchar, @@ -474,6 +494,7 @@ s! { pub ifam_metric: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct ifma_msghdr { pub ifmam_msglen: ::c_ushort, pub ifmam_version: ::c_uchar, @@ -483,6 +504,7 @@ s! { pub ifmam_index: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct ifma_msghdr2 { pub ifmam_msglen: ::c_ushort, pub ifmam_version: ::c_uchar, @@ -493,6 +515,7 @@ s! { pub ifmam_refcount: i32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rt_metrics { pub rmx_locks: u32, pub rmx_mtu: u32, @@ -508,6 +531,7 @@ s! { pub rmx_filler: [u32; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct rt_msghdr { pub rtm_msglen: ::c_ushort, pub rtm_version: ::c_uchar, @@ -523,6 +547,7 @@ s! { pub rtm_rmx: rt_metrics, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct rt_msghdr2 { pub rtm_msglen: ::c_ushort, pub rtm_version: ::c_uchar, @@ -538,6 +563,7 @@ s! { pub rtm_rmx: rt_metrics, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -548,6 +574,7 @@ s! { pub c_ospeed: ::speed_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_start: ::off_t, pub l_len: ::off_t, @@ -590,6 +617,7 @@ s! { pub int_n_sign_posn: ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct proc_taskinfo { pub pti_virtual_size: u64, pub pti_resident_size: u64, @@ -611,6 +639,7 @@ s! { pub pti_priority: i32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct proc_bsdinfo { pub pbi_flags: u32, pub pbi_status: u32, @@ -636,11 +665,13 @@ s! { pub pbi_start_tvusec: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct proc_taskallinfo { pub pbsd: proc_bsdinfo, pub ptinfo: proc_taskinfo, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct xsw_usage { pub xsu_total: u64, pub xsu_avail: u64, @@ -649,6 +680,7 @@ s! { pub xsu_encrypted: ::boolean_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct xucred { pub cr_version: ::c_uint, pub cr_uid: ::uid_t, @@ -656,6 +688,7 @@ s! { pub cr_groups: [::gid_t;16] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[deprecated( since = "0.2.55", note = "Use the `mach2` crate instead", @@ -670,6 +703,7 @@ s! { pub flags: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[deprecated( since = "0.2.55", note = "Use the `mach2` crate instead", @@ -685,6 +719,7 @@ s! { pub reserved: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct segment_command { pub cmd: u32, pub cmdsize: u32, @@ -699,6 +734,7 @@ s! { pub flags: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct segment_command_64 { pub cmd: u32, pub cmdsize: u32, @@ -713,11 +749,13 @@ s! { pub flags: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct load_command { pub cmd: u32, pub cmdsize: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_dl { pub sdl_len: ::c_uchar, pub sdl_family: ::c_uchar, @@ -729,6 +767,7 @@ s! { pub sdl_data: [::c_char; 12], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_inarp { pub sin_len: ::c_uchar, pub sin_family: ::c_uchar, @@ -739,6 +778,7 @@ s! { pub sin_other: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_ctl { pub sc_len: ::c_uchar, pub sc_family: ::c_uchar, @@ -748,12 +788,14 @@ s! { pub sc_reserved: [u32; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_pktinfo { pub ipi_ifindex: ::c_uint, pub ipi_spec_dst: ::in_addr, pub ipi_addr: ::in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in6_pktinfo { pub ipi6_addr: ::in6_addr, pub ipi6_ifindex: ::c_uint, @@ -761,6 +803,7 @@ s! { // sys/ipc.h: + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub uid: ::uid_t, pub gid: ::gid_t, @@ -773,6 +816,7 @@ s! { // sys/sem.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sembuf { pub sem_num: ::c_ushort, pub sem_op: ::c_short, @@ -781,6 +825,7 @@ s! { // sys/shm.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct arphdr { pub ar_hrd: u16, pub ar_pro: u16, @@ -789,11 +834,13 @@ s! { pub ar_op: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_addr { pub s_addr: ::in_addr_t, } // net/ndrv.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_ndrv { pub snd_len: ::c_uchar, pub snd_family: ::c_uchar, @@ -810,6 +857,7 @@ s! { pub sae_dstaddrlen: ::socklen_t, // size of destination address } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct timex { pub modes: ::c_uint, pub offset: ::c_long, @@ -830,6 +878,7 @@ s! { pub stbcnt: ::c_long, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct ntptimeval { pub time: ::timespec, pub maxerror: ::c_long, @@ -838,14 +887,17 @@ s! { pub time_state: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_standard_policy { pub no_data: natural_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_extended_policy { pub timeshare: boolean_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_time_constraint_policy { pub period: u32, pub computation: u32, @@ -853,27 +905,33 @@ s! { pub preemptible: boolean_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_precedence_policy { pub importance: integer_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_affinity_policy { pub affinity_tag: integer_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_background_policy { pub priority: integer_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_latency_qos_policy { pub thread_latency_qos_tier: thread_latency_qos_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_throughput_qos_policy { pub thread_throughput_qos_tier: thread_throughput_qos_t, } // malloc/malloc.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct malloc_statistics_t { pub blocks_in_use: ::c_uint, pub size_in_use: ::size_t, @@ -881,6 +939,7 @@ s! { pub size_allocated: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mstats { pub bytes_total: ::size_t, pub chunks_used: ::size_t, @@ -889,17 +948,20 @@ s! { pub bytes_free: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vm_range_t { pub address: ::vm_address_t, pub size: ::vm_size_t, } // sched.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sched_param { pub sched_priority: ::c_int, __opaque: [::c_char; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vinfo_stat { pub vst_dev: u32, pub vst_mode: u16, @@ -924,6 +986,7 @@ s! { pub vst_qspare: [i64; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vnode_info { pub vi_stat: vinfo_stat, pub vi_type: ::c_int, @@ -931,6 +994,7 @@ s! { pub vi_fsid: ::fsid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vnode_info_path { pub vip_vi: vnode_info, // Normally it's `vip_path: [::c_char; MAXPATHLEN]` but because libc supports an old rustc @@ -938,11 +1002,13 @@ s! { pub vip_path: [[::c_char; 32]; 32], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct proc_vnodepathinfo { pub pvi_cdir: vnode_info_path, pub pvi_rdir: vnode_info_path, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vm_statistics { pub free_count: natural_t, pub active_count: natural_t, @@ -961,11 +1027,13 @@ s! { pub speculative_count: natural_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct task_thread_times_info { pub user_time: time_value_t, pub system_time: time_value_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rusage_info_v0 { pub ri_uuid: [u8; 16], pub ri_user_time: u64, @@ -980,6 +1048,7 @@ s! { pub ri_proc_exit_abstime: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rusage_info_v1 { pub ri_uuid: [u8; 16], pub ri_user_time: u64, @@ -1000,6 +1069,7 @@ s! { pub ri_child_elapsed_abstime: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rusage_info_v2 { pub ri_uuid: [u8; 16], pub ri_user_time: u64, @@ -1022,6 +1092,7 @@ s! { pub ri_diskio_byteswritten: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rusage_info_v3 { pub ri_uuid: [u8; 16], pub ri_user_time: u64, @@ -1053,6 +1124,7 @@ s! { pub ri_serviced_system_time: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rusage_info_v4 { pub ri_uuid: [u8; 16], pub ri_user_time: u64, @@ -1092,11 +1164,13 @@ s! { pub ri_runnable_time: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct image_offset { pub uuid: ::uuid_t, pub offset: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct attrlist { pub bitmapcount: ::c_ushort, pub reserved: u16, @@ -1107,16 +1181,19 @@ s! { pub forkattr: attrgroup_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct attrreference_t { pub attr_dataoffset: i32, pub attr_length: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vol_capabilities_attr_t { pub capabilities: vol_capabilities_set_t, pub valid: vol_capabilities_set_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct attribute_set_t { pub commonattr: attrgroup_t, pub volattr: attrgroup_t, @@ -1125,6 +1202,7 @@ s! { pub forkattr: attrgroup_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vol_attributes_attr_t { pub validattr: attribute_set_t, pub nativeattr: attribute_set_t, @@ -1151,6 +1229,7 @@ s_no_extra_traits! { pub udata: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] #[cfg_attr(libc_packedN, repr(packed(4)))] pub struct semid_ds { // Note the manpage shows different types than the system header. @@ -1178,6 +1257,7 @@ s_no_extra_traits! { pub shm_internal: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct proc_threadinfo { pub pth_user_time: u64, pub pth_system_time: u64, @@ -1192,6 +1272,7 @@ s_no_extra_traits! { pub pth_name: [::c_char; MAXTHREADNAMESIZE], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_bsize: u32, pub f_iosize: i32, @@ -1212,6 +1293,7 @@ s_no_extra_traits! { pub f_reserved: [u32; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct dirent { pub d_ino: u64, pub d_seekoff: u64, @@ -1221,21 +1303,25 @@ s_no_extra_traits! { pub d_name: [::c_char; 1024], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlock_t { __sig: ::c_long, __opaque: [u8; __PTHREAD_RWLOCK_SIZE__], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutex_t { __sig: ::c_long, __opaque: [u8; __PTHREAD_MUTEX_SIZE__], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_cond_t { __sig: ::c_long, __opaque: [u8; __PTHREAD_COND_SIZE__], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_storage { pub ss_len: u8, pub ss_family: ::sa_family_t, @@ -1244,6 +1330,7 @@ s_no_extra_traits! { __ss_pad2: [u8; 112], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct utmpx { pub ut_user: [::c_char; _UTX_USERSIZE], pub ut_id: [::c_char; _UTX_IDSIZE], @@ -1263,10 +1350,12 @@ s_no_extra_traits! { pub sigev_notify_attributes: *mut ::pthread_attr_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct processor_cpu_load_info { pub cpu_ticks: [::c_uint; CPU_STATE_MAX as usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct processor_basic_info { pub cpu_type: cpu_type_t, pub cpu_subtype: cpu_subtype_t, @@ -1275,11 +1364,13 @@ s_no_extra_traits! { pub is_master: ::boolean_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct processor_set_basic_info { pub processor_count: ::c_int, pub default_policy: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct processor_set_load_info { pub task_count: ::c_int, pub thread_count: ::c_int, @@ -1287,11 +1378,13 @@ s_no_extra_traits! { pub mach_factor: integer_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct time_value_t { pub seconds: integer_t, pub microseconds: integer_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_basic_info { pub user_time: time_value_t, pub system_time: time_value_t, @@ -1303,12 +1396,14 @@ s_no_extra_traits! { pub sleep_time: ::integer_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_identifier_info { pub thread_id: u64, pub thread_handle: u64, pub dispatch_qaddr: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct thread_extended_info { pub pth_user_time: u64, pub pth_system_time: u64, @@ -1323,6 +1418,7 @@ s_no_extra_traits! { pub pth_name: [::c_char; MAXTHREADNAMESIZE], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(libc_packedN, repr(packed(4)))] pub struct if_data64 { pub ifi_type: ::c_uchar, @@ -1355,6 +1451,7 @@ s_no_extra_traits! { pub ifi_lastchange: timeval32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] #[cfg_attr(libc_packedN, repr(packed(4)))] pub struct if_msghdr2 { pub ifm_msglen: ::c_ushort, @@ -1370,6 +1467,7 @@ s_no_extra_traits! { pub ifm_data: if_data64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(libc_packedN, repr(packed(8)))] pub struct vm_statistics64 { pub free_count: natural_t, @@ -1398,6 +1496,7 @@ s_no_extra_traits! { pub total_uncompressed_pages_in_compressor: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(libc_packedN, repr(packed(4)))] pub struct mach_task_basic_info { pub virtual_size: mach_vm_size_t, @@ -1409,6 +1508,7 @@ s_no_extra_traits! { pub suspend_count: integer_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(libc_packedN, repr(packed(4)))] pub struct log2phys { pub l2p_flags: ::c_uint, @@ -1416,10 +1516,12 @@ s_no_extra_traits! { pub l2p_devoffset: ::off_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct os_unfair_lock_s { _os_unfair_lock_opaque: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(libc_packedN, repr(packed(1)))] pub struct sockaddr_vm { pub svm_len: ::c_uchar, @@ -1429,6 +1531,7 @@ s_no_extra_traits! { pub svm_cid: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifdevmtu { pub ifdm_current: ::c_int, pub ifdm_min: ::c_int, diff --git a/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/src/unix/bsd/freebsdlike/dragonfly/mod.rs index b3a5be4494543..9c362761575ed 100644 --- a/src/unix/bsd/freebsdlike/dragonfly/mod.rs +++ b/src/unix/bsd/freebsdlike/dragonfly/mod.rs @@ -82,6 +82,7 @@ s! { pub udata: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct exit_status { pub e_termination: u16, pub e_exit: u16 @@ -99,6 +100,7 @@ s! { _aio_err: ::c_int } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uuid { pub time_low: u32, pub time_mid: u16, @@ -108,6 +110,7 @@ s! { pub node: [u8; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mq_attr { pub mq_flags: ::c_long, pub mq_maxmsg: ::c_long, @@ -115,6 +118,7 @@ s! { pub mq_curmsgs: ::c_long, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -137,6 +141,7 @@ s! { pub f_uid_uuid: ::uuid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_ino: ::ino_t, pub st_nlink: ::nlink_t, @@ -162,6 +167,7 @@ s! { pub st_qspare2: i64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct if_data { pub ifi_type: ::c_uchar, pub ifi_physical: ::c_uchar, @@ -189,6 +195,7 @@ s! { pub ifi_lastchange: ::timeval, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct if_msghdr { pub ifm_msglen: ::c_ushort, pub ifm_version: ::c_uchar, @@ -199,6 +206,7 @@ s! { pub ifm_data: if_data, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_dl { pub sdl_len: ::c_uchar, pub sdl_family: ::c_uchar, @@ -226,6 +234,7 @@ s! { pub ss_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpumask_t { ary: [u64; 4], } @@ -256,6 +265,7 @@ s! { pub f_flag: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kinfo_cputime { pub cp_user: u64, pub cp_nice: u64, @@ -269,6 +279,7 @@ s! { pub cp_msg: [::c_char; 32], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kinfo_lwp { pub kl_pid: ::pid_t, pub kl_tid: ::lwpid_t, @@ -297,6 +308,7 @@ s! { pub kl_comm: [::c_char; MAXCOMLEN+1], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kinfo_proc { pub kp_paddr: ::uintptr_t, pub kp_flags: ::c_int, @@ -347,10 +359,12 @@ s! { kp_spare: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_vm_map { _priv: [::uintptr_t; 36], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vm_map_entry { _priv: [::uintptr_t; 15], pub eflags: ::vm_eflags_t, @@ -362,6 +376,7 @@ s! { pub id: ::vm_subsys_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_pmap { _priv1: [::uintptr_t; 32], _priv2: [::uintptr_t; 32], @@ -391,16 +406,19 @@ s! { pub vm_refcnt: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpuctl_msr_args_t { pub msr: ::c_int, pub data: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpuctl_cpuid_args_t { pub level: ::c_int, pub data: [u32; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpuctl_cpuid_count_args_t { pub level: ::c_int, pub level_type: ::c_int, @@ -414,6 +432,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmpx { pub ut_name: [::c_char; 32], pub ut_id: [::c_char; 4], @@ -431,6 +450,7 @@ s_no_extra_traits! { pub ut_unused2: [u8; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct lastlogx { pub ll_tv: ::timeval, pub ll_line: [::c_char; _UTX_LINESIZE], @@ -438,6 +458,7 @@ s_no_extra_traits! { pub ll_ss: ::sockaddr_storage, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_fileno: ::ino_t, pub d_namlen: u16, @@ -447,6 +468,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { __spare2: ::c_long, pub f_bsize: ::c_long, @@ -485,6 +507,7 @@ s_no_extra_traits! { __unused3: *mut ::c_void //actually a function pointer } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub mc_onstack: register_t, pub mc_rdi: register_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/aarch64.rs b/src/unix/bsd/freebsdlike/freebsd/aarch64.rs index e8be8815c028e..23048a69ad521 100644 --- a/src/unix/bsd/freebsdlike/freebsd/aarch64.rs +++ b/src/unix/bsd/freebsdlike/freebsd/aarch64.rs @@ -7,6 +7,7 @@ pub type suseconds_t = i64; pub type register_t = i64; s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct gpregs { pub gp_x: [::register_t; 30], pub gp_lr: ::register_t, @@ -16,6 +17,7 @@ s_no_extra_traits! { pub gp_pad: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fpregs { pub fp_q: u128, pub fp_sr: u32, @@ -24,6 +26,7 @@ s_no_extra_traits! { pub fp_pad: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub mc_gpregs: gpregs, pub mc_fpregs: fpregs, diff --git a/src/unix/bsd/freebsdlike/freebsd/arm.rs b/src/unix/bsd/freebsdlike/freebsd/arm.rs index 300b3dd45ca9d..c1221bbcdb8a6 100644 --- a/src/unix/bsd/freebsdlike/freebsd/arm.rs +++ b/src/unix/bsd/freebsdlike/freebsd/arm.rs @@ -7,6 +7,7 @@ pub type suseconds_t = i32; pub type register_t = i32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs index f32128f775574..667ff127eb37d 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs @@ -1,4 +1,5 @@ #[repr(C)] +#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] pub struct stat { pub st_dev: ::dev_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs index de34069eabdf2..a492feb89ba24 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs @@ -17,6 +17,7 @@ s! { pub udata: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -212,6 +213,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_fileno: ::ino_t, pub d_reclen: u16, @@ -221,6 +223,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_version: u32, pub f_type: u32, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs index 80c6fa1684530..774109c189e13 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs @@ -1,4 +1,5 @@ #[repr(C)] +#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] pub struct stat { pub st_dev: ::dev_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs index 10fcaa03a4ef6..98b7ef4d3c4c1 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs @@ -6,6 +6,7 @@ pub type ino_t = ::c_ulong; pub type shmatt_t = ::c_uint; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -27,6 +28,7 @@ s! { pub ext: [u64; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kvm_page { pub version: ::c_uint, pub paddr: ::c_ulong, @@ -221,6 +223,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_fileno: ::ino_t, pub d_off: ::off_t, @@ -232,6 +235,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_version: u32, pub f_type: u32, @@ -257,6 +261,7 @@ s_no_extra_traits! { pub f_mntonname: [::c_char; 1024], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vnstat { pub vn_fileid: u64, pub vn_size: u64, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs index 80c6fa1684530..774109c189e13 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs @@ -1,4 +1,5 @@ #[repr(C)] +#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] pub struct stat { pub st_dev: ::dev_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs index 0e04a12e70e47..4ba75f76dab9f 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs @@ -9,6 +9,7 @@ pub type kssize_t = i64; pub type domainset_t = __c_anonymous_domainset; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -30,6 +31,7 @@ s! { pub ext: [u64; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kvm_page { pub kp_version: ::u_int, pub kp_paddr: ::kpaddr_t, @@ -40,6 +42,7 @@ s! { pub kp_len: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_domainset { _priv: [::uintptr_t; 4], } @@ -231,6 +234,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_fileno: ::ino_t, pub d_off: ::off_t, @@ -242,6 +246,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_version: u32, pub f_type: u32, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs index 80c6fa1684530..774109c189e13 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs @@ -1,4 +1,5 @@ #[repr(C)] +#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] pub struct stat { pub st_dev: ::dev_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs index a86ca6e7c56ea..b36726d864d3e 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs @@ -9,6 +9,7 @@ pub type kssize_t = i64; pub type domainset_t = __c_anonymous_domainset; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -30,6 +31,7 @@ s! { pub ext: [u64; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kvm_page { pub kp_version: ::u_int, pub kp_paddr: ::kpaddr_t, @@ -40,6 +42,7 @@ s! { pub kp_len: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_domainset { _priv: [::uintptr_t; 4], } @@ -231,6 +234,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_fileno: ::ino_t, pub d_off: ::off_t, @@ -242,6 +246,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_version: u32, pub f_type: u32, @@ -267,6 +272,7 @@ s_no_extra_traits! { pub f_mntonname: [::c_char; 1024], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vnstat { pub vn_fileid: u64, pub vn_size: u64, diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs index 5fba1447d7baf..f57c011095e17 100644 --- a/src/unix/bsd/freebsdlike/freebsd/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs @@ -262,6 +262,7 @@ s! { pub ip6: *mut ::in6_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bavail: ::fsblkcnt_t, pub f_bfree: ::fsblkcnt_t, @@ -277,9 +278,11 @@ s! { } // internal structure has changed over time + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _sem { data: [u32; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sembuf { pub sem_num: ::c_ushort, pub sem_op: ::c_short, @@ -306,11 +309,13 @@ s! { pub ss_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mmsghdr { pub msg_hdr: ::msghdr, pub msg_len: ::ssize_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockcred { pub sc_uid: ::uid_t, pub sc_euid: ::uid_t, @@ -333,6 +338,7 @@ s! { pub pve_path: *mut ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_lwpinfo { pub pl_lwpid: lwpid_t, pub pl_event: ::c_int, @@ -346,11 +352,13 @@ s! { pub pl_syscall_narg: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_sc_ret { pub sr_retval: [::register_t; 2], pub sr_error: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_coredump { pub pc_fd: ::c_int, pub pc_flags: u32, @@ -364,6 +372,7 @@ s! { pub pscr_args: *mut ::register_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpuset_t { #[cfg(target_pointer_width = "64")] __bits: [::c_long; 4], @@ -371,10 +380,12 @@ s! { __bits: [::c_long; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cap_rights_t { cr_rights: [u64; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct umutex { m_owner: ::lwpid_t, m_flags: u32, @@ -386,6 +397,7 @@ s! { } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ucond { c_has_waiters: u32, c_flags: u32, @@ -393,6 +405,7 @@ s! { c_spare: [u32; 1], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uuid { pub time_low: u32, pub time_mid: u16, @@ -402,14 +415,17 @@ s! { pub node: [u8; _UUID_NODE_LEN], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_pthread_spinlock { s_clock: umutex, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_pthread_barrierattr { pshared: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_pthread_barrier { b_lock: umutex, b_cv: ucond, @@ -420,6 +436,7 @@ s! { b_destroying: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kinfo_vmentry { pub kve_structsize: ::c_int, pub kve_type: ::c_int, @@ -489,16 +506,19 @@ s! { pub core: ::uintptr_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct itimerspec { pub it_interval: ::timespec, pub it_value: ::timespec, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous__timer { _priv: [::c_int; 3], } /// Used to hold a copy of the command line, if it had a sane length. + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pargs { /// Reference count. pub ar_ref: u_int, @@ -508,6 +528,7 @@ s! { pub ar_args: [::c_uchar; 1], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct priority { /// Scheduling class. pub pri_class: u_char, @@ -519,6 +540,7 @@ s! { pub pri_user: u_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kvm_swap { pub ksw_devname: [::c_char; 32], pub ksw_used: u_int, @@ -546,6 +568,7 @@ s! { pub n_value: ::kvaddr_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_sem { _priv: ::uintptr_t, } @@ -558,6 +581,7 @@ s! { pub sem_ctime: ::time_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct vmtotal { pub t_vm: u64, pub t_avm: u64, @@ -576,6 +600,7 @@ s! { pub t_pad: [u16; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockstat { pub inp_ppcb: u64, pub so_addr: u64, @@ -597,16 +622,19 @@ s! { pub recvq: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmstat { pub size: u64, pub mode: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct spacectl_range { pub r_offset: ::off_t, pub r_len: ::off_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rusage_ext { pub rux_runtime: u64, pub rux_uticks: u64, @@ -623,6 +651,7 @@ s! { pub ifcr_buffer: *mut ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct if_msghdr { /// to skip over non-understood messages pub ifm_msglen: ::c_ushort, @@ -641,6 +670,7 @@ s! { pub ifm_data: if_data, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct if_msghdrl { /// to skip over non-understood messages pub ifm_msglen: ::c_ushort, @@ -665,6 +695,7 @@ s! { pub ifm_data: if_data, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifa_msghdr { /// to skip over non-understood messages pub ifam_msglen: ::c_ushort, @@ -683,6 +714,7 @@ s! { pub ifam_metric: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifa_msghdrl { /// to skip over non-understood messages pub ifam_msglen: ::c_ushort, @@ -708,6 +740,7 @@ s! { pub ifam_data: if_data, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifma_msghdr { /// to skip over non-understood messages pub ifmam_msglen: ::c_ushort, @@ -724,6 +757,7 @@ s! { pub _ifmam_spare1: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct if_announcemsghdr { /// to skip over non-understood messages pub ifan_msglen: ::c_ushort, @@ -744,6 +778,7 @@ s! { pub buffer: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifaliasreq { /// if name, e.g. "en0" pub ifra_name: [::c_char; ::IFNAMSIZ as usize], @@ -754,6 +789,7 @@ s! { } /// 9.x compat + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct oifaliasreq { /// if name, e.g. "en0" pub ifra_name: [::c_char; ::IFNAMSIZ as usize], @@ -787,6 +823,7 @@ s! { pub ifd_data: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifi2creq { /// i2c address (0xA0, 0xA2) pub dev_addr: u8, @@ -800,6 +837,7 @@ s! { pub data: [u8; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifrsshash { /// if name, e.g. "en0" pub ifrh_name: [::c_char; ::IFNAMSIZ as usize], @@ -811,6 +849,7 @@ s! { pub ifrh_types: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifmibdata { /// name of interface pub ifmd_name: [::c_char; ::IFNAMSIZ as usize], @@ -830,6 +869,7 @@ s! { pub ifmd_data: if_data, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifmib_iso_8802_3 { pub dot3StatsAlignmentErrors: u32, pub dot3StatsFCSErrors: u32, @@ -849,27 +889,32 @@ s! { pub dot3Compliance: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_ph { pub ph1: u64, pub ph2: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fid { pub fid_len: ::c_ushort, pub fid_data0: ::c_ushort, pub fid_data: [::c_char; ::MAXFIDSZ as usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fhandle { pub fh_fsid: ::fsid_t, pub fh_fid: fid, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct bintime { pub sec: ::time_t, pub frac: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct clockinfo { /// clock frequency pub hz: ::c_int, @@ -924,6 +969,7 @@ s! { pub sequence1: ::u_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct devstat_match { pub match_fields: devstat_match_flags, pub device_type: devstat_type_flags, @@ -936,6 +982,7 @@ s! { pub match_field: devstat_match_flags, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct device_selection { pub device_number: u32, pub device_name: [::c_char; DEVSTAT_NAME_LEN as usize], @@ -952,6 +999,7 @@ s! { pub numdevs: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockcred2 { pub sc_version: ::c_int, pub sc_pid: ::pid_t, @@ -971,16 +1019,19 @@ s! { pub ifc_ifcu: *mut ifreq, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct au_mask_t { pub am_success: ::c_uint, pub am_failure: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct au_tid_t { pub port: u32, pub machine: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct auditinfo_t { pub ai_auid: ::au_id_t, pub ai_mask: ::au_mask_t, @@ -988,16 +1039,19 @@ s! { pub ai_asid: ::au_asid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct tcp_fastopen { pub enable: ::c_int, pub psk: [u8; ::TCP_FASTOPEN_PSK_LEN as usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct tcp_function_set { pub function_set_name: [::c_char; ::TCP_FUNCTION_NAME_LEN_MAX as usize], pub pcbcnt: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct tcp_info { pub tcpi_state: u8, pub __tcpi_ca_state: u8, @@ -1060,38 +1114,45 @@ s! { pub __tcpi_pad: [u32; 26], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _umtx_time { pub _timeout: ::timespec, pub _flags: u32, pub _clockid: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shm_largepage_conf { pub psind: ::c_int, pub alloc_policy: ::c_int, __pad: [::c_int; 10], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct memory_type { __priva: [::uintptr_t; 32], __privb: [::uintptr_t; 26], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct memory_type_list { __priv: [::uintptr_t; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pidfh { __priva: [[::uintptr_t; 32]; 8], __privb: [::uintptr_t; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_event { pub se_assoc_id: ::sctp_assoc_t, pub se_type: u16, pub se_on: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_event_subscribe { pub sctp_data_io_event: u8, pub sctp_association_event: u8, @@ -1106,6 +1167,7 @@ s! { pub sctp_stream_reset_event: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_initmsg { pub sinit_num_ostreams: u16, pub sinit_max_instreams: u16, @@ -1113,6 +1175,7 @@ s! { pub sinit_max_init_timeo: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_sndrcvinfo { pub sinfo_stream: u16, pub sinfo_ssn: u16, @@ -1128,6 +1191,7 @@ s! { pub __reserve_pad: [[u8; 23]; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_extrcvinfo { pub sinfo_stream: u16, pub sinfo_ssn: u16, @@ -1148,6 +1212,7 @@ s! { pub __reserve_pad: [[u8; 19]; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_sndinfo { pub snd_sid: u16, pub snd_flags: u16, @@ -1156,21 +1221,25 @@ s! { pub snd_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_prinfo { pub pr_policy: u16, pub pr_value: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_default_prinfo { pub pr_policy: u16, pub pr_value: u32, pub pr_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_authinfo { pub auth_keynumber: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_rcvinfo { pub rcv_sid: u16, pub rcv_ssn: u16, @@ -1182,6 +1251,7 @@ s! { pub rcv_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_nxtinfo { pub nxt_sid: u16, pub nxt_flags: u16, @@ -1190,11 +1260,13 @@ s! { pub nxt_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_recvv_rn { pub recvv_rcvinfo: sctp_rcvinfo, pub recvv_nxtinfo: sctp_nxtinfo, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_sendv_spa { pub sendv_flags: u32, pub sendv_sndinfo: sctp_sndinfo, @@ -1202,6 +1274,7 @@ s! { pub sendv_authinfo: sctp_authinfo, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_snd_all_completes { pub sall_stream: u16, pub sall_flags: u16, @@ -1211,6 +1284,7 @@ s! { pub sall_num_failed: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_pcbinfo { pub ep_count: u32, pub asoc_count: u32, @@ -1222,12 +1296,14 @@ s! { pub stream_oque: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_sockstat { pub ss_assoc_id: ::sctp_assoc_t, pub ss_total_sndbuf: u32, pub ss_total_recv_buf: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_assoc_change { pub sac_type: u16, pub sac_flags: u16, @@ -1240,6 +1316,7 @@ s! { pub sac_info: [u8; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_paddr_change { pub spc_type: u16, pub spc_flags: u16, @@ -1250,6 +1327,7 @@ s! { pub spc_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_remote_error { pub sre_type: u16, pub sre_flags: u16, @@ -1259,6 +1337,7 @@ s! { pub sre_data: [u8; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_send_failed_event { pub ssfe_type: u16, pub ssfe_flags: u16, @@ -1269,6 +1348,7 @@ s! { pub ssfe_data: [u8; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_shutdown_event { pub sse_type: u16, pub sse_flags: u16, @@ -1276,6 +1356,7 @@ s! { pub sse_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_adaptation_event { pub sai_type: u16, pub sai_flags: u16, @@ -1284,10 +1365,12 @@ s! { pub sai_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_setadaptation { pub ssb_adaptation_ind: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_pdapi_event { pub pdapi_type: u16, pub pdapi_flags: u16, @@ -1298,6 +1381,7 @@ s! { pub pdapi_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_sender_dry_event { pub sender_dry_type: u16, pub sender_dry_flags: u16, @@ -1305,6 +1389,7 @@ s! { pub sender_dry_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_stream_reset_event { pub strreset_type: u16, pub strreset_flags: u16, @@ -1313,6 +1398,7 @@ s! { pub strreset_stream_list: [u16; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_stream_change_event { pub strchange_type: u16, pub strchange_flags: u16, @@ -1324,6 +1410,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmpx { pub ut_type: ::c_short, pub ut_tv: ::timeval, @@ -1352,6 +1439,7 @@ s_no_extra_traits! { __cr_unused1: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_dl { pub sdl_len: ::c_uchar, pub sdl_family: ::c_uchar, @@ -1363,6 +1451,7 @@ s_no_extra_traits! { pub sdl_data: [::c_char; 46], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mq_attr { pub mq_flags: ::c_long, pub mq_maxmsg: ::c_long, @@ -1371,6 +1460,7 @@ s_no_extra_traits! { __reserved: [::c_long; 4] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigevent { pub sigev_notify: ::c_int, pub sigev_signo: ::c_int, @@ -1383,6 +1473,7 @@ s_no_extra_traits! { __unused2: [::c_long; 7] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptsstat { #[cfg(any(freebsd12, freebsd13, freebsd14))] pub dev: u64, @@ -1509,12 +1600,14 @@ s_no_extra_traits! { pub ifcu_req: *mut ifreq, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifstat { /// if name, e.g. "en0" pub ifs_name: [::c_char; ::IFNAMSIZ as usize], pub ascii: [::c_char; ::IFSTATMAX as usize + 1], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifrsskey { /// if name, e.g. "en0" pub ifrk_name: [::c_char; ::IFNAMSIZ as usize], @@ -1525,6 +1618,7 @@ s_no_extra_traits! { pub ifrk_key: [u8; ::RSS_KEYLEN as usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifdownreason { pub ifdr_name: [::c_char; ::IFNAMSIZ as usize], pub ifdr_reason: u32, @@ -1532,6 +1626,7 @@ s_no_extra_traits! { pub ifdr_msg: [::c_char; ::IFDR_MSG_SIZE as usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctphdr { pub src_port: u16, @@ -1540,6 +1635,7 @@ s_no_extra_traits! { pub checksum: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_chunkhdr { pub chunk_type: u8, @@ -1547,12 +1643,14 @@ s_no_extra_traits! { pub chunk_length: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_paramhdr { pub param_type: u16, pub param_length: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_gen_error_cause { pub code: u16, @@ -1560,12 +1658,14 @@ s_no_extra_traits! { pub info: [u8; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_error_cause { pub code: u16, pub length: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_error_invalid_stream { pub cause: sctp_error_cause, @@ -1573,6 +1673,7 @@ s_no_extra_traits! { __reserved: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_error_missing_param { pub cause: sctp_error_cause, @@ -1580,12 +1681,14 @@ s_no_extra_traits! { pub tpe: [u8; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_error_stale_cookie { pub cause: sctp_error_cause, pub stale_time: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_error_out_of_resource { pub cause: sctp_error_cause, @@ -1596,18 +1699,21 @@ s_no_extra_traits! { pub cause: sctp_error_cause, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_error_unrecognized_chunk { pub cause: sctp_error_cause, pub ch: sctp_chunkhdr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_error_no_user_data { pub cause: sctp_error_cause, pub tsn: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] #[repr(packed)] pub struct sctp_error_auth_invalid_hmac { pub cause: sctp_error_cause, diff --git a/src/unix/bsd/freebsdlike/freebsd/powerpc.rs b/src/unix/bsd/freebsdlike/freebsd/powerpc.rs index a0120c337e0ad..2d4ebd26607fb 100644 --- a/src/unix/bsd/freebsdlike/freebsd/powerpc.rs +++ b/src/unix/bsd/freebsdlike/freebsd/powerpc.rs @@ -7,6 +7,7 @@ pub type suseconds_t = i32; pub type register_t = i32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs b/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs index 7f5b9752264e3..e22f196374421 100644 --- a/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs +++ b/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs @@ -7,6 +7,7 @@ pub type suseconds_t = i64; pub type register_t = i64; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/riscv64.rs b/src/unix/bsd/freebsdlike/freebsd/riscv64.rs index f9fa1c2750b22..cae1e84454554 100644 --- a/src/unix/bsd/freebsdlike/freebsd/riscv64.rs +++ b/src/unix/bsd/freebsdlike/freebsd/riscv64.rs @@ -7,6 +7,7 @@ pub type suseconds_t = ::c_long; pub type register_t = i64; s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct gpregs { pub gp_ra: ::register_t, pub gp_sp: ::register_t, @@ -19,6 +20,7 @@ s_no_extra_traits! { pub gp_sstatus: ::register_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fpregs { pub fp_x: [[::register_t; 2]; 32], pub fp_fcsr: ::register_t, @@ -26,6 +28,7 @@ s_no_extra_traits! { pub fp_pad: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub mc_gpregs: gpregs, pub mc_fpregs: fpregs, diff --git a/src/unix/bsd/freebsdlike/freebsd/x86.rs b/src/unix/bsd/freebsdlike/freebsd/x86.rs index 4046ec3109f14..1a8f1784be15c 100644 --- a/src/unix/bsd/freebsdlike/freebsd/x86.rs +++ b/src/unix/bsd/freebsdlike/freebsd/x86.rs @@ -7,6 +7,7 @@ pub type suseconds_t = i32; pub type register_t = i32; s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub mc_onstack: register_t, pub mc_gs: register_t, @@ -42,6 +43,7 @@ s_no_extra_traits! { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs b/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs index 3a016a0519852..c39304740e5f1 100644 --- a/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs +++ b/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs @@ -2,11 +2,13 @@ use {c_long, register_t}; s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 4] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct mcontext_t { pub mc_onstack: register_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs b/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs index ae1fcf781047a..cb0097bef1228 100644 --- a/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs @@ -7,6 +7,7 @@ pub type suseconds_t = i64; pub type register_t = i64; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct reg32 { pub r_fs: u32, pub r_es: u32, @@ -29,6 +30,7 @@ s! { pub r_gs: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct reg { pub r_r15: i64, pub r_r14: i64, @@ -60,6 +62,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fpreg32 { pub fpr_env: [u32; 7], pub fpr_acc: [[u8; 10]; 8], @@ -67,6 +70,7 @@ s_no_extra_traits! { pub fpr_pad: [u8; 64], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fpreg { pub fpr_env: [u64; 4], pub fpr_acc: [[u8; 16]; 8], @@ -74,6 +78,7 @@ s_no_extra_traits! { pub fpr_spare: [u64; 12], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct xmmreg { pub xmm_env: [u32; 8], pub xmm_acc: [[u8; 16]; 8], @@ -94,6 +99,7 @@ s_no_extra_traits! { pub a_un: __c_anonymous_elf64_auxv_union, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kinfo_file { pub kf_structsize: ::c_int, pub kf_type: ::c_int, diff --git a/src/unix/bsd/freebsdlike/mod.rs b/src/unix/bsd/freebsdlike/mod.rs index 313bf588d72b4..617f99b213ddd 100644 --- a/src/unix/bsd/freebsdlike/mod.rs +++ b/src/unix/bsd/freebsdlike/mod.rs @@ -85,21 +85,25 @@ impl siginfo_t { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_addr { pub s_addr: ::in_addr_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq { pub imr_multiaddr: in_addr, pub imr_interface: in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreqn { pub imr_multiaddr: in_addr, pub imr_address: in_addr, pub imr_ifindex: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq_source { pub imr_multiaddr: in_addr, pub imr_sourceaddr: in_addr, @@ -131,6 +135,7 @@ s! { pub ai_next: *mut addrinfo, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { bits: [u32; 4], } @@ -148,12 +153,14 @@ s! { _pad2: [::c_int; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigaction { pub sa_sigaction: ::sighandler_t, pub sa_flags: ::c_int, pub sa_mask: sigset_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sched_param { pub sched_priority: ::c_int, } @@ -165,6 +172,7 @@ s! { pub dli_saddr: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in { pub sin_len: u8, pub sin_family: ::sa_family_t, @@ -173,6 +181,7 @@ s! { pub sin_zero: [::c_char; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -183,6 +192,7 @@ s! { pub c_ospeed: ::speed_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_start: ::off_t, pub l_len: ::off_t, @@ -227,6 +237,7 @@ s! { pub int_n_sign_posn: ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsgcred { pub cmcred_pid: ::pid_t, pub cmcred_uid: ::uid_t, @@ -236,16 +247,19 @@ s! { pub cmcred_groups: [::gid_t; CMGROUP_MAX], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rtprio { pub type_: ::c_ushort, pub prio: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in6_pktinfo { pub ipi6_addr: ::in6_addr, pub ipi6_ifindex: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct arphdr { pub ar_hrd: u16, pub ar_pro: u16, @@ -254,6 +268,7 @@ s! { pub ar_op: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct timex { pub modes: ::c_uint, pub offset: ::c_long, @@ -274,6 +289,7 @@ s! { pub stbcnt: ::c_long, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ntptimeval { pub time: ::timespec, pub maxerror: ::c_long, @@ -282,6 +298,7 @@ s! { pub time_state: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct accept_filter_arg { pub af_name: [::c_char; 16], af_arg: [[::c_char; 10]; 24], @@ -301,16 +318,19 @@ s! { pub bf_insns: *mut bpf_insn, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct bpf_stat { pub bs_recv: ::c_uint, pub bs_drop: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct bpf_version { pub bv_major: ::c_ushort, pub bv_minor: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct bpf_hdr { pub bh_tstamp: ::timeval, pub bh_caplen: u32, @@ -318,6 +338,7 @@ s! { pub bh_hdrlen: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct bpf_insn { pub code: ::c_ushort, pub jt: ::c_uchar, @@ -332,6 +353,7 @@ s! { // elf.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Phdr { pub p_type: Elf32_Word, pub p_offset: Elf32_Off, @@ -343,6 +365,7 @@ s! { pub p_align: Elf32_Word, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Phdr { pub p_type: Elf64_Word, pub p_flags: Elf64_Word, @@ -367,6 +390,7 @@ s! { pub dlpi_tls_data: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub cuid: ::uid_t, pub cgid: ::gid_t, @@ -377,12 +401,14 @@ s! { pub key: ::key_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes, Unaligned))] pub struct eui64 { pub octet: [u8; EUI64_LEN], } } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_storage { pub ss_len: u8, pub ss_family: ::sa_family_t, diff --git a/src/unix/bsd/mod.rs b/src/unix/bsd/mod.rs index 6ce041357ebee..ead06c688a8dc 100644 --- a/src/unix/bsd/mod.rs +++ b/src/unix/bsd/mod.rs @@ -8,12 +8,14 @@ pub type nfds_t = ::c_uint; pub type regoff_t = off_t; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr { pub sa_len: u8, pub sa_family: sa_family_t, pub sa_data: [::c_char; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in6 { pub sin6_len: u8, pub sin6_family: sa_family_t, @@ -89,12 +91,14 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::socklen_t, pub cmsg_level: ::c_int, pub cmsg_type: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fsid_t { __fsid_val: [i32; 2], } @@ -111,6 +115,7 @@ s! { __re_g: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct regmatch_t { pub rm_so: regoff_t, pub rm_eo: regoff_t, @@ -125,6 +130,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_un { pub sun_len: u8, pub sun_family: sa_family_t, diff --git a/src/unix/bsd/netbsdlike/netbsd/aarch64.rs b/src/unix/bsd/netbsdlike/netbsd/aarch64.rs index 7b895f63238d0..a9375e11ed3e3 100644 --- a/src/unix/bsd/netbsdlike/netbsd/aarch64.rs +++ b/src/unix/bsd/netbsdlike/netbsd/aarch64.rs @@ -14,6 +14,7 @@ s! { pub __fpsr: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub __gregs: [::greg_t; 32], pub __fregs: __fregset, diff --git a/src/unix/bsd/netbsdlike/netbsd/mod.rs b/src/unix/bsd/netbsdlike/netbsd/mod.rs index 18a00ae38607e..1bee436ad1da3 100644 --- a/src/unix/bsd/netbsdlike/netbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/netbsd/mod.rs @@ -122,6 +122,7 @@ s! { __unused8: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mq_attr { pub mq_flags: ::c_long, pub mq_maxmsg: ::c_long, @@ -129,15 +130,18 @@ s! { pub mq_curmsgs: ::c_long, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct itimerspec { pub it_interval: ::timespec, pub it_value: ::timespec, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { __bits: [u32; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_mode: ::mode_t, @@ -241,12 +245,14 @@ s! { ptr_private: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_spinlock_t { pts_magic: ::c_uint, pts_spin: ::pthread_spin_t, pts_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kevent { pub ident: ::uintptr_t, pub filter: u32, @@ -256,6 +262,7 @@ s! { pub udata: ::intptr_t, /* FIXME: NetBSD 10.0 will finally have same layout as other BSD */ } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dqblk { pub dqb_bhardlimit: u32, pub dqb_bsoftlimit: u32, @@ -301,6 +308,7 @@ s! { pub int_n_sign_posn: ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct if_data { pub ifi_type: ::c_uchar, pub ifi_addrlen: ::c_uchar, @@ -323,6 +331,7 @@ s! { pub ifi_lastchange: ::timespec, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct if_msghdr { pub ifm_msglen: ::c_ushort, pub ifm_version: ::c_uchar, @@ -333,6 +342,7 @@ s! { pub ifm_data: if_data, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockcred { pub sc_pid: ::pid_t, pub sc_uid: ::uid_t, @@ -343,6 +353,7 @@ s! { pub sc_groups: [::gid_t; 1], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uucred { pub cr_unused: ::c_ushort, pub cr_uid: ::uid_t, @@ -351,12 +362,14 @@ s! { pub cr_groups: [::gid_t; NGROUPS_MAX as usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct unpcbid { pub unp_pid: ::pid_t, pub unp_euid: ::uid_t, pub unp_egid: ::gid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_dl { pub sdl_len: ::c_uchar, pub sdl_family: ::c_uchar, @@ -368,11 +381,13 @@ s! { pub sdl_data: [::c_char; 12], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mmsghdr { pub msg_hdr: ::msghdr, pub msg_len: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __exit_status { pub e_termination: u16, pub e_exit: u16, @@ -390,6 +405,7 @@ s! { _shm_internal: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmp { pub ut_line: [::c_char; UT_LINESIZE], pub ut_name: [::c_char; UT_NAMESIZE], @@ -397,12 +413,14 @@ s! { pub ut_time: ::time_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct lastlog { pub ll_line: [::c_char; UT_LINESIZE], pub ll_host: [::c_char; UT_HOSTSIZE], pub ll_time: ::time_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct timex { pub modes: ::c_uint, pub offset: ::c_long, @@ -423,6 +441,7 @@ s! { pub stbcnt: ::c_long, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ntptimeval { pub time: ::timespec, pub maxerror: ::c_long, @@ -433,6 +452,7 @@ s! { // elf.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Phdr { pub p_type: Elf32_Word, pub p_offset: Elf32_Off, @@ -444,6 +464,7 @@ s! { pub p_align: Elf32_Word, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Phdr { pub p_type: Elf64_Word, pub p_flags: Elf64_Word, @@ -455,11 +476,13 @@ s! { pub p_align: Elf64_Xword, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Aux32Info { pub a_type: Elf32_Word, pub a_v: Elf32_Word, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Aux64Info { pub a_type: Elf64_Word, pub a_v: Elf64_Xword, @@ -478,19 +501,23 @@ s! { pub dlpi_tls_data: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _cpuset { bits: [u32; 0] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct accept_filter_arg { pub af_name: [::c_char; 16], af_arg: [[::c_char; 10]; 24], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ki_sigset_t { pub __bits: [u32; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kinfo_proc2 { pub p_forw: u64, pub p_back: u64, @@ -588,6 +615,7 @@ s! { pub p_vm_msize: i64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kinfo_lwp { pub l_forw: u64, pub l_back: u64, @@ -615,6 +643,7 @@ s! { pub l_name: [::c_char; KI_LNAMELEN as usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct kinfo_vmentry { pub kve_start: u64, pub kve_end: u64, @@ -644,10 +673,12 @@ s! { pub mode: ::mode_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_posix_spawn_fae_dup2 { pub newfildes: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct posix_spawnattr_t { pub sa_flags: ::c_short, pub sa_pgroup: ::pid_t, @@ -671,6 +702,7 @@ s! { pub fae: *mut posix_spawn_file_actions_entry_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_lwpinfo { pub pl_lwpid: lwpid_t, pub pl_event: ::c_int, @@ -684,15 +716,18 @@ s! { pub pl_private: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_siginfo { pub psi_siginfo: siginfo_t, pub psi_lwpid: lwpid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_event { pub pe_set_event: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysctldesc { pub descr_num: i32, pub descr_ver: u32, @@ -700,6 +735,7 @@ s! { pub descr_str: [::c_char; 1], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifreq { pub _priv: [[::c_char; 6]; 24], } @@ -710,6 +746,7 @@ s! { pub ifc_ifcu: __c_anonymous_ifc_ifcu, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct tcp_info { pub tcpi_state: u8, pub __tcpi_ca_state: u8, @@ -755,7 +792,7 @@ s! { } s_no_extra_traits! { - + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmpx { pub ut_name: [::c_char; _UTX_USERSIZE], pub ut_id: [::c_char; _UTX_IDSIZE], @@ -770,6 +807,7 @@ s_no_extra_traits! { pub ut_pad: [u8; _UTX_PADSIZE], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct lastlogx { pub ll_tv: ::timeval, pub ll_line: [::c_char; _UTX_LINESIZE], @@ -777,11 +815,13 @@ s_no_extra_traits! { pub ll_ss: sockaddr_storage, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_pktinfo { pub ipi_addr: ::in_addr, pub ipi_ifindex: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct arphdr { pub ar_hrd: u16, pub ar_pro: u16, @@ -790,15 +830,18 @@ s_no_extra_traits! { pub ar_op: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_addr { pub s_addr: ::in_addr_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq { pub imr_multiaddr: in_addr, pub imr_interface: in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in { pub sin_len: u8, pub sin_family: ::sa_family_t, @@ -807,6 +850,7 @@ s_no_extra_traits! { pub sin_zero: [i8; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_fileno: ::ino_t, pub d_reclen: u16, @@ -815,6 +859,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 512], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_flag: ::c_ulong, pub f_bsize: ::c_ulong, @@ -849,6 +894,7 @@ s_no_extra_traits! { pub f_mntfromname: [::c_char; 1024], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_storage { pub ss_len: u8, pub ss_family: ::sa_family_t, diff --git a/src/unix/bsd/netbsdlike/netbsd/x86_64.rs b/src/unix/bsd/netbsdlike/netbsd/x86_64.rs index 2f6e4454577a0..9b1b79cc81b77 100644 --- a/src/unix/bsd/netbsdlike/netbsd/x86_64.rs +++ b/src/unix/bsd/netbsdlike/netbsd/x86_64.rs @@ -7,6 +7,7 @@ pub type c___greg_t = u64; pub type __cpu_simple_lock_nv_t = ::c_uchar; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub __gregs: [c___greg_t; 26], pub _mc_tlsbase: c___greg_t, diff --git a/src/unix/haiku/b32.rs b/src/unix/haiku/b32.rs index 073ae9d4b58e2..868d9336d1eed 100644 --- a/src/unix/haiku/b32.rs +++ b/src/unix/haiku/b32.rs @@ -7,6 +7,7 @@ pub type Elf_Half = ::Elf32_Half; pub type Elf_Phdr = ::Elf32_Phdr; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Phdr { pub p_type: ::Elf32_Word, pub p_offset: ::Elf32_Off, diff --git a/src/unix/haiku/b64.rs b/src/unix/haiku/b64.rs index 456918052d289..896d759c20124 100644 --- a/src/unix/haiku/b64.rs +++ b/src/unix/haiku/b64.rs @@ -7,6 +7,7 @@ pub type Elf_Half = ::Elf64_Half; pub type Elf_Phdr = ::Elf64_Phdr; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Phdr { pub p_type: ::Elf64_Word, pub p_flags: ::Elf64_Word, diff --git a/src/unix/haiku/mod.rs b/src/unix/haiku/mod.rs index 00e9523c9865a..a1563a8be97ac 100644 --- a/src/unix/haiku/mod.rs +++ b/src/unix/haiku/mod.rs @@ -85,21 +85,25 @@ impl siginfo_t { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_addr { pub s_addr: ::in_addr_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq { pub imr_multiaddr: in_addr, pub imr_interface: in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr { pub sa_len: u8, pub sa_family: sa_family_t, pub sa_data: [u8; 30], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in { pub sin_len: u8, pub sin_family: sa_family_t, @@ -108,6 +112,7 @@ s! { pub sin_zero: [i8; 24], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in6 { pub sin6_len: u8, pub sin6_family: u8, @@ -138,6 +143,7 @@ s! { pub ifa_data: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fd_set { // size for 1024 bits, and a fd_mask with size u32 fds_bits: [fd_mask; 32], @@ -157,6 +163,7 @@ s! { pub tm_zone: *mut ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utsname { pub sysname: [::c_char; 32], pub nodename: [::c_char; 32], @@ -202,6 +209,7 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::socklen_t, pub cmsg_level: ::c_int, @@ -215,6 +223,7 @@ s! { pub dli_saddr: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -226,6 +235,7 @@ s! { pub c_cc: [::cc_t; ::NCCS], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -234,6 +244,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: dev_t, pub st_ino: ino_t, @@ -271,6 +282,7 @@ s! { __unused8: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutex_t { flags: u32, lock: i32, @@ -297,6 +309,7 @@ s! { waiters: [*mut ::c_void; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_spinlock_t { lock: u32, } @@ -311,6 +324,7 @@ s! { pub pw_gecos: *mut ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -350,18 +364,21 @@ s! { sa_userdata: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { pub type_: i32, pub named_sem_id: i32, // actually a union with unnamed_sem (i32) pub padding: [i32; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ucred { pub pid: ::pid_t, pub uid: ::uid_t, pub gid: ::gid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_dl { pub sdl_len: u8, pub sdl_family: u8, @@ -397,11 +414,13 @@ s! { __bitfield: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct regmatch_t { pub rm_so: regoff_t, pub rm_eo: regoff_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_qnum: ::msgqnum_t, @@ -413,6 +432,7 @@ s! { pub msg_ctime: ::time_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub key: ::key_t, pub uid: ::uid_t, @@ -422,6 +442,7 @@ s! { pub mode: ::mode_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sembuf { pub sem_num: ::c_ushort, pub sem_op: ::c_short, @@ -455,11 +476,13 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_un { pub sun_len: u8, pub sun_family: sa_family_t, pub sun_path: [::c_char; 126] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_storage { pub ss_len: u8, pub ss_family: sa_family_t, @@ -467,6 +490,7 @@ s_no_extra_traits! { __ss_pad2: u64, __ss_pad3: [u8; 112], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_dev: dev_t, pub d_pdev: dev_t, @@ -484,6 +508,7 @@ s_no_extra_traits! { pub sigev_notify_attributes: *mut ::pthread_attr_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmpx { pub ut_type: ::c_short, pub ut_tv: ::timeval, diff --git a/src/unix/haiku/native.rs b/src/unix/haiku/native.rs index 44bcc1e3b75f4..4f75a4cb274e0 100644 --- a/src/unix/haiku/native.rs +++ b/src/unix/haiku/native.rs @@ -215,6 +215,7 @@ s! { pub address: *mut ::c_void } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct port_info { pub port: port_id, pub team: team_id, @@ -224,6 +225,7 @@ s! { pub total_count: i32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct port_message_info { pub size: ::size_t, pub sender: ::uid_t, @@ -231,6 +233,7 @@ s! { pub sender_team: ::team_id } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct team_info { pub team: team_id, pub thread_count: i32, @@ -244,6 +247,7 @@ s! { pub gid: ::gid_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_info { pub sem: sem_id, pub team: team_id, @@ -252,6 +256,7 @@ s! { pub latest_holder: thread_id } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct team_usage_info { pub user_time: bigtime_t, pub kernel_time: bigtime_t @@ -270,12 +275,14 @@ s! { pub stack_end: *mut ::c_void } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpu_info { pub active_time: bigtime_t, pub enabled: bool, pub current_frequency: u64 } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct system_info { pub boot_time: bigtime_t, pub cpu_count: u32, @@ -304,6 +311,7 @@ s! { pub abi: u32 } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct object_wait_info { pub object: i32, pub type_: u16, @@ -311,12 +319,14 @@ s! { } // kernel/fs_attr.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct attr_info { pub type_: u32, pub size: ::off_t } // kernel/fs_index.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct index_info { pub type_: u32, pub size: ::off_t, @@ -327,6 +337,7 @@ s! { } //kernel/fs_info.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fs_info { pub dev: ::dev_t, pub root: ::ino_t, @@ -361,11 +372,13 @@ s! { pub abi: i32 } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_eax_0 { pub max_eax: u32, pub vendor_id: [::c_char; 12], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_eax_1 { pub stepping: u32, pub model: u32, @@ -383,17 +396,20 @@ s! { pub extended_features: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_eax_2 { pub call_num: u8, pub cache_descriptors: [u8; 15], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_eax_3 { __reserved: [u32; 2], pub serial_number_high: u32, pub serial_number_low: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_regs { pub eax: u32, pub ebx: u32, diff --git a/src/unix/haiku/x86_64.rs b/src/unix/haiku/x86_64.rs index 1b0462f204632..961a4656ca875 100644 --- a/src/unix/haiku/x86_64.rs +++ b/src/unix/haiku/x86_64.rs @@ -1,4 +1,5 @@ s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fpu_state { pub control: ::c_ushort, pub status: ::c_ushort, @@ -13,18 +14,21 @@ s_no_extra_traits! { pub _reserved_416_511: [::c_uchar; 96], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct xstate_hdr { pub bv: ::c_ulong, pub xcomp_bv: ::c_ulong, pub _reserved: [::c_uchar; 48], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct savefpu { pub fp_fxsave: fpu_state, pub fp_xstate: xstate_hdr, pub _fp_ymm: [[::c_uchar; 16]; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub rax: ::c_ulong, pub rbx: ::c_ulong, diff --git a/src/unix/hurd/b32.rs b/src/unix/hurd/b32.rs index 7e83ed93000ed..c0a83654941bd 100644 --- a/src/unix/hurd/b32.rs +++ b/src/unix/hurd/b32.rs @@ -39,6 +39,7 @@ pub type Elf_Shdr = ::Elf32_Shdr; pub type Elf_Sym = ::Elf32_Sym; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Ehdr { pub e_ident: [::c_uchar; 16], pub e_type: Elf32_Half, @@ -56,6 +57,7 @@ s! { pub e_shstrndx: Elf32_Half, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Shdr { pub sh_name: Elf32_Word, pub sh_type: Elf32_Word, @@ -69,6 +71,7 @@ s! { pub sh_entsize: Elf32_Word, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Sym { pub st_name: Elf32_Word, pub st_value: Elf32_Addr, @@ -78,6 +81,7 @@ s! { pub st_shndx: Elf32_Section, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Phdr { pub p_type: ::Elf32_Word, pub p_offset: ::Elf32_Off, diff --git a/src/unix/hurd/b64.rs b/src/unix/hurd/b64.rs index 3b171f1045925..723df46030c7f 100644 --- a/src/unix/hurd/b64.rs +++ b/src/unix/hurd/b64.rs @@ -41,6 +41,7 @@ pub type Elf_Shdr = ::Elf64_Shdr; pub type Elf_Sym = ::Elf64_Sym; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Ehdr { pub e_ident: [::c_uchar; 16], pub e_type: Elf64_Half, @@ -58,6 +59,7 @@ s! { pub e_shstrndx: Elf64_Half, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Shdr { pub sh_name: Elf64_Word, pub sh_type: Elf64_Word, @@ -71,6 +73,7 @@ s! { pub sh_entsize: Elf64_Xword, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Sym { pub st_name: Elf64_Word, pub st_info: ::c_uchar, @@ -80,6 +83,7 @@ s! { pub st_size: Elf64_Xword, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Phdr { pub p_type: ::Elf64_Word, pub p_flags: ::Elf64_Word, diff --git a/src/unix/hurd/mod.rs b/src/unix/hurd/mod.rs index 05d75851d9e8f..3918d7bdb708a 100644 --- a/src/unix/hurd/mod.rs +++ b/src/unix/hurd/mod.rs @@ -217,27 +217,32 @@ pub type idtype_t = ::c_uint; // structs s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq { pub imr_multiaddr: in_addr, pub imr_interface: in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreqn { pub imr_multiaddr: in_addr, pub imr_address: in_addr, pub imr_ifindex: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr { pub sa_len: ::c_uchar, pub sa_family: sa_family_t, pub sa_data: [::c_char; 14usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_addr { pub s_addr: in_addr_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in { pub sin_len: ::c_uchar, pub sin_family: sa_family_t, @@ -246,6 +251,7 @@ s! { pub sin_zero: [::c_uchar; 8usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in6 { pub sin6_len: ::c_uchar, pub sin6_family: sa_family_t, @@ -255,12 +261,14 @@ s! { pub sin6_scope_id: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_un { pub sun_len: ::c_uchar, pub sun_family: sa_family_t, pub sun_path: [::c_char; 108usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_storage { pub ss_len: ::c_uchar, pub ss_family: sa_family_t, @@ -268,35 +276,44 @@ s! { pub __ss_align: __uint32_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_at { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_ax25 { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_x25 { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_dl { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_eon { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_inarp { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_ipx { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_iso { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_ns { pub _address: u8, } @@ -322,6 +339,7 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_ino: __ino_t, pub d_reclen: ::c_ushort, @@ -330,6 +348,7 @@ s! { pub d_name: [::c_char; 1usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent64 { pub d_ino: __ino64_t, pub d_reclen: ::c_ushort, @@ -338,10 +357,12 @@ s! { pub d_name: [::c_char; 1usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fd_set { pub fds_bits: [__fd_mask; 8usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: tcflag_t, pub c_oflag: tcflag_t, @@ -352,6 +373,7 @@ s! { pub __ospeed: speed_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigaction { pub sa_sigaction: ::sighandler_t, pub sa_mask: __sigset_t, @@ -378,15 +400,18 @@ s! { pub si_value: ::sigval, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct timespec { pub tv_sec: __time_t, pub tv_nsec: __syscall_slong_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __locale_data { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_fstype: ::c_int, pub st_fsid: __fsid_t, @@ -408,6 +433,7 @@ s! { pub st_spare: [::c_int; 11usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_fstype: ::c_int, pub st_fsid: __fsid_t, @@ -429,6 +455,7 @@ s! { pub st_spare: [::c_int; 8usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_uint, pub f_bsize: ::c_ulong, @@ -445,6 +472,7 @@ s! { pub f_spare: [::c_uint; 3usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_uint, pub f_bsize: ::c_ulong, @@ -461,6 +489,7 @@ s! { pub f_spare: [::c_uint ; 3usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub __f_type: ::c_uint, pub f_bsize: ::c_ulong, @@ -477,6 +506,7 @@ s! { pub f_spare: [::c_uint; 3usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub __f_type: ::c_uint, pub f_bsize: ::c_ulong, @@ -493,6 +523,7 @@ s! { pub f_spare: [::c_uint; 3usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(target_pointer_width = "32", repr(align(4)))] #[cfg_attr(target_pointer_width = "64", @@ -501,16 +532,19 @@ s! { __size: [::c_char; 20usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __pthread { pub _address: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __pthread_mutexattr { pub __prioceiling: ::c_int, pub __protocol: __pthread_mutex_protocol, pub __pshared: __pthread_process_shared, pub __mutex_type: __pthread_mutex_type, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __pthread_mutex { pub __lock: ::c_uint, pub __owner_id: ::c_uint, @@ -522,19 +556,23 @@ s! { pub __reserved2: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __pthread_condattr { pub __pshared: __pthread_process_shared, pub __clock: __clockid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __pthread_rwlockattr { pub __pshared: __pthread_process_shared, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __pthread_barrierattr { pub __pshared: __pthread_process_shared, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __pthread_once { pub __run: ::c_int, pub __lock: __pthread_spinlock_t, @@ -578,10 +616,12 @@ s! { pub __data: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _IO_FILE { _unused: [u8; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __sched_param { pub __sched_priority: ::c_int, } @@ -657,6 +697,7 @@ s! { pub __names: [*const ::c_char; 13usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utsname { pub sysname: [::c_char; 65], pub nodename: [::c_char; 65], @@ -666,6 +707,7 @@ s! { pub domainname: [::c_char; 65] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rlimit64 { pub rlim_cur: rlim64_t, pub rlim_max: rlim64_t, diff --git a/src/unix/linux_like/android/b32/arm.rs b/src/unix/linux_like/android/b32/arm.rs index a062175eef746..cebd100948e59 100644 --- a/src/unix/linux_like/android/b32/arm.rs +++ b/src/unix/linux_like/android/b32/arm.rs @@ -4,6 +4,7 @@ pub type greg_t = i32; pub type mcontext_t = sigcontext; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigcontext { pub trap_no: ::c_ulong, pub error_code: ::c_ulong, @@ -32,6 +33,7 @@ s! { cfg_if! { if #[cfg(libc_union)] { s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_uc_sigmask_with_padding { pub uc_sigmask: ::sigset_t, /* Android has a wrong (smaller) sigset_t on x86. */ diff --git a/src/unix/linux_like/android/b32/mod.rs b/src/unix/linux_like/android/b32/mod.rs index 1f4f796f2a94a..c2d28d5122aad 100644 --- a/src/unix/linux_like/android/b32/mod.rs +++ b/src/unix/linux_like/android/b32/mod.rs @@ -18,11 +18,13 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rlimit64 { pub rlim_cur: u64, pub rlim_max: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::c_ulonglong, __pad0: [::c_uchar; 4], @@ -45,6 +47,7 @@ s! { pub st_ino: ::c_ulonglong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::c_ulonglong, __pad0: [::c_uchar; 4], @@ -67,6 +70,7 @@ s! { pub st_ino: ::c_ulonglong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: u32, pub f_bsize: u32, @@ -82,6 +86,7 @@ s! { pub f_spare: [u32; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -105,10 +110,13 @@ s! { pub sched_priority: i32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutex_t { value: ::c_int } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_cond_t { value: ::c_int } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlock_t { lock: pthread_mutex_t, cond: pthread_cond_t, @@ -120,10 +128,12 @@ s! { __reserved: [::c_char; 12], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_barrier_t { __private: [i32; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_spinlock_t { __private: [i32; 2], } @@ -137,6 +147,7 @@ s! { pub pw_shell: *mut ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: u32, pub f_bsize: u32, @@ -152,6 +163,7 @@ s! { pub f_spare: [u32; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { pub uptime: ::c_long, pub loads: [::c_ulong; 3], @@ -171,6 +183,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset64_t { __bits: [::c_ulong; 2] } diff --git a/src/unix/linux_like/android/b32/x86/align.rs b/src/unix/linux_like/android/b32/x86/align.rs index 04df4a05d19b7..0b99683a5b212 100644 --- a/src/unix/linux_like/android/b32/x86/align.rs +++ b/src/unix/linux_like/android/b32/x86/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct max_align_t { priv_: [f64; 2] diff --git a/src/unix/linux_like/android/b32/x86/mod.rs b/src/unix/linux_like/android/b32/x86/mod.rs index e549f3b5168e6..da47b9bb5c531 100644 --- a/src/unix/linux_like/android/b32/x86/mod.rs +++ b/src/unix/linux_like/android/b32/x86/mod.rs @@ -3,11 +3,13 @@ pub type wchar_t = i32; pub type greg_t = i32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _libc_fpreg { pub significand: [u16; 4], pub exponent: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _libc_fpstate { pub cw: ::c_ulong, pub sw: ::c_ulong, @@ -31,6 +33,7 @@ s! { cfg_if! { if #[cfg(libc_union)] { s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_uc_sigmask_with_padding { pub uc_sigmask: ::sigset_t, /* Android has a wrong (smaller) sigset_t on x86. */ diff --git a/src/unix/linux_like/android/b64/aarch64/align.rs b/src/unix/linux_like/android/b64/aarch64/align.rs index 154c2c54ce6de..c0718ac26aff3 100644 --- a/src/unix/linux_like/android/b64/aarch64/align.rs +++ b/src/unix/linux_like/android/b64/aarch64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f32; 8] @@ -15,6 +16,7 @@ s! { pub uc_mcontext: mcontext_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct mcontext_t { pub fault_address: ::c_ulonglong, diff --git a/src/unix/linux_like/android/b64/aarch64/int128.rs b/src/unix/linux_like/android/b64/aarch64/int128.rs index 4535e73eeddf1..946b868b50f83 100644 --- a/src/unix/linux_like/android/b64/aarch64/int128.rs +++ b/src/unix/linux_like/android/b64/aarch64/int128.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_fpsimd_struct { pub vregs: [::__uint128_t; 32], pub fpsr: u32, diff --git a/src/unix/linux_like/android/b64/aarch64/mod.rs b/src/unix/linux_like/android/b64/aarch64/mod.rs index ac67fddabecd4..1fe7cf2f23ea2 100644 --- a/src/unix/linux_like/android/b64/aarch64/mod.rs +++ b/src/unix/linux_like/android/b64/aarch64/mod.rs @@ -3,6 +3,7 @@ pub type wchar_t = u32; pub type __u64 = ::c_ulonglong; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -26,6 +27,7 @@ s! { __unused5: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -49,6 +51,7 @@ s! { __unused5: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub regs: [u64; 31], pub sp: u64, diff --git a/src/unix/linux_like/android/b64/mod.rs b/src/unix/linux_like/android/b64/mod.rs index 67d0dacf17e93..9768dd28ceaa6 100644 --- a/src/unix/linux_like/android/b64/mod.rs +++ b/src/unix/linux_like/android/b64/mod.rs @@ -8,6 +8,7 @@ pub type off64_t = i64; pub type socklen_t = u32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { __val: [::c_ulong; 1], } @@ -19,6 +20,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rlimit64 { pub rlim_cur: ::c_ulonglong, pub rlim_max: ::c_ulonglong, @@ -44,6 +46,7 @@ s! { pub pw_shell: *mut ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: u64, pub f_bsize: u64, @@ -59,6 +62,7 @@ s! { pub f_spare: [u64; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { pub uptime: ::c_long, pub loads: [::c_ulong; 3], @@ -76,6 +80,7 @@ s! { pub _f: [::c_char; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: u64, pub f_bsize: u64, @@ -91,6 +96,7 @@ s! { pub f_spare: [u64; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -106,26 +112,31 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_barrier_t { __private: [i64; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_spinlock_t { __private: i64, } } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutex_t { value: ::c_int, __reserved: [::c_char; 36], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_cond_t { value: ::c_int, __reserved: [::c_char; 44], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlock_t { numLocks: ::c_int, writerThreadId: ::c_int, @@ -135,6 +146,7 @@ s_no_extra_traits! { __reserved: [::c_char; 36], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset64_t { __bits: [::c_ulong; 1] } diff --git a/src/unix/linux_like/android/b64/riscv64/align.rs b/src/unix/linux_like/android/b64/riscv64/align.rs index 8e949963a637f..34e6390b3f855 100644 --- a/src/unix/linux_like/android/b64/riscv64/align.rs +++ b/src/unix/linux_like/android/b64/riscv64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f32; 8] diff --git a/src/unix/linux_like/android/b64/riscv64/mod.rs b/src/unix/linux_like/android/b64/riscv64/mod.rs index 9d414dc15fb39..46ff3c6515ad9 100644 --- a/src/unix/linux_like/android/b64/riscv64/mod.rs +++ b/src/unix/linux_like/android/b64/riscv64/mod.rs @@ -4,6 +4,7 @@ pub type greg_t = i64; pub type __u64 = ::c_ulonglong; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -27,6 +28,7 @@ s! { __unused5: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino_t, diff --git a/src/unix/linux_like/android/b64/x86_64/align.rs b/src/unix/linux_like/android/b64/x86_64/align.rs index 7ca870fd02b71..3771ac4ee7c61 100644 --- a/src/unix/linux_like/android/b64/x86_64/align.rs +++ b/src/unix/linux_like/android/b64/x86_64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 4] diff --git a/src/unix/linux_like/android/b64/x86_64/mod.rs b/src/unix/linux_like/android/b64/x86_64/mod.rs index be6b5011c21cc..928284b4bbd71 100644 --- a/src/unix/linux_like/android/b64/x86_64/mod.rs +++ b/src/unix/linux_like/android/b64/x86_64/mod.rs @@ -4,6 +4,7 @@ pub type greg_t = i64; pub type __u64 = ::c_ulonglong; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -24,6 +25,7 @@ s! { __unused: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -44,10 +46,12 @@ s! { __unused: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _libc_xmmreg { pub element: [u32; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub r15: ::c_ulong, pub r14: ::c_ulong, diff --git a/src/unix/linux_like/android/mod.rs b/src/unix/linux_like/android/mod.rs index beffc8c0969d0..59b20bf0aae9d 100644 --- a/src/unix/linux_like/android/mod.rs +++ b/src/unix/linux_like/android/mod.rs @@ -53,6 +53,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __fsid_t { __val: [::c_int; 2], } @@ -67,12 +68,14 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::size_t, pub cmsg_level: ::c_int, pub cmsg_type: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -82,6 +85,7 @@ s! { pub c_cc: [::cc_t; ::NCCS], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios2 { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -93,6 +97,7 @@ s! { pub c_ospeed: ::speed_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mallinfo { pub arena: ::size_t, pub ordblks: ::size_t, @@ -106,6 +111,7 @@ s! { pub keepcost: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -114,6 +120,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -122,6 +129,7 @@ s! { pub l_pid: ::__kernel_pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpu_set_t { #[cfg(target_pointer_width = "64")] __bits: [__CPU_BITTYPE; 16], @@ -129,17 +137,20 @@ s! { __bits: [__CPU_BITTYPE; 1], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { count: ::c_uint, #[cfg(target_pointer_width = "64")] __reserved: [::c_int; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct exit_status { pub e_termination: ::c_short, pub e_exit: ::c_short, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -156,6 +167,7 @@ s! { __f_reserved: [u32; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct signalfd_siginfo { pub ssi_signo: u32, pub ssi_errno: i32, @@ -181,23 +193,27 @@ s! { _pad: [u8; 28], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct itimerspec { pub it_interval: ::timespec, pub it_value: ::timespec, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ucred { pub pid: ::pid_t, pub uid: ::uid_t, pub gid: ::gid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct genlmsghdr { pub cmd: u8, pub version: u8, pub reserved: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nlmsghdr { pub nlmsg_len: u32, pub nlmsg_type: u16, @@ -206,15 +222,18 @@ s! { pub nlmsg_pid: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nlmsgerr { pub error: ::c_int, pub msg: nlmsghdr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nl_pktinfo { pub group: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nl_mmap_req { pub nm_block_size: ::c_uint, pub nm_block_nr: ::c_uint, @@ -222,6 +241,7 @@ s! { pub nm_frame_nr: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nl_mmap_hdr { pub nm_status: ::c_uint, pub nm_len: ::c_uint, @@ -231,16 +251,19 @@ s! { pub nm_gid: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nlattr { pub nla_len: u16, pub nla_type: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in6_pktinfo { pub ipi6_addr: ::in6_addr, pub ipi6_ifindex: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct inotify_event { pub wd: ::c_int, pub mask: u32, @@ -248,6 +271,7 @@ s! { pub len: u32 } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sock_extended_err { pub ee_errno: u32, pub ee_origin: u8, @@ -265,11 +289,13 @@ s! { re_guts: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct regmatch_t { pub rm_so: ::ssize_t, pub rm_eo: ::ssize_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_vm { pub svm_family: ::sa_family_t, pub svm_reserved1: ::c_ushort, @@ -280,6 +306,7 @@ s! { // linux/elf.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Phdr { pub p_type: Elf32_Word, pub p_offset: Elf32_Off, @@ -291,6 +318,7 @@ s! { pub p_align: Elf32_Word, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Phdr { pub p_type: Elf64_Word, pub p_flags: Elf64_Word, @@ -330,6 +358,7 @@ s! { } // linux/filter.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sock_filter { pub code: ::__u16, pub jt: ::__u8, @@ -343,6 +372,7 @@ s! { } // linux/seccomp.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct seccomp_data { pub nr: ::c_int, pub arch: ::__u32, @@ -350,11 +380,13 @@ s! { pub args: [::__u64; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct seccomp_metadata { pub filter_off: ::__u64, pub flags: ::__u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_peeksiginfo_args { pub off: ::__u64, pub flags: ::__u32, @@ -362,6 +394,7 @@ s! { } // linux/input.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_event { pub time: ::timeval, pub type_: ::__u16, @@ -369,6 +402,7 @@ s! { pub value: ::__s32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_id { pub bustype: ::__u16, pub vendor: ::__u16, @@ -376,6 +410,7 @@ s! { pub version: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_absinfo { pub value: ::__s32, pub minimum: ::__s32, @@ -385,6 +420,7 @@ s! { pub resolution: ::__s32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_keymap_entry { pub flags: ::__u8, pub len: ::__u8, @@ -393,22 +429,26 @@ s! { pub scancode: [::__u8; 32], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_mask { pub type_: ::__u32, pub codes_size: ::__u32, pub codes_ptr: ::__u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_replay { pub length: ::__u16, pub delay: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_trigger { pub button: ::__u16, pub interval: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_envelope { pub attack_length: ::__u16, pub attack_level: ::__u16, @@ -416,17 +456,20 @@ s! { pub fade_level: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_constant_effect { pub level: ::__s16, pub envelope: ff_envelope, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_ramp_effect { pub start_level: ::__s16, pub end_level: ::__s16, pub envelope: ff_envelope, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_condition_effect { pub right_saturation: ::__u16, pub left_saturation: ::__u16, @@ -451,11 +494,13 @@ s! { pub custom_data: *mut ::__s16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_rumble_effect { pub strong_magnitude: ::__u16, pub weak_magnitude: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_effect { pub type_: ::__u16, pub id: ::__s16, @@ -470,6 +515,7 @@ s! { } // linux/uinput.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_ff_upload { pub request_id: ::__u32, pub retval: ::__s32, @@ -477,12 +523,14 @@ s! { pub old: ff_effect, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_ff_erase { pub request_id: ::__u32, pub retval: ::__s32, pub effect_id: ::__u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_abs_setup { pub code: ::__u16, pub absinfo: input_absinfo, @@ -497,6 +545,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_nl { pub nl_family: ::sa_family_t, nl_pad: ::c_ushort, @@ -504,6 +553,7 @@ s_no_extra_traits! { pub nl_groups: u32 } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_ino: u64, pub d_off: i64, @@ -512,6 +562,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent64 { pub d_ino: u64, pub d_off: i64, @@ -520,6 +571,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -528,12 +580,14 @@ s_no_extra_traits! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct lastlog { ll_time: ::time_t, ll_line: [::c_char; UT_LINESIZE], ll_host: [::c_char; UT_HOSTSIZE], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmp { pub ut_type: ::c_short, pub ut_pid: ::pid_t, @@ -548,6 +602,7 @@ s_no_extra_traits! { unused: [::c_char; 20], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_alg { pub salg_family: ::sa_family_t, pub salg_type: [::c_uchar; 14], @@ -556,12 +611,14 @@ s_no_extra_traits! { pub salg_name: [::c_uchar; 64], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_setup { pub id: input_id, pub name: [::c_char; UINPUT_MAX_NAME_SIZE], pub ff_effects_max: ::__u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_user_dev { pub name: [::c_char; UINPUT_MAX_NAME_SIZE], pub id: input_id, @@ -579,11 +636,13 @@ s_no_extra_traits! { removed in the future", since = "0.2.80" )] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct af_alg_iv { pub ivlen: u32, pub iv: [::c_uchar; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct prop_info { __name: [::c_char; 32], __serial: ::c_uint, diff --git a/src/unix/linux_like/emscripten/align.rs b/src/unix/linux_like/emscripten/align.rs index b9ea3f39efdf5..6b91c6ff0b690 100644 --- a/src/unix/linux_like/emscripten/align.rs +++ b/src/unix/linux_like/emscripten/align.rs @@ -2,26 +2,31 @@ macro_rules! expand_align { () => { s! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(4))] pub struct pthread_mutex_t { size: [u8; ::__SIZEOF_PTHREAD_MUTEX_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(4))] pub struct pthread_rwlock_t { size: [u8; ::__SIZEOF_PTHREAD_RWLOCK_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(4))] pub struct pthread_mutexattr_t { size: [u8; ::__SIZEOF_PTHREAD_MUTEXATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(4))] pub struct pthread_rwlockattr_t { size: [u8; ::__SIZEOF_PTHREAD_RWLOCKATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(4))] pub struct pthread_condattr_t { size: [u8; ::__SIZEOF_PTHREAD_CONDATTR_T], @@ -29,6 +34,7 @@ macro_rules! expand_align { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(target_pointer_width = "32", repr(align(4)))] #[cfg_attr(target_pointer_width = "64", @@ -38,6 +44,7 @@ macro_rules! expand_align { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 4] diff --git a/src/unix/linux_like/emscripten/mod.rs b/src/unix/linux_like/emscripten/mod.rs index 1c9e4e6f5b178..8d03baa3a4b24 100644 --- a/src/unix/linux_like/emscripten/mod.rs +++ b/src/unix/linux_like/emscripten/mod.rs @@ -87,6 +87,7 @@ s! { pub sp_flag: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -103,6 +104,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dqblk { pub dqb_bhardlimit: u64, pub dqb_bsoftlimit: u64, @@ -115,6 +117,7 @@ s! { pub dqb_valid: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct signalfd_siginfo { pub ssi_signo: u32, pub ssi_errno: i32, @@ -140,10 +143,12 @@ s! { _pad: [u8; 28], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fsid_t { __val: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpu_set_t { bits: [u32; 32], } @@ -154,6 +159,7 @@ s! { } // System V IPC + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msginfo { pub msgpool: ::c_int, pub msgmap: ::c_int, @@ -165,6 +171,7 @@ s! { pub msgseg: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sembuf { pub sem_num: ::c_ushort, pub sem_op: ::c_short, @@ -195,6 +202,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, @@ -207,6 +215,7 @@ s! { __unused2: ::c_long } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -218,6 +227,7 @@ s! { pub __c_ospeed: ::speed_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -226,10 +236,12 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [u32; 11] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { __val: [::c_ulong; 32], } @@ -244,15 +256,18 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::socklen_t, pub cmsg_level: ::c_int, pub cmsg_type: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { __val: [::c_int; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, #[cfg(not(emscripten_new_stat_abi))] @@ -284,6 +299,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -300,6 +316,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -317,6 +334,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -332,6 +350,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -340,6 +359,7 @@ s! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct arpd_request { pub req: ::c_ushort, pub ip: u32, @@ -351,6 +371,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_ino: ::ino_t, pub d_off: ::off_t, @@ -359,6 +380,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { pub uptime: ::c_ulong, pub loads: [::c_ulong; 3], @@ -376,6 +398,7 @@ s_no_extra_traits! { pub __reserved: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mq_attr { pub mq_flags: ::c_long, pub mq_maxmsg: ::c_long, diff --git a/src/unix/linux_like/emscripten/no_align.rs b/src/unix/linux_like/emscripten/no_align.rs index 768dc73a434f6..65433e2b06ff8 100644 --- a/src/unix/linux_like/emscripten/no_align.rs +++ b/src/unix/linux_like/emscripten/no_align.rs @@ -1,26 +1,31 @@ macro_rules! expand_align { () => { s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutex_t { __align: [::c_long; 0], size: [u8; ::__SIZEOF_PTHREAD_MUTEX_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlock_t { __align: [::c_long; 0], size: [u8; ::__SIZEOF_PTHREAD_RWLOCK_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutexattr_t { __align: [::c_int; 0], size: [u8; ::__SIZEOF_PTHREAD_MUTEXATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlockattr_t { __align: [::c_int; 0], size: [u8; ::__SIZEOF_PTHREAD_RWLOCKATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_condattr_t { __align: [::c_int; 0], size: [u8; ::__SIZEOF_PTHREAD_CONDATTR_T], diff --git a/src/unix/linux_like/linux/align.rs b/src/unix/linux_like/linux/align.rs index 1036e23dc8f09..11e40333baebb 100644 --- a/src/unix/linux_like/linux/align.rs +++ b/src/unix/linux_like/linux/align.rs @@ -1,6 +1,7 @@ macro_rules! expand_align { () => { s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(any(target_pointer_width = "32", target_arch = "x86_64", target_arch = "powerpc64", @@ -30,6 +31,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_MUTEXATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(any(target_env = "musl", target_env = "ohos", target_pointer_width = "32"), repr(align(4)))] #[cfg_attr(all(not(target_env = "musl"), @@ -41,18 +43,21 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_RWLOCKATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(4))] pub struct pthread_condattr_t { #[doc(hidden)] size: [u8; ::__SIZEOF_PTHREAD_CONDATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(4))] pub struct pthread_barrierattr_t { #[doc(hidden)] size: [u8; ::__SIZEOF_PTHREAD_BARRIERATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct fanotify_event_metadata { pub event_len: __u32, @@ -66,6 +71,7 @@ macro_rules! expand_align { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(all(any(target_env = "musl", target_env = "ohos"), target_pointer_width = "32"), repr(align(4)))] @@ -83,6 +89,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_COND_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(all(target_pointer_width = "32", any(target_arch = "mips", target_arch = "mips32r6", @@ -112,6 +119,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_MUTEX_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(all(target_pointer_width = "32", any(target_arch = "mips", target_arch = "mips32r6", @@ -139,6 +147,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_RWLOCK_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(all(target_pointer_width = "32", any(target_arch = "mips", target_arch = "mips32r6", @@ -168,6 +177,7 @@ macro_rules! expand_align { } // linux/can.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] #[allow(missing_debug_implementations)] pub struct can_frame { @@ -179,6 +189,7 @@ macro_rules! expand_align { pub data: [u8; CAN_MAX_DLEN], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] #[allow(missing_debug_implementations)] pub struct canfd_frame { @@ -190,6 +201,7 @@ macro_rules! expand_align { pub data: [u8; CANFD_MAX_DLEN], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] #[allow(missing_debug_implementations)] pub struct canxl_frame { diff --git a/src/unix/linux_like/linux/arch/generic/mod.rs b/src/unix/linux_like/linux/arch/generic/mod.rs index 10e1fcca630dd..b02c01ac12922 100644 --- a/src/unix/linux_like/linux/arch/generic/mod.rs +++ b/src/unix/linux_like/linux/arch/generic/mod.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios2 { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, diff --git a/src/unix/linux_like/linux/arch/mips/mod.rs b/src/unix/linux_like/linux/arch/mips/mod.rs index 6c0aecf8cbac3..0f801f98d8ed9 100644 --- a/src/unix/linux_like/linux/arch/mips/mod.rs +++ b/src/unix/linux_like/linux/arch/mips/mod.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios2 { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, diff --git a/src/unix/linux_like/linux/arch/sparc/mod.rs b/src/unix/linux_like/linux/arch/sparc/mod.rs index c7813aa46be61..a5a0a072cfd19 100644 --- a/src/unix/linux_like/linux/arch/sparc/mod.rs +++ b/src/unix/linux_like/linux/arch/sparc/mod.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios2 { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, diff --git a/src/unix/linux_like/linux/gnu/align.rs b/src/unix/linux_like/linux/gnu/align.rs index 4a0e07460ebb1..7320f6da4e20c 100644 --- a/src/unix/linux_like/linux/gnu/align.rs +++ b/src/unix/linux_like/linux/gnu/align.rs @@ -1,5 +1,6 @@ s! { // FIXME this is actually a union + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(target_pointer_width = "32", repr(align(4)))] #[cfg_attr(target_pointer_width = "64", diff --git a/src/unix/linux_like/linux/gnu/b32/arm/align.rs b/src/unix/linux_like/linux/gnu/b32/arm/align.rs index 2645ec4c3d4f1..bab45051bf42d 100644 --- a/src/unix/linux_like/linux/gnu/b32/arm/align.rs +++ b/src/unix/linux_like/linux/gnu/b32/arm/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct max_align_t { priv_: [i64; 2] diff --git a/src/unix/linux_like/linux/gnu/b32/arm/mod.rs b/src/unix/linux_like/linux/gnu/b32/arm/mod.rs index 9b3a2ff861731..2434b7fc6f5b0 100644 --- a/src/unix/linux_like/linux/gnu/b32/arm/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/arm/mod.rs @@ -9,6 +9,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -25,6 +26,7 @@ s! { f_spare: [::__fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -33,6 +35,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -41,6 +44,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -55,6 +59,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, __pad1: ::c_uint, @@ -77,6 +82,7 @@ s! { pub st_ino: ::ino64_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -92,6 +98,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -108,6 +115,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -124,6 +132,7 @@ s! { __unused5: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -141,6 +150,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -162,12 +172,14 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct seccomp_notif_sizes { pub seccomp_notif: ::__u16, pub seccomp_notif_resp: ::__u16, pub seccomp_data: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub trap_no: ::c_ulong, pub error_code: ::c_ulong, @@ -192,6 +204,7 @@ s! { pub fault_address: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs { pub arm_r0: ::c_ulong, pub arm_r1: ::c_ulong, diff --git a/src/unix/linux_like/linux/gnu/b32/csky/align.rs b/src/unix/linux_like/linux/gnu/b32/csky/align.rs index 825546be90a91..5a469be05751e 100644 --- a/src/unix/linux_like/linux/gnu/b32/csky/align.rs +++ b/src/unix/linux_like/linux/gnu/b32/csky/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct max_align_t { priv_: [i64; 2] diff --git a/src/unix/linux_like/linux/gnu/b32/csky/mod.rs b/src/unix/linux_like/linux/gnu/b32/csky/mod.rs index 9807cea831021..d4149490e5bc4 100644 --- a/src/unix/linux_like/linux/gnu/b32/csky/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/csky/mod.rs @@ -9,6 +9,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -25,6 +26,7 @@ s! { f_spare: [::__fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -33,6 +35,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -41,6 +44,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -55,6 +59,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, __pad1: ::c_uint, @@ -77,6 +82,7 @@ s! { pub st_ino: ::ino64_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -92,6 +98,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -108,6 +115,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -124,6 +132,7 @@ s! { __unused5: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -141,6 +150,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, diff --git a/src/unix/linux_like/linux/gnu/b32/m68k/align.rs b/src/unix/linux_like/linux/gnu/b32/m68k/align.rs index 639394a309e3a..c1ca665c8336f 100644 --- a/src/unix/linux_like/linux/gnu/b32/m68k/align.rs +++ b/src/unix/linux_like/linux/gnu/b32/m68k/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(2))] pub struct max_align_t { priv_: [i8; 20] diff --git a/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs b/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs index 8ca7d3d214094..999f9200e4560 100644 --- a/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs @@ -9,6 +9,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -26,6 +27,7 @@ s! { f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -34,6 +36,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -42,6 +45,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { __key: ::key_t, pub uid: ::uid_t, @@ -55,6 +59,7 @@ s! { __glibc_reserved2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, __pad1: ::c_ushort, @@ -77,6 +82,7 @@ s! { pub st_ino: ::ino64_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -92,6 +98,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -108,6 +115,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -124,6 +132,7 @@ s! { __glibc_reserved6: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -141,6 +150,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_code: ::c_int, diff --git a/src/unix/linux_like/linux/gnu/b32/mips/align.rs b/src/unix/linux_like/linux/gnu/b32/mips/align.rs index 8c228ebab72ce..9a719f3234afe 100644 --- a/src/unix/linux_like/linux/gnu/b32/mips/align.rs +++ b/src/unix/linux_like/linux/gnu/b32/mips/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct max_align_t { priv_: [f32; 4] diff --git a/src/unix/linux_like/linux/gnu/b32/mips/mod.rs b/src/unix/linux_like/linux/gnu/b32/mips/mod.rs index fa2707500dbe4..257873616aecf 100644 --- a/src/unix/linux_like/linux/gnu/b32/mips/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mips/mod.rs @@ -2,6 +2,7 @@ pub type c_char = i8; pub type wchar_t = i32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::c_ulong, st_pad1: [::c_long; 3], @@ -25,6 +26,7 @@ s! { st_pad5: [::c_long; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -40,6 +42,7 @@ s! { f_spare: [::c_long; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -55,6 +58,7 @@ s! { pub f_spare: [::c_long; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -71,6 +75,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigaction { pub sa_flags: ::c_int, pub sa_sigaction: ::sighandler_t, @@ -85,6 +90,7 @@ s! { pub ss_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_code: ::c_int, @@ -92,6 +98,7 @@ s! { pub _pad: [::c_int; 29], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -105,6 +112,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -118,6 +126,7 @@ s! { __unused5: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, #[cfg(target_endian = "big")] @@ -144,6 +153,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, diff --git a/src/unix/linux_like/linux/gnu/b32/mod.rs b/src/unix/linux_like/linux/gnu/b32/mod.rs index d5b11347eb8b7..8c6f96e75003c 100644 --- a/src/unix/linux_like/linux/gnu/b32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mod.rs @@ -42,6 +42,7 @@ cfg_if! { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { #[cfg(not(any(target_arch = "mips", target_arch = "mips32r6")))] pub st_dev: ::dev_t, @@ -90,6 +91,7 @@ s! { st_pad5: [::c_long; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -106,14 +108,17 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [u32; 9] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { __val: [::c_ulong; 32], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { pub uptime: ::c_long, pub loads: [::c_ulong; 3], @@ -135,6 +140,7 @@ s! { pub _f: [::c_char; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct semid_ds { pub sem_perm: ipc_perm, #[cfg(target_arch = "powerpc")] diff --git a/src/unix/linux_like/linux/gnu/b32/powerpc.rs b/src/unix/linux_like/linux/gnu/b32/powerpc.rs index dd5732e0dcc14..cface3fd706bf 100644 --- a/src/unix/linux_like/linux/gnu/b32/powerpc.rs +++ b/src/unix/linux_like/linux/gnu/b32/powerpc.rs @@ -9,6 +9,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -25,6 +26,7 @@ s! { f_spare: [::__fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -33,6 +35,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -41,6 +44,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { __key: ::key_t, pub uid: ::uid_t, @@ -54,6 +58,7 @@ s! { __glibc_reserved2: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -76,6 +81,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -91,6 +97,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -107,6 +114,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, __glibc_reserved1: ::c_uint, @@ -124,6 +132,7 @@ s! { __glibc_reserved6: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, __glibc_reserved1: ::c_uint, @@ -141,6 +150,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, diff --git a/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs b/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs index 48d152a5721ec..1615876ed50ab 100644 --- a/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs +++ b/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs @@ -9,6 +9,7 @@ s_no_extra_traits! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct mcontext_t { pub __gregs: [::c_ulong; 32], @@ -16,6 +17,7 @@ s_no_extra_traits! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub union __riscv_mc_fp_state { pub __f: __riscv_mc_f_ext_state, pub __d: __riscv_mc_d_ext_state, @@ -23,18 +25,21 @@ s_no_extra_traits! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __riscv_mc_f_ext_state { pub __f: [::c_uint; 32], pub __fcsr: ::c_uint, } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __riscv_mc_d_ext_state { pub __f: [::c_ulonglong; 32], pub __fcsr: ::c_uint, } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct __riscv_mc_q_ext_state { pub __f: [::c_ulonglong; 64], diff --git a/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs b/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs index 65b7aaa783559..d9603c85d0553 100644 --- a/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs @@ -4,10 +4,12 @@ pub type c_char = u8; pub type wchar_t = ::c_int; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [::c_ulong; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -22,6 +24,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -44,6 +47,7 @@ s! { __unused: [::c_int; 2usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -66,6 +70,7 @@ s! { __unused: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -81,6 +86,7 @@ s! { pub f_spare: [::c_long; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -96,6 +102,7 @@ s! { pub f_spare: [::c_long; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -111,6 +118,7 @@ s! { pub __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -126,6 +134,7 @@ s! { pub __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -154,6 +163,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -168,6 +178,7 @@ s! { __unused2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -181,6 +192,7 @@ s! { __unused6: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -189,6 +201,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -197,6 +210,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub pc: ::c_ulong, pub ra: ::c_ulong, diff --git a/src/unix/linux_like/linux/gnu/b32/sparc/align.rs b/src/unix/linux_like/linux/gnu/b32/sparc/align.rs index 98fda883cd374..f12b849eb0d17 100644 --- a/src/unix/linux_like/linux/gnu/b32/sparc/align.rs +++ b/src/unix/linux_like/linux/gnu/b32/sparc/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct max_align_t { priv_: [i64; 3] diff --git a/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs b/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs index da9cf29c48668..cd0ae07621ebe 100644 --- a/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs @@ -11,6 +11,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -27,6 +28,7 @@ s! { f_spare: [::__fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -35,6 +37,7 @@ s! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -43,6 +46,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -58,6 +62,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -79,6 +84,7 @@ s! { __unused: [::c_long; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -100,6 +106,7 @@ s! { __reserved: [::c_long; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -115,6 +122,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -130,6 +138,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -145,6 +154,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -159,6 +169,7 @@ s! { __unused2: ::c_ulonglong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, __pad1: ::c_uint, @@ -175,6 +186,7 @@ s! { __reserved2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, __pad1: ::c_uint, diff --git a/src/unix/linux_like/linux/gnu/b32/x86/align.rs b/src/unix/linux_like/linux/gnu/b32/x86/align.rs index 96634749f53b2..5099614e2fa21 100644 --- a/src/unix/linux_like/linux/gnu/b32/x86/align.rs +++ b/src/unix/linux_like/linux/gnu/b32/x86/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 6] diff --git a/src/unix/linux_like/linux/gnu/b32/x86/mod.rs b/src/unix/linux_like/linux/gnu/b32/x86/mod.rs index a3531c141fdb6..c8683a2d7c523 100644 --- a/src/unix/linux_like/linux/gnu/b32/x86/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/x86/mod.rs @@ -10,6 +10,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -26,6 +27,7 @@ s! { f_spare: [::__fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -34,6 +36,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -42,11 +45,13 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _libc_fpreg { pub significand: [u16; 4], pub exponent: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _libc_fpstate { pub cw: ::c_ulong, pub sw: ::c_ulong, @@ -59,6 +64,7 @@ s! { pub status: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_fpregs_struct { pub cwd: ::c_long, pub swd: ::c_long, @@ -70,6 +76,7 @@ s! { pub st_space: [::c_long; 20], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub ebx: ::c_long, pub ecx: ::c_long, @@ -115,6 +122,7 @@ s! { pub cr2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -129,6 +137,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, __pad1: ::c_uint, @@ -151,6 +160,7 @@ s! { pub st_ino: ::ino64_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -166,6 +176,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -182,6 +193,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -198,6 +210,7 @@ s! { __unused5: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -215,6 +228,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -236,6 +250,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct seccomp_notif_sizes { pub seccomp_notif: ::__u16, pub seccomp_notif_resp: ::__u16, @@ -244,6 +259,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_fpxregs_struct { pub cwd: ::c_ushort, pub swd: ::c_ushort, diff --git a/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs b/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs index a035773c716fe..1ef447ebbc195 100644 --- a/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs +++ b/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f32; 8] @@ -15,6 +16,7 @@ s! { pub uc_mcontext: mcontext_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct mcontext_t { pub fault_address: ::c_ulonglong, @@ -27,6 +29,7 @@ s! { __reserved: [[u64; 32]; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct clone_args { pub flags: ::c_ulonglong, diff --git a/src/unix/linux_like/linux/gnu/b64/aarch64/fallback.rs b/src/unix/linux_like/linux/gnu/b64/aarch64/fallback.rs index 398fbb53755c8..efa5e0e75952d 100644 --- a/src/unix/linux_like/linux/gnu/b64/aarch64/fallback.rs +++ b/src/unix/linux_like/linux/gnu/b64/aarch64/fallback.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct user_fpsimd_struct { pub vregs: [[u64; 2]; 32], diff --git a/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs b/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs index 4535e73eeddf1..946b868b50f83 100644 --- a/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs +++ b/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_fpsimd_struct { pub vregs: [::__uint128_t; 32], pub fpsr: u32, diff --git a/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs b/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs index 206283e22f6b2..7a4e286eaa598 100644 --- a/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs @@ -18,6 +18,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -34,6 +35,7 @@ s! { f_spare: [::__fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -42,6 +44,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -50,6 +53,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -72,6 +76,7 @@ s! { __unused: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -94,6 +99,7 @@ s! { __unused: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -109,6 +115,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -124,6 +131,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -139,10 +147,12 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [usize; 8] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub regs: [::c_ulonglong; 31], pub sp: ::c_ulonglong, @@ -150,6 +160,7 @@ s! { pub pstate: ::c_ulonglong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -163,6 +174,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -176,6 +188,7 @@ s! { __unused5: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -197,6 +210,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct seccomp_notif_sizes { pub seccomp_notif: ::__u16, pub seccomp_notif_resp: ::__u16, diff --git a/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs b/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs index dc191f51fdb1c..d260ae75f1e4a 100644 --- a/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs +++ b/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 4] @@ -15,6 +16,7 @@ s! { pub uc_mcontext: mcontext_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct mcontext_t { pub __pc: ::c_ulonglong, @@ -23,6 +25,7 @@ s! { pub __extcontext: [::c_ulonglong; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct clone_args { pub flags: ::c_ulonglong, diff --git a/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs b/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs index 3e1719a76db79..fc4de921fa7c0 100644 --- a/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs @@ -12,6 +12,7 @@ pub type __u64 = ::c_ulonglong; pub type __s64 = ::c_longlong; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -34,6 +35,7 @@ s! { __unused: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -56,6 +58,7 @@ s! { __unused: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -71,7 +74,8 @@ s! { pub f_spare: [::__fsword_t; 4], } - pub struct statfs64 { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] + pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, pub f_blocks: u64, @@ -86,6 +90,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -94,6 +99,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -102,6 +108,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -117,6 +124,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -132,6 +140,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [::c_ulong; 7] } @@ -149,6 +158,7 @@ s! { pub ss_size: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -164,6 +174,7 @@ s! { _align: [u64; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -177,6 +188,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -190,6 +202,7 @@ s! { __unused5: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub regs: [u64; 32], pub orig_a0: u64, @@ -199,6 +212,7 @@ s! { } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_fp_struct { pub fpr: [u64; 32], pub fcc: u64, diff --git a/src/unix/linux_like/linux/gnu/b64/mips64/align.rs b/src/unix/linux_like/linux/gnu/b64/mips64/align.rs index 7ca870fd02b71..3771ac4ee7c61 100644 --- a/src/unix/linux_like/linux/gnu/b64/mips64/align.rs +++ b/src/unix/linux_like/linux/gnu/b64/mips64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 4] diff --git a/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs b/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs index f7b52be805cab..c64d72a78dd9e 100644 --- a/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs @@ -11,6 +11,7 @@ pub type __u64 = ::c_ulong; pub type __s64 = ::c_long; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::c_ulong, st_pad1: [::c_long; 2], @@ -35,6 +36,7 @@ s! { st_pad5: [::c_long; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -50,6 +52,7 @@ s! { f_spare: [::c_long; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -58,6 +61,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -66,6 +70,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::c_ulong, st_pad1: [::c_long; 2], @@ -89,6 +94,7 @@ s! { st_pad5: [::c_long; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -104,6 +110,7 @@ s! { pub f_spare: [::c_long; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -119,6 +126,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -134,6 +142,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [::c_ulong; 7] } @@ -151,6 +160,7 @@ s! { pub ss_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_code: ::c_int, @@ -159,6 +169,7 @@ s! { _pad2: [::c_long; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -172,6 +183,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, diff --git a/src/unix/linux_like/linux/gnu/b64/mod.rs b/src/unix/linux_like/linux/gnu/b64/mod.rs index ff394e33a2136..2d316d2277f8d 100644 --- a/src/unix/linux_like/linux/gnu/b64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mod.rs @@ -27,6 +27,7 @@ cfg_if! { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { #[cfg(target_pointer_width = "32")] __val: [u32; 32], @@ -34,6 +35,7 @@ s! { __val: [u64; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { pub uptime: i64, pub loads: [u64; 3], @@ -51,6 +53,7 @@ s! { pub _f: [::c_char; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -65,6 +68,7 @@ s! { __glibc_reserved5: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct semid_ds { pub sem_perm: ipc_perm, pub sem_otime: ::time_t, diff --git a/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs b/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs index 29d1e1c7b8a55..9585fd7ea6074 100644 --- a/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs +++ b/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [i64; 4] diff --git a/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs b/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs index 3088c25a2646f..f1a466cfcdd18 100644 --- a/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs @@ -22,6 +22,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -38,6 +39,7 @@ s! { f_spare: [::__fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -46,6 +48,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -54,6 +57,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -75,6 +79,7 @@ s! { __unused: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -96,6 +101,7 @@ s! { __reserved: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -111,6 +117,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -126,6 +133,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -141,10 +149,12 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [u64; 7] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -158,6 +168,7 @@ s! { __unused2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_atime: ::time_t, @@ -170,7 +181,8 @@ s! { __unused4: ::c_ulong, __unused5: ::c_ulong } - + + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, diff --git a/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs b/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs index 48d152a5721ec..1615876ed50ab 100644 --- a/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs +++ b/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs @@ -9,6 +9,7 @@ s_no_extra_traits! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct mcontext_t { pub __gregs: [::c_ulong; 32], @@ -16,6 +17,7 @@ s_no_extra_traits! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub union __riscv_mc_fp_state { pub __f: __riscv_mc_f_ext_state, pub __d: __riscv_mc_d_ext_state, @@ -23,18 +25,21 @@ s_no_extra_traits! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __riscv_mc_f_ext_state { pub __f: [::c_uint; 32], pub __fcsr: ::c_uint, } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __riscv_mc_d_ext_state { pub __f: [::c_ulonglong; 32], pub __fcsr: ::c_uint, } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct __riscv_mc_q_ext_state { pub __f: [::c_ulonglong; 64], diff --git a/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs b/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs index 8e06a135baa42..79d3c6e193d40 100644 --- a/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs @@ -14,10 +14,12 @@ pub type __u64 = ::c_ulonglong; pub type __s64 = ::c_longlong; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [::c_ulong; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -40,6 +42,7 @@ s! { __unused: [::c_int; 2usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -62,6 +65,7 @@ s! { __unused: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -77,6 +81,7 @@ s! { pub f_spare: [::c_long; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -92,6 +97,7 @@ s! { pub f_spare: [::c_long; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -107,6 +113,7 @@ s! { pub __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -122,6 +129,7 @@ s! { pub __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -150,6 +158,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -164,6 +173,7 @@ s! { __unused2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -177,6 +187,7 @@ s! { __unused6: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -185,6 +196,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -193,6 +205,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub pc: ::c_ulong, pub ra: ::c_ulong, diff --git a/src/unix/linux_like/linux/gnu/b64/s390x.rs b/src/unix/linux_like/linux/gnu/b64/s390x.rs index 61ee2dcc9b50a..ae28e2d5db670 100644 --- a/src/unix/linux_like/linux/gnu/b64/s390x.rs +++ b/src/unix/linux_like/linux/gnu/b64/s390x.rs @@ -22,6 +22,7 @@ s! { pub sa_mask: ::sigset_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_uint, pub f_bsize: ::c_uint, @@ -37,6 +38,7 @@ s! { f_spare: [::c_uint; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -45,6 +47,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -53,6 +56,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -67,6 +71,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -88,6 +93,7 @@ s! { __glibc_reserved: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -109,10 +115,12 @@ s! { __glibc_reserved: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [::c_ulong; 7] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -126,6 +134,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -139,6 +148,7 @@ s! { __unused5: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -154,17 +164,20 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __psw_t { pub mask: u64, pub addr: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fpregset_t { pub fpc: u32, __pad: u32, pub fprs: [fpreg_t; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub psw: __psw_t, pub gregs: [u64; 16], @@ -180,6 +193,7 @@ s! { pub uc_sigmask: ::sigset_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_uint, pub f_bsize: ::c_uint, @@ -195,6 +209,7 @@ s! { pub f_spare: [::c_uint; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -213,6 +228,7 @@ s! { s_no_extra_traits! { // FIXME: This is actually a union. + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fpreg_t { pub d: ::c_double, // f: ::c_float, diff --git a/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs b/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs index 29d1e1c7b8a55..9585fd7ea6074 100644 --- a/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs +++ b/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [i64; 4] diff --git a/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs b/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs index de2f0d6e470f6..2d8254206923f 100644 --- a/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs @@ -22,6 +22,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -38,6 +39,7 @@ s! { f_spare: [::__fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -53,6 +55,7 @@ s! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -61,6 +64,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -76,6 +80,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, __pad0: u64, @@ -98,6 +103,7 @@ s! { __unused: [::c_long; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, __pad0: u64, @@ -120,6 +126,7 @@ s! { __reserved: [::c_long; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -135,6 +142,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -150,6 +158,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -165,10 +174,12 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [u64; 7] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, diff --git a/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs b/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs index ba3075edd7e36..5dea93864b509 100644 --- a/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs +++ b/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 4] @@ -7,6 +8,7 @@ s_no_extra_traits! { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct clone_args { pub flags: ::c_ulonglong, diff --git a/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs b/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs index 9b2aac5c2ba34..b869b9d8c131a 100644 --- a/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs @@ -19,6 +19,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -35,6 +36,7 @@ s! { f_spare: [::__fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -43,6 +45,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -51,6 +54,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -72,6 +76,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -93,6 +98,7 @@ s! { __unused: [i64; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -114,6 +120,7 @@ s! { __reserved: [i64; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::__fsword_t, pub f_bsize: ::__fsword_t, @@ -129,6 +136,7 @@ s! { pub f_spare: [::__fsword_t; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -144,6 +152,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { #[cfg(target_pointer_width = "32")] __size: [u32; 8], @@ -151,16 +160,19 @@ s! { __size: [u64; 7] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _libc_fpxreg { pub significand: [u16; 4], pub exponent: u16, __private: [u16; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _libc_xmmreg { pub element: [u32; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct _libc_fpstate { pub cwd: u16, pub swd: u16, @@ -175,6 +187,7 @@ s! { __private: [u64; 12], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub r15: ::c_ulonglong, pub r14: ::c_ulonglong, @@ -205,6 +218,7 @@ s! { pub gs: ::c_ulonglong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user { pub regs: user_regs_struct, pub u_fpvalid: ::c_int, @@ -233,6 +247,7 @@ s! { __private: [u64; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -247,6 +262,7 @@ s! { __unused2: u64 } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -260,12 +276,14 @@ s! { __unused5: u64 } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct seccomp_notif_sizes { pub seccomp_notif: ::__u16, pub seccomp_notif_resp: ::__u16, pub seccomp_data: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_rseq_configuration { pub rseq_abi_pointer: ::__u64, pub rseq_abi_size: ::__u32, @@ -276,6 +294,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_fpregs_struct { pub cwd: ::c_ushort, pub swd: ::c_ushort, diff --git a/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs b/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs index 3831dfad9d414..6c4d31fc95544 100644 --- a/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs +++ b/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs @@ -4,6 +4,7 @@ pub type c_long = i64; pub type c_ulong = u64; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, diff --git a/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs b/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs index 06aa0da2d74aa..43800690d68a4 100644 --- a/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs +++ b/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs @@ -4,6 +4,7 @@ pub type c_long = i32; pub type c_ulong = u32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs index 175a49cd6696c..08cf71a374df5 100644 --- a/src/unix/linux_like/linux/gnu/mod.rs +++ b/src/unix/linux_like/linux/gnu/mod.rs @@ -15,6 +15,7 @@ cfg_if! { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statx { pub stx_mask: u32, pub stx_blksize: u32, @@ -42,6 +43,7 @@ s! { __statx_pad3: [u64; 12], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statx_timestamp { pub tv_sec: i64, pub tv_nsec: u32, @@ -66,11 +68,13 @@ s! { __glibc_reserved: [::c_char; 32] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __exit_status { pub e_termination: ::c_short, pub e_exit: ::c_short, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __timeval { pub tv_sec: i32, pub tv_usec: i32, @@ -99,12 +103,14 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::size_t, pub cmsg_level: ::c_int, pub cmsg_type: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -130,6 +136,7 @@ s! { pub c_ospeed: ::speed_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mallinfo { pub arena: ::c_int, pub ordblks: ::c_int, @@ -143,6 +150,7 @@ s! { pub keepcost: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mallinfo2 { pub arena: ::size_t, pub ordblks: ::size_t, @@ -156,10 +164,12 @@ s! { pub keepcost: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nl_pktinfo { pub group: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nl_mmap_req { pub nm_block_size: ::c_uint, pub nm_block_nr: ::c_uint, @@ -167,6 +177,7 @@ s! { pub nm_frame_nr: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nl_mmap_hdr { pub nm_status: ::c_uint, pub nm_len: ::c_uint, @@ -197,6 +208,7 @@ s! { pub rt_irtt: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct timex { pub modes: ::c_uint, #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))] @@ -276,6 +288,7 @@ s! { pub __unused11: i32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ntptimeval { pub time: ::timeval, pub maxerror: ::c_long, @@ -298,6 +311,7 @@ s! { __bitfield: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Chdr { pub ch_type: ::Elf64_Word, pub ch_reserved: ::Elf64_Word, @@ -305,12 +319,14 @@ s! { pub ch_addralign: ::Elf64_Xword, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Chdr { pub ch_type: ::Elf32_Word, pub ch_size: ::Elf32_Word, pub ch_addralign: ::Elf32_Word, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct seminfo { pub semmap: ::c_int, pub semmni: ::c_int, @@ -324,22 +340,26 @@ s! { pub semaem: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_peeksiginfo_args { pub off: ::__u64, pub flags: ::__u32, pub nr: ::__s32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_ptrace_syscall_info_entry { pub nr: ::__u64, pub args: [::__u64; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_ptrace_syscall_info_exit { pub sval: ::__s64, pub is_error: ::__u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_ptrace_syscall_info_seccomp { pub nr: ::__u64, pub args: [::__u64; 6], @@ -458,6 +478,7 @@ cfg_if! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmpx { pub ut_type: ::c_short, pub ut_pid: ::pid_t, diff --git a/src/unix/linux_like/linux/gnu/no_align.rs b/src/unix/linux_like/linux/gnu/no_align.rs index e32bf673d140e..569bc30199b53 100644 --- a/src/unix/linux_like/linux/gnu/no_align.rs +++ b/src/unix/linux_like/linux/gnu/no_align.rs @@ -1,5 +1,6 @@ s! { // FIXME this is actually a union + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { #[cfg(target_pointer_width = "32")] __size: [::c_char; 16], diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index 445d5f4276274..365733ef2426e 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -97,6 +97,7 @@ s! { pub sp_flag: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dqblk { pub dqb_bhardlimit: u64, pub dqb_bsoftlimit: u64, @@ -109,6 +110,7 @@ s! { pub dqb_valid: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct signalfd_siginfo { pub ssi_signo: u32, pub ssi_errno: i32, @@ -134,15 +136,18 @@ s! { _pad: [u8; 28], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct itimerspec { pub it_interval: ::timespec, pub it_value: ::timespec, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fsid_t { __val: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct packet_mreq { pub mr_ifindex: ::c_int, pub mr_type: ::c_ushort, @@ -150,6 +155,7 @@ s! { pub mr_address: [::c_uchar; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpu_set_t { #[cfg(all(target_pointer_width = "32", not(target_arch = "x86_64")))] @@ -165,6 +171,7 @@ s! { } // System V IPC + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msginfo { pub msgpool: ::c_int, pub msgmap: ::c_int, @@ -176,12 +183,14 @@ s! { pub msgseg: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sembuf { pub sem_num: ::c_ushort, pub sem_op: ::c_short, pub sem_flg: ::c_short, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_event { pub time: ::timeval, pub type_: ::__u16, @@ -189,6 +198,7 @@ s! { pub value: ::__s32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_id { pub bustype: ::__u16, pub vendor: ::__u16, @@ -196,6 +206,7 @@ s! { pub version: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_absinfo { pub value: ::__s32, pub minimum: ::__s32, @@ -205,6 +216,7 @@ s! { pub resolution: ::__s32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_keymap_entry { pub flags: ::__u8, pub len: ::__u8, @@ -213,22 +225,26 @@ s! { pub scancode: [::__u8; 32], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct input_mask { pub type_: ::__u32, pub codes_size: ::__u32, pub codes_ptr: ::__u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_replay { pub length: ::__u16, pub delay: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_trigger { pub button: ::__u16, pub interval: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_envelope { pub attack_length: ::__u16, pub attack_level: ::__u16, @@ -236,17 +252,20 @@ s! { pub fade_level: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_constant_effect { pub level: ::__s16, pub envelope: ff_envelope, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_ramp_effect { pub start_level: ::__s16, pub end_level: ::__s16, pub envelope: ff_envelope, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_condition_effect { pub right_saturation: ::__u16, pub left_saturation: ::__u16, @@ -271,11 +290,13 @@ s! { pub custom_data: *mut ::__s16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_rumble_effect { pub strong_magnitude: ::__u16, pub weak_magnitude: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ff_effect { pub type_: ::__u16, pub id: ::__s16, @@ -289,6 +310,7 @@ s! { pub u: [u32; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_ff_upload { pub request_id: ::__u32, pub retval: ::__s32, @@ -296,12 +318,14 @@ s! { pub old: ff_effect, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_ff_erase { pub request_id: ::__u32, pub retval: ::__s32, pub effect_id: ::__u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_abs_setup { pub code: ::__u16, pub absinfo: input_absinfo, @@ -340,6 +364,7 @@ s! { pub dlpi_tls_data: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Ehdr { pub e_ident: [::c_uchar; 16], pub e_type: Elf32_Half, @@ -357,6 +382,7 @@ s! { pub e_shstrndx: Elf32_Half, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Ehdr { pub e_ident: [::c_uchar; 16], pub e_type: Elf64_Half, @@ -374,6 +400,7 @@ s! { pub e_shstrndx: Elf64_Half, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Sym { pub st_name: Elf32_Word, pub st_value: Elf32_Addr, @@ -383,6 +410,7 @@ s! { pub st_shndx: Elf32_Section, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Sym { pub st_name: Elf64_Word, pub st_info: ::c_uchar, @@ -392,6 +420,7 @@ s! { pub st_size: Elf64_Xword, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Phdr { pub p_type: Elf32_Word, pub p_offset: Elf32_Off, @@ -403,6 +432,7 @@ s! { pub p_align: Elf32_Word, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Phdr { pub p_type: Elf64_Word, pub p_flags: Elf64_Word, @@ -414,6 +444,7 @@ s! { pub p_align: Elf64_Xword, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Shdr { pub sh_name: Elf32_Word, pub sh_type: Elf32_Word, @@ -427,6 +458,7 @@ s! { pub sh_entsize: Elf32_Word, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Shdr { pub sh_name: Elf64_Word, pub sh_type: Elf64_Word, @@ -440,6 +472,7 @@ s! { pub sh_entsize: Elf64_Xword, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ucred { pub pid: ::pid_t, pub uid: ::uid_t, @@ -462,6 +495,7 @@ s! { __pad: [::c_int; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct posix_spawnattr_t { __flags: ::c_short, __pgrp: ::pid_t, @@ -475,17 +509,20 @@ s! { __pad: [::c_int; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct genlmsghdr { pub cmd: u8, pub version: u8, pub reserved: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in6_pktinfo { pub ipi6_addr: ::in6_addr, pub ipi6_ifindex: ::c_uint, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct arpd_request { pub req: ::c_ushort, pub ip: u32, @@ -495,6 +532,7 @@ s! { pub ha: [::c_uchar; ::MAX_ADDR_LEN], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct inotify_event { pub wd: ::c_int, pub mask: u32, @@ -502,11 +540,13 @@ s! { pub len: u32 } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fanotify_response { pub fd: ::c_int, pub response: __u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_vm { pub svm_family: ::sa_family_t, pub svm_reserved1: ::c_ushort, @@ -515,11 +555,13 @@ s! { pub svm_zero: [u8; 4] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct regmatch_t { pub rm_so: regoff_t, pub rm_eo: regoff_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sock_extended_err { pub ee_errno: u32, pub ee_origin: u8, @@ -531,23 +573,27 @@ s! { } // linux/can.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_sockaddr_can_tp { pub rx_id: canid_t, pub tx_id: canid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_sockaddr_can_j1939 { pub name: u64, pub pgn: u32, pub addr: u8, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct can_filter { pub can_id: canid_t, pub can_mask: canid_t, } // linux/can/j1939.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct j1939_filter { pub name: name_t, pub name_mask: name_t, @@ -558,6 +604,7 @@ s! { } // linux/filter.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sock_filter { pub code: ::__u16, pub jt: ::__u8, @@ -571,6 +618,7 @@ s! { } // linux/seccomp.h + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct seccomp_data { pub nr: ::c_int, pub arch: ::__u32, @@ -578,6 +626,7 @@ s! { pub args: [::__u64; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nlmsghdr { pub nlmsg_len: u32, pub nlmsg_type: u16, @@ -586,16 +635,19 @@ s! { pub nlmsg_pid: u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nlmsgerr { pub error: ::c_int, pub msg: nlmsghdr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct nlattr { pub nla_len: u16, pub nla_type: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct file_clone_range { pub src_fd: ::__s64, pub src_offset: ::__u64, @@ -603,6 +655,7 @@ s! { pub dest_offset: ::__u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __c_anonymous_ifru_map { pub mem_start: ::c_ulong, pub mem_end: ::c_ulong, @@ -612,12 +665,14 @@ s! { pub port: ::c_uchar, } - pub struct in6_ifreq { - pub ifr6_addr: ::in6_addr, - pub ifr6_prefixlen: u32, - pub ifr6_ifindex: ::c_int, - } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] + pub struct in6_ifreq { + pub ifr6_addr: ::in6_addr, + pub ifr6_prefixlen: u32, + pub ifr6_ifindex: ::c_int, + } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct option { pub name: *const ::c_char, pub has_arg: ::c_int, @@ -626,7 +681,7 @@ s! { } // linux/sctp.h - + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_initmsg { pub sinit_num_ostreams: ::__u16, pub sinit_max_instreams: ::__u16, @@ -634,6 +689,7 @@ s! { pub sinit_max_init_timeo: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_sndrcvinfo { pub sinfo_stream: ::__u16, pub sinfo_ssn: ::__u16, @@ -646,6 +702,7 @@ s! { pub sinfo_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_sndinfo { pub snd_sid: ::__u16, pub snd_flags: ::__u16, @@ -654,6 +711,7 @@ s! { pub snd_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_rcvinfo { pub rcv_sid: ::__u16, pub rcv_ssn: ::__u16, @@ -665,6 +723,7 @@ s! { pub rcv_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_nxtinfo { pub nxt_sid: ::__u16, pub nxt_flags: ::__u16, @@ -673,15 +732,18 @@ s! { pub nxt_assoc_id: ::sctp_assoc_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_prinfo { pub pr_policy: ::__u16, pub pr_value: ::__u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sctp_authinfo { pub auth_keynumber: ::__u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rlimit64 { pub rlim_cur: rlim64_t, pub rlim_max: rlim64_t, @@ -689,6 +751,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_nl { pub nl_family: ::sa_family_t, nl_pad: ::c_ushort, @@ -696,6 +759,7 @@ s_no_extra_traits! { pub nl_groups: u32 } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_ino: ::ino_t, pub d_off: ::off_t, @@ -704,6 +768,7 @@ s_no_extra_traits! { pub d_name: [::c_char; 256], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_alg { pub salg_family: ::sa_family_t, pub salg_type: [::c_uchar; 14], @@ -712,12 +777,14 @@ s_no_extra_traits! { pub salg_name: [::c_uchar; 64], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_setup { pub id: input_id, pub name: [::c_char; UINPUT_MAX_NAME_SIZE], pub ff_effects_max: ::__u32, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct uinput_user_dev { pub name: [::c_char; UINPUT_MAX_NAME_SIZE], pub id: input_id, @@ -735,6 +802,7 @@ s_no_extra_traits! { removed in the future", since = "0.2.80" )] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct af_alg_iv { pub ivlen: u32, pub iv: [::c_uchar; 0], @@ -742,6 +810,7 @@ s_no_extra_traits! { // x32 compatibility // See https://sourceware.org/bugzilla/show_bug.cgi?id=21279 + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mq_attr { #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))] pub mq_flags: i64, @@ -783,6 +852,7 @@ s_no_extra_traits! { pub ifru_data: *mut ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ifreq { /// interface name, e.g. "en0" pub ifr_name: [::c_char; ::IFNAMSIZ], @@ -792,12 +862,14 @@ s_no_extra_traits! { pub ifr_ifru: ::sockaddr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct hwtstamp_config { pub flags: ::c_int, pub tx_type: ::c_int, pub rx_filter: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent64 { pub d_ino: ::ino64_t, pub d_off: ::off64_t, @@ -810,6 +882,7 @@ s_no_extra_traits! { s_no_extra_traits! { // linux/net_tstamp.h #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sock_txtime { pub clockid: ::clockid_t, pub flags: ::__u32, @@ -827,6 +900,7 @@ cfg_if! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_can { pub can_family: ::sa_family_t, pub can_ifindex: ::c_int, diff --git a/src/unix/linux_like/linux/musl/b32/arm/align.rs b/src/unix/linux_like/linux/musl/b32/arm/align.rs index aedbf7a99eb1b..127a41710d2d4 100644 --- a/src/unix/linux_like/linux/musl/b32/arm/align.rs +++ b/src/unix/linux_like/linux/musl/b32/arm/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct max_align_t { priv_: (i64, i64) diff --git a/src/unix/linux_like/linux/musl/b32/arm/mod.rs b/src/unix/linux_like/linux/musl/b32/arm/mod.rs index 7eb5cd4a40d97..084281b26df29 100644 --- a/src/unix/linux_like/linux/musl/b32/arm/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/arm/mod.rs @@ -2,6 +2,7 @@ pub type c_char = u8; pub type wchar_t = u32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, __st_dev_padding: ::c_int, @@ -24,6 +25,7 @@ s! { pub st_ino: ::ino_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, __st_dev_padding: ::c_int, @@ -52,6 +54,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, @@ -64,6 +67,7 @@ s! { __unused2: ::c_long } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -80,6 +84,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -97,6 +102,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -112,6 +118,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -120,6 +127,7 @@ s! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -135,6 +143,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -151,6 +160,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub trap_no: ::c_ulong, pub error_code: ::c_ulong, diff --git a/src/unix/linux_like/linux/musl/b32/hexagon.rs b/src/unix/linux_like/linux/musl/b32/hexagon.rs index 49e000ce97f1e..aeb468e830c51 100644 --- a/src/unix/linux_like/linux/musl/b32/hexagon.rs +++ b/src/unix/linux_like/linux/musl/b32/hexagon.rs @@ -3,7 +3,7 @@ pub type wchar_t = u32; pub type stat64 = ::stat; s! { - + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))]s pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::c_ulonglong, @@ -33,6 +33,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, @@ -43,6 +44,7 @@ s! { pub __seq: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -59,6 +61,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -76,6 +79,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -91,6 +95,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -99,6 +104,7 @@ s! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -114,6 +120,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, diff --git a/src/unix/linux_like/linux/musl/b32/mips/align.rs b/src/unix/linux_like/linux/musl/b32/mips/align.rs index 8c228ebab72ce..9a719f3234afe 100644 --- a/src/unix/linux_like/linux/musl/b32/mips/align.rs +++ b/src/unix/linux_like/linux/musl/b32/mips/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct max_align_t { priv_: [f32; 4] diff --git a/src/unix/linux_like/linux/musl/b32/mips/mod.rs b/src/unix/linux_like/linux/musl/b32/mips/mod.rs index ea0759c28bcc2..aeab6d604b2b7 100644 --- a/src/unix/linux_like/linux/musl/b32/mips/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/mips/mod.rs @@ -2,6 +2,7 @@ pub type c_char = i8; pub type wchar_t = ::c_int; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, __st_padding1: [::c_long; 2], @@ -25,6 +26,7 @@ s! { __st_padding4: [::c_long; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, __st_padding1: [::c_long; 2], @@ -54,6 +56,7 @@ s! { pub ss_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, @@ -66,6 +69,7 @@ s! { __unused2: ::c_long } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -79,6 +83,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, #[cfg(target_endian = "big")] @@ -105,6 +110,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -120,6 +126,7 @@ s! { pub f_spare: [::c_ulong; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_code: ::c_int, @@ -128,6 +135,7 @@ s! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -143,6 +151,7 @@ s! { pub f_spare: [::c_ulong; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, diff --git a/src/unix/linux_like/linux/musl/b32/mod.rs b/src/unix/linux_like/linux/musl/b32/mod.rs index cecd6dcab7df9..cc090ed6cd762 100644 --- a/src/unix/linux_like/linux/musl/b32/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/mod.rs @@ -7,10 +7,12 @@ pub type __s64 = ::c_longlong; pub type regoff_t = ::c_int; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [u32; 9] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { __val: [::c_ulong; 32], } @@ -25,12 +27,14 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::socklen_t, pub cmsg_level: ::c_int, pub cmsg_type: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { __val: [::c_int; 4], } diff --git a/src/unix/linux_like/linux/musl/b32/powerpc.rs b/src/unix/linux_like/linux/musl/b32/powerpc.rs index c7e4f094ec2ec..34a1c62081788 100644 --- a/src/unix/linux_like/linux/musl/b32/powerpc.rs +++ b/src/unix/linux_like/linux/musl/b32/powerpc.rs @@ -2,6 +2,7 @@ pub type c_char = u8; pub type wchar_t = i32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -23,6 +24,7 @@ s! { __unused: [::c_long; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -50,6 +52,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, @@ -63,6 +66,7 @@ s! { __pad3: ::c_longlong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, __unused1: ::c_int, @@ -80,6 +84,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, __unused1: ::c_int, @@ -97,6 +102,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -112,6 +118,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -120,6 +127,7 @@ s! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -135,6 +143,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, diff --git a/src/unix/linux_like/linux/musl/b32/riscv32/align.rs b/src/unix/linux_like/linux/musl/b32/riscv32/align.rs index 048268c96b7a7..bc782ab3cb16e 100644 --- a/src/unix/linux_like/linux/musl/b32/riscv32/align.rs +++ b/src/unix/linux_like/linux/musl/b32/riscv32/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct max_align_t { priv_: (i64, f64) diff --git a/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs b/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs index 18c3907f4d712..e7c3bd62e0973 100644 --- a/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs @@ -4,10 +4,12 @@ pub type c_char = u8; pub type wchar_t = ::c_int; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [::c_ulong; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -30,6 +32,7 @@ s! { __unused: [::c_int; 2usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -52,6 +55,7 @@ s! { __unused: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -67,6 +71,7 @@ s! { pub f_spare: [::c_long; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -82,6 +87,7 @@ s! { pub __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -97,6 +103,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -113,6 +120,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -141,6 +149,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -155,6 +164,7 @@ s! { __unused2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -168,6 +178,7 @@ s! { __unused6: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, diff --git a/src/unix/linux_like/linux/musl/b32/x86/align.rs b/src/unix/linux_like/linux/musl/b32/x86/align.rs index 79544176a88c9..e2e90324e35c0 100644 --- a/src/unix/linux_like/linux/musl/b32/x86/align.rs +++ b/src/unix/linux_like/linux/musl/b32/x86/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct max_align_t { priv_: [f64; 3] diff --git a/src/unix/linux_like/linux/musl/b32/x86/mod.rs b/src/unix/linux_like/linux/musl/b32/x86/mod.rs index 3bd44d0e8394a..8ac384b2a1aae 100644 --- a/src/unix/linux_like/linux/musl/b32/x86/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/x86/mod.rs @@ -2,6 +2,7 @@ pub type c_char = i8; pub type wchar_t = i32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, __st_dev_padding: ::c_int, @@ -24,6 +25,7 @@ s! { pub st_ino: ::ino_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, __st_dev_padding: ::c_int, @@ -52,6 +54,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, @@ -64,6 +67,7 @@ s! { __unused2: ::c_long } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -80,6 +84,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -97,6 +102,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -112,10 +118,12 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { __private: [u32; 22] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -124,6 +132,7 @@ s! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -139,6 +148,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, diff --git a/src/unix/linux_like/linux/musl/b64/aarch64/align.rs b/src/unix/linux_like/linux/musl/b64/aarch64/align.rs index a4bf9bff4f147..88aca21ece160 100644 --- a/src/unix/linux_like/linux/musl/b64/aarch64/align.rs +++ b/src/unix/linux_like/linux/musl/b64/aarch64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f32; 8] @@ -15,6 +16,7 @@ s! { pub uc_mcontext: mcontext_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct mcontext_t { pub fault_address: ::c_ulong, @@ -25,6 +27,7 @@ s! { __reserved: [[u64; 32]; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct clone_args { pub flags: ::c_ulonglong, diff --git a/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs b/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs index 4535e73eeddf1..946b868b50f83 100644 --- a/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs +++ b/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_fpsimd_struct { pub vregs: [::__uint128_t; 32], pub fpsr: u32, diff --git a/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs b/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs index aea552b1b5ae8..a85226d64d6e8 100644 --- a/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs @@ -6,6 +6,7 @@ pub type nlink_t = u32; pub type blksize_t = ::c_int; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -28,6 +29,7 @@ s! { __unused: [::c_uint; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -50,6 +52,7 @@ s! { __unused: [::c_uint; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub regs: [::c_ulonglong; 31], pub sp: ::c_ulonglong, @@ -57,6 +60,7 @@ s! { pub pstate: ::c_ulonglong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, diff --git a/src/unix/linux_like/linux/musl/b64/mips64.rs b/src/unix/linux_like/linux/musl/b64/mips64.rs index c0116b9731428..215ec0223c977 100644 --- a/src/unix/linux_like/linux/musl/b64/mips64.rs +++ b/src/unix/linux_like/linux/musl/b64/mips64.rs @@ -6,6 +6,7 @@ pub type nlink_t = u64; pub type blksize_t = i64; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, __pad1: [::c_int; 3], @@ -30,6 +31,7 @@ s! { __pad5: [::c_int; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, __pad1: [::c_int; 3], @@ -54,6 +56,7 @@ s! { __pad5: [::c_int; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -69,6 +72,7 @@ s! { pub f_spare: [::c_ulong; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -84,6 +88,7 @@ s! { pub f_spare: [::c_ulong; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, diff --git a/src/unix/linux_like/linux/musl/b64/mod.rs b/src/unix/linux_like/linux/musl/b64/mod.rs index f437355d900cb..2cd2717fd3e57 100644 --- a/src/unix/linux_like/linux/musl/b64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/mod.rs @@ -3,6 +3,7 @@ pub type c_ulong = u64; pub type regoff_t = ::c_long; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -18,6 +19,7 @@ s! { pub f_spare: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -39,14 +41,17 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [u64; 7] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { __val: [::c_ulong; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -60,6 +65,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -74,6 +80,7 @@ s! { __pad2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_ulong, pub f_bsize: ::c_ulong, @@ -107,6 +114,7 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { #[cfg(target_endian = "big")] pub __pad1: ::c_int, @@ -117,10 +125,12 @@ s! { pub cmsg_type: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { __val: [::c_int; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, diff --git a/src/unix/linux_like/linux/musl/b64/powerpc64.rs b/src/unix/linux_like/linux/musl/b64/powerpc64.rs index 58a803b85c4fd..21dde74c632b8 100644 --- a/src/unix/linux_like/linux/musl/b64/powerpc64.rs +++ b/src/unix/linux_like/linux/musl/b64/powerpc64.rs @@ -6,6 +6,7 @@ pub type nlink_t = u64; pub type blksize_t = ::c_long; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -27,6 +28,7 @@ s! { __unused: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -48,6 +50,7 @@ s! { __reserved: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, diff --git a/src/unix/linux_like/linux/musl/b64/riscv64/align.rs b/src/unix/linux_like/linux/musl/b64/riscv64/align.rs index 48d152a5721ec..1615876ed50ab 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/align.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/align.rs @@ -9,6 +9,7 @@ s_no_extra_traits! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct mcontext_t { pub __gregs: [::c_ulong; 32], @@ -16,6 +17,7 @@ s_no_extra_traits! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub union __riscv_mc_fp_state { pub __f: __riscv_mc_f_ext_state, pub __d: __riscv_mc_d_ext_state, @@ -23,18 +25,21 @@ s_no_extra_traits! { } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __riscv_mc_f_ext_state { pub __f: [::c_uint; 32], pub __fcsr: ::c_uint, } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __riscv_mc_d_ext_state { pub __f: [::c_ulonglong; 32], pub __fcsr: ::c_uint, } #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct __riscv_mc_q_ext_state { pub __f: [::c_ulonglong; 64], diff --git a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs index ab5efa9c3dee7..201dc832b8c41 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs @@ -11,10 +11,12 @@ pub type __u64 = ::c_ulonglong; pub type __s64 = ::c_longlong; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [::c_ulong; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -37,6 +39,7 @@ s! { __unused: [::c_int; 2usize], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -59,6 +62,7 @@ s! { __unused: [::c_int; 2], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -74,6 +78,7 @@ s! { pub f_spare: [::c_long; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -89,6 +94,7 @@ s! { pub f_spare: [::c_long; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -104,6 +110,7 @@ s! { pub __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -119,6 +126,7 @@ s! { pub __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -147,6 +155,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -161,6 +170,7 @@ s! { __unused2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, diff --git a/src/unix/linux_like/linux/musl/b64/s390x.rs b/src/unix/linux_like/linux/musl/b64/s390x.rs index 603716b43cbe8..ed4de3e29a2f9 100644 --- a/src/unix/linux_like/linux/musl/b64/s390x.rs +++ b/src/unix/linux_like/linux/musl/b64/s390x.rs @@ -7,6 +7,7 @@ pub type __u64 = u64; pub type __s64 = i64; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, @@ -19,6 +20,7 @@ s! { __pad2: ::c_long, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -39,6 +41,7 @@ s! { __unused: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -59,6 +62,7 @@ s! { __unused: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_uint, pub f_bsize: ::c_uint, @@ -74,6 +78,7 @@ s! { pub f_spare: [::c_uint; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_uint, pub f_bsize: ::c_uint, @@ -92,6 +97,7 @@ s! { s_no_extra_traits! { // FIXME: This is actually a union. + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fpreg_t { pub d: ::c_double, // f: ::c_float, diff --git a/src/unix/linux_like/linux/musl/b64/x86_64/align.rs b/src/unix/linux_like/linux/musl/b64/x86_64/align.rs index 94391a01a727e..c30a9da132a5e 100644 --- a/src/unix/linux_like/linux/musl/b64/x86_64/align.rs +++ b/src/unix/linux_like/linux/musl/b64/x86_64/align.rs @@ -1,5 +1,6 @@ s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(16))] pub struct max_align_t { priv_: [f64; 4] @@ -8,6 +9,7 @@ s_no_extra_traits! { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(8))] pub struct clone_args { pub flags: ::c_ulonglong, diff --git a/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs b/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs index 62c97f978dda5..bdb21241c257d 100644 --- a/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs @@ -7,6 +7,7 @@ pub type __s64 = ::c_longlong; pub type greg_t = i64; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -28,6 +29,7 @@ s! { __unused: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, pub st_ino: ::ino64_t, @@ -49,6 +51,7 @@ s! { __reserved: [::c_long; 3], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_regs_struct { pub r15: ::c_ulong, pub r14: ::c_ulong, @@ -104,11 +107,13 @@ s! { // GitHub repo: ifduyue/musl/ // commit: b4b1e10364c8737a632be61582e05a8d3acf5690 // file: arch/x86_64/bits/signal.h#L80-L84 + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mcontext_t { pub gregs: [greg_t; 23], __private: [u64; 9], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __ipc_perm_key: ::key_t, pub uid: ::uid_t, @@ -123,6 +128,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct user_fpregs_struct { pub cwd: ::c_ushort, pub swd: ::c_ushort, diff --git a/src/unix/linux_like/linux/musl/mod.rs b/src/unix/linux_like/linux/musl/mod.rs index 4c605338972e3..8c2bf6669e095 100644 --- a/src/unix/linux_like/linux/musl/mod.rs +++ b/src/unix/linux_like/linux/musl/mod.rs @@ -148,6 +148,7 @@ s! { pub sa_restorer: ::Option, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -168,6 +169,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -179,6 +181,7 @@ s! { pub __c_ospeed: ::speed_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -187,6 +190,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock64 { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -224,11 +228,13 @@ s! { pub rt_irtt: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __exit_status { pub e_termination: ::c_short, pub e_exit: ::c_short, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf64_Chdr { pub ch_type: ::Elf64_Word, pub ch_reserved: ::Elf64_Word, @@ -236,12 +242,14 @@ s! { pub ch_addralign: ::Elf64_Xword, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct Elf32_Chdr { pub ch_type: ::Elf32_Word, pub ch_size: ::Elf32_Word, pub ch_addralign: ::Elf32_Word, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct timex { pub modes: ::c_uint, pub offset: ::c_long, @@ -266,6 +274,7 @@ s! { pub __padding: [::c_int; 11], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ntptimeval { pub time: ::timeval, pub maxerror: ::c_long, @@ -274,6 +283,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { pub uptime: ::c_ulong, pub loads: [::c_ulong; 3], @@ -298,6 +308,7 @@ s_no_extra_traits! { // 1e7f0fcd7ff2096904fd93a2ee6d12a2392be392 // // OpenHarmony uses the musl 1.2 layout. + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utmpx { pub ut_type: ::c_short, __ut_pad1: ::c_short, diff --git a/src/unix/linux_like/linux/no_align.rs b/src/unix/linux_like/linux/no_align.rs index 328a5cc484231..d0d87c329a219 100644 --- a/src/unix/linux_like/linux/no_align.rs +++ b/src/unix/linux_like/linux/no_align.rs @@ -1,6 +1,7 @@ macro_rules! expand_align { () => { s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutexattr_t { #[cfg(any(target_arch = "x86_64", target_arch = "powerpc64", @@ -29,6 +30,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_MUTEXATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlockattr_t { #[cfg(any(target_env = "musl", target_env = "ohos"))] __align: [::c_int; 0], @@ -37,16 +39,19 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_RWLOCKATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_condattr_t { __align: [::c_int; 0], size: [u8; ::__SIZEOF_PTHREAD_CONDATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_barrierattr_t { __align: [::c_int; 0], size: [u8; ::__SIZEOF_PTHREAD_BARRIERATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fanotify_event_metadata { __align: [::c_long; 0], pub event_len: __u32, @@ -68,6 +73,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_COND_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutex_t { #[cfg(any(target_arch = "mips", target_arch = "mips32r6", @@ -92,6 +98,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_MUTEX_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlock_t { #[cfg(any(target_arch = "mips", target_arch = "mips32r6", @@ -116,6 +123,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_RWLOCK_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_barrier_t { #[cfg(any(target_arch = "mips", target_arch = "mips32r6", diff --git a/src/unix/linux_like/linux/non_exhaustive.rs b/src/unix/linux_like/linux/non_exhaustive.rs index e2e2cb847ac65..4f21f6b9b7c17 100644 --- a/src/unix/linux_like/linux/non_exhaustive.rs +++ b/src/unix/linux_like/linux/non_exhaustive.rs @@ -1,6 +1,7 @@ s! { // linux/openat2.h #[non_exhaustive] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct open_how { pub flags: ::__u64, pub mode: ::__u64, diff --git a/src/unix/linux_like/linux/uclibc/align.rs b/src/unix/linux_like/linux/uclibc/align.rs index e6610bb7b985c..7d3d32fffc79a 100644 --- a/src/unix/linux_like/linux/uclibc/align.rs +++ b/src/unix/linux_like/linux/uclibc/align.rs @@ -1,6 +1,7 @@ macro_rules! expand_align { () => { s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(any(target_pointer_width = "32", target_arch = "x86_64", target_arch = "powerpc64", @@ -19,6 +20,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_MUTEXATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[repr(align(4))] pub struct pthread_condattr_t { size: [u8; ::__SIZEOF_PTHREAD_CONDATTR_T], diff --git a/src/unix/linux_like/linux/uclibc/arm/align.rs b/src/unix/linux_like/linux/uclibc/arm/align.rs index 4a0e07460ebb1..7320f6da4e20c 100644 --- a/src/unix/linux_like/linux/uclibc/arm/align.rs +++ b/src/unix/linux_like/linux/uclibc/arm/align.rs @@ -1,5 +1,6 @@ s! { // FIXME this is actually a union + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(target_pointer_width = "32", repr(align(4)))] #[cfg_attr(target_pointer_width = "64", diff --git a/src/unix/linux_like/linux/uclibc/arm/mod.rs b/src/unix/linux_like/linux/uclibc/arm/mod.rs index cff82f005acee..a931bbe8d3d91 100644 --- a/src/unix/linux_like/linux/uclibc/arm/mod.rs +++ b/src/unix/linux_like/linux/uclibc/arm/mod.rs @@ -22,6 +22,7 @@ pub type __u64 = ::c_ulonglong; pub type __s64 = ::c_longlong; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::size_t, pub cmsg_level: ::c_int, @@ -38,10 +39,12 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [::c_long; 9], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::c_ulonglong, __pad1: ::c_ushort, @@ -65,6 +68,7 @@ s! { __unused5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::c_ulonglong, @@ -88,6 +92,7 @@ s! { pub st_ino: ::ino64_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -96,6 +101,7 @@ s! { pub l_pid: ::pid_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { pub uptime: ::c_long, pub loads: [::c_ulong; 3], @@ -113,6 +119,7 @@ s! { pub _f: [::c_char; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_int, pub f_bsize: ::c_int, @@ -129,6 +136,7 @@ s! { pub f_spare: [::c_int; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_int, pub f_bsize: ::c_int, @@ -144,6 +152,7 @@ s! { pub f_spare: [::c_int; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -160,6 +169,7 @@ s! { __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { __val: [::c_ulong; 2], } @@ -171,6 +181,7 @@ s! { pub sa_mask: sigset_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -182,6 +193,7 @@ s! { pub c_ospeed: ::speed_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_errno: ::c_int, @@ -195,6 +207,7 @@ s! { pub ss_size: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -209,6 +222,7 @@ s! { __unused2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -226,6 +240,7 @@ s! { __unused5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, diff --git a/src/unix/linux_like/linux/uclibc/arm/no_align.rs b/src/unix/linux_like/linux/uclibc/arm/no_align.rs index e32bf673d140e..569bc30199b53 100644 --- a/src/unix/linux_like/linux/uclibc/arm/no_align.rs +++ b/src/unix/linux_like/linux/uclibc/arm/no_align.rs @@ -1,5 +1,6 @@ s! { // FIXME this is actually a union + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { #[cfg(target_pointer_width = "32")] __size: [::c_char; 16], diff --git a/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs b/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs index 4a0e07460ebb1..7320f6da4e20c 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs @@ -1,5 +1,6 @@ s! { // FIXME this is actually a union + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(target_pointer_width = "32", repr(align(4)))] #[cfg_attr(target_pointer_width = "64", diff --git a/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs b/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs index a5aca85a3a741..bf3aec2bd3ef1 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs @@ -18,6 +18,7 @@ pub type fsblkcnt64_t = u64; pub type fsfilcnt64_t = u64; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::dev_t, st_pad1: [::c_long; 2], @@ -41,6 +42,7 @@ s! { st_pad5: [::c_long; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::dev_t, st_pad1: [::c_long; 2], @@ -64,6 +66,7 @@ s! { st_pad5: [::c_long; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -80,6 +83,7 @@ s! { pub __f_spare: [::c_int; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [u32; 9] } @@ -97,10 +101,12 @@ s! { pub ss_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { __val: [::c_ulong; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_code: ::c_int, @@ -121,6 +127,7 @@ s! { __unused5: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -134,6 +141,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -147,6 +155,7 @@ s! { __unused5: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, #[cfg(target_endian = "big")] @@ -173,6 +182,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -188,6 +198,7 @@ s! { f_spare: [::c_long; 6], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -213,12 +224,14 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::size_t, pub cmsg_level: ::c_int, pub cmsg_type: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -228,6 +241,7 @@ s! { pub c_cc: [::cc_t; ::NCCS], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct flock { pub l_type: ::c_short, pub l_whence: ::c_short, @@ -238,6 +252,7 @@ s! { pad: [::c_long; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { pub uptime: ::c_long, pub loads: [::c_ulong; 3], diff --git a/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs b/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs index e32bf673d140e..569bc30199b53 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs @@ -1,5 +1,6 @@ s! { // FIXME this is actually a union + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { #[cfg(target_pointer_width = "32")] __size: [::c_char; 16], diff --git a/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs b/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs index 21e21907d4a70..9e44ad96f1dbe 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs @@ -1,5 +1,6 @@ s! { // FIXME this is actually a union + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr(target_pointer_width = "32", repr(align(4)))] #[cfg_attr(target_pointer_width = "64", diff --git a/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs b/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs index 8ca100fcd268f..b7753595241aa 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs @@ -13,6 +13,7 @@ pub type time_t = i64; pub type wchar_t = i32; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::c_ulong, st_pad1: [::c_long; 2], @@ -37,6 +38,7 @@ s! { st_pad5: [::c_long; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat64 { pub st_dev: ::c_ulong, st_pad1: [::c_long; 2], @@ -60,6 +62,7 @@ s! { st_pad5: [::c_long; 7], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_attr_t { __size: [::c_ulong; 7] } @@ -77,10 +80,12 @@ s! { pub ss_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { __size: [::c_ulong; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { pub si_signo: ::c_int, pub si_code: ::c_int, @@ -89,6 +94,7 @@ s! { _pad2: [::c_long; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -102,6 +108,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, @@ -115,6 +122,7 @@ s! { __unused5: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -129,6 +137,7 @@ s! { __glibc_reserved5: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -154,12 +163,14 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::size_t, pub cmsg_level: ::c_int, pub cmsg_type: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -169,6 +180,7 @@ s! { pub c_cc: [::cc_t; ::NCCS], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { pub uptime: ::c_long, pub loads: [::c_ulong; 3], diff --git a/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs b/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs index 8909114cdfa42..45cbd4d7f232f 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs @@ -1,5 +1,6 @@ s! { // FIXME this is actually a union + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { __size: [::c_char; 32], __align: [::c_long; 0], diff --git a/src/unix/linux_like/linux/uclibc/mod.rs b/src/unix/linux_like/linux/uclibc/mod.rs index 888be60c3c00c..2ed978a4365f1 100644 --- a/src/unix/linux_like/linux/uclibc/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mod.rs @@ -17,6 +17,7 @@ cfg_if! { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs { // Different than GNU! pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -69,11 +70,13 @@ s! { pub rt_irtt: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __exit_status { pub e_termination: ::c_short, pub e_exit: ::c_short, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ptrace_peeksiginfo_args { pub off: ::__u64, pub flags: ::__u32, diff --git a/src/unix/linux_like/linux/uclibc/no_align.rs b/src/unix/linux_like/linux/uclibc/no_align.rs index a73dbded57ac7..749a2b1fffa91 100644 --- a/src/unix/linux_like/linux/uclibc/no_align.rs +++ b/src/unix/linux_like/linux/uclibc/no_align.rs @@ -1,6 +1,7 @@ macro_rules! expand_align { () => { s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutex_t { #[cfg(any(target_arch = "mips", target_arch = "arm", @@ -14,6 +15,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_MUTEX_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_rwlock_t { #[cfg(any(target_arch = "mips", target_arch = "arm", @@ -27,6 +29,7 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_RWLOCK_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_mutexattr_t { #[cfg(any(target_arch = "x86_64", target_arch = "powerpc64", target_arch = "mips64", target_arch = "s390x", @@ -39,11 +42,13 @@ macro_rules! expand_align { size: [u8; ::__SIZEOF_PTHREAD_MUTEXATTR_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_cond_t { __align: [::c_longlong; 0], size: [u8; ::__SIZEOF_PTHREAD_COND_T], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pthread_condattr_t { __align: [::c_int; 0], size: [u8; ::__SIZEOF_PTHREAD_CONDATTR_T], diff --git a/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs b/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs index c7cbafa16ecf3..099de414f0d1b 100644 --- a/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs +++ b/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs @@ -8,6 +8,7 @@ pub type pthread_t = *mut ::c_void; s! { /// CPU sets. + /// #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct l4_sched_cpu_set_t { // from the L4Re docs /// Combination of granularity and offset. diff --git a/src/unix/linux_like/linux/uclibc/x86_64/mod.rs b/src/unix/linux_like/linux/uclibc/x86_64/mod.rs index 390119e3b5091..beaf759d17c11 100644 --- a/src/unix/linux_like/linux/uclibc/x86_64/mod.rs +++ b/src/unix/linux_like/linux/uclibc/x86_64/mod.rs @@ -23,6 +23,7 @@ pub type __u64 = ::c_ulong; pub type __s64 = ::c_long; s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipc_perm { pub __key: ::key_t, pub uid: ::uid_t, @@ -50,10 +51,12 @@ s! { __stacksize: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct __sched_param { __sched_priority: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct siginfo_t { si_signo: ::c_int, // signal number si_errno: ::c_int, // if not zero: error value of signal, see errno.h @@ -62,6 +65,7 @@ s! { _align: [usize; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct shmid_ds { pub shm_perm: ::ipc_perm, pub shm_segsz: ::size_t, // segment size in bytes @@ -75,6 +79,7 @@ s! { __unused2: ::c_ulong } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct msqid_ds { pub msg_perm: ::ipc_perm, pub msg_stime: ::time_t, @@ -89,11 +94,13 @@ s! { __ignored2: ::c_ulong, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr { pub sa_family: ::sa_family_t, pub sa_data: [::c_char; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in { pub sin_family: ::sa_family_t, pub sin_port: ::in_port_t, @@ -101,6 +108,7 @@ s! { pub sin_zero: [u8; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in6 { pub sin6_family: ::sa_family_t, pub sin6_port: ::in_port_t, @@ -121,6 +129,7 @@ s! { // __align: [u32; 0], // } +#[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct stat { pub st_dev: ::c_ulong, pub st_ino: ::ino_t, @@ -156,6 +165,7 @@ s! { pub ss_size: ::size_t } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs { // FIXME pub f_type: fsword_t, pub f_bsize: fsword_t, @@ -170,6 +180,7 @@ s! { f_spare: [fsword_t; 5], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statfs64 { pub f_type: ::c_int, pub f_bsize: ::c_int, @@ -185,6 +196,7 @@ s! { pub f_spare: [::c_int; 4], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct statvfs64 { pub f_bsize: ::c_ulong, pub f_frsize: ::c_ulong, @@ -211,6 +223,7 @@ s! { pub msg_flags: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct termios { // FIXME pub c_iflag: ::tcflag_t, pub c_oflag: ::tcflag_t, @@ -220,10 +233,12 @@ s! { pub c_cc: [::cc_t; ::NCCS], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigset_t { // FIXME __val: [::c_ulong; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sysinfo { // FIXME pub uptime: ::c_long, pub loads: [::c_ulong; 3], @@ -253,6 +268,7 @@ s! { __unused5: *mut ::c_void, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cpu_set_t { // FIXME #[cfg(target_pointer_width = "32")] bits: [u32; 32], @@ -260,11 +276,13 @@ s! { bits: [u64; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fsid_t { // FIXME __val: [::c_int; 2], } // FIXME this is actually a union + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sem_t { #[cfg(target_pointer_width = "32")] __size: [::c_char; 16], @@ -273,6 +291,7 @@ s! { __align: [::c_long; 0], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct cmsghdr { pub cmsg_len: ::size_t, pub cmsg_level: ::c_int, @@ -282,6 +301,7 @@ s! { s_no_extra_traits! { #[allow(missing_debug_implementations)] + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct dirent { pub d_ino: ::ino64_t, pub d_off: ::off64_t, diff --git a/src/unix/linux_like/mod.rs b/src/unix/linux_like/mod.rs index 26fd68de49c7c..dc8c89fe80aeb 100644 --- a/src/unix/linux_like/mod.rs +++ b/src/unix/linux_like/mod.rs @@ -16,32 +16,38 @@ impl ::Clone for timezone { } s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_addr { pub s_addr: ::in_addr_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq { pub imr_multiaddr: in_addr, pub imr_interface: in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreqn { pub imr_multiaddr: in_addr, pub imr_address: in_addr, pub imr_ifindex: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ip_mreq_source { pub imr_multiaddr: in_addr, pub imr_interface: in_addr, pub imr_sourceaddr: in_addr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr { pub sa_family: sa_family_t, pub sa_data: [::c_char; 14], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in { pub sin_family: sa_family_t, pub sin_port: ::in_port_t, @@ -49,6 +55,7 @@ s! { pub sin_zero: [u8; 8], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_in6 { pub sin6_family: sa_family_t, pub sin6_port: ::in_port_t, @@ -78,6 +85,7 @@ s! { pub ai_next: *mut addrinfo, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_ll { pub sll_family: ::c_ushort, pub sll_protocol: ::c_ushort, @@ -88,6 +96,7 @@ s! { pub sll_addr: [::c_uchar; 8] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct fd_set { fds_bits: [::c_ulong; FD_SETSIZE / ULONG_SIZE], } @@ -106,6 +115,7 @@ s! { pub tm_zone: *const ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sched_param { pub sched_priority: ::c_int, #[cfg(any(target_env = "musl", target_os = "emscripten", target_env = "ohos"))] @@ -152,6 +162,7 @@ s! { pub int_n_sign_posn: ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in_pktinfo { pub ipi_ifindex: ::c_int, pub ipi_spec_dst: ::in_addr, @@ -168,6 +179,7 @@ s! { pub ifa_data: *mut ::c_void } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in6_rtmsg { rtmsg_dst: ::in6_addr, rtmsg_src: ::in6_addr, @@ -181,6 +193,7 @@ s! { rtmsg_ifindex: ::c_int, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct arpreq { pub arp_pa: ::sockaddr, pub arp_ha: ::sockaddr, @@ -189,6 +202,7 @@ s! { pub arp_dev: [::c_char; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct arpreq_old { pub arp_pa: ::sockaddr, pub arp_ha: ::sockaddr, @@ -196,6 +210,7 @@ s! { pub arp_netmask: ::sockaddr, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct arphdr { pub ar_hrd: u16, pub ar_pro: u16, @@ -204,6 +219,7 @@ s! { pub ar_op: u16, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct mmsghdr { pub msg_hdr: ::msghdr, pub msg_len: ::c_uint, @@ -211,6 +227,7 @@ s! { } s_no_extra_traits! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] #[cfg_attr( any( all( @@ -224,11 +241,13 @@ s_no_extra_traits! { pub u64: u64, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_un { pub sun_family: sa_family_t, pub sun_path: [::c_char; 108] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sockaddr_storage { pub ss_family: sa_family_t, #[cfg(target_pointer_width = "32")] @@ -238,6 +257,7 @@ s_no_extra_traits! { __ss_align: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utsname { pub sysname: [::c_char; 65], pub nodename: [::c_char; 65], @@ -247,6 +267,7 @@ s_no_extra_traits! { pub domainname: [::c_char; 65] } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct sigevent { pub sigev_value: ::sigval, pub sigev_signo: ::c_int, diff --git a/src/unix/mod.rs b/src/unix/mod.rs index 9daebcaa6d364..3bd17fc639514 100644 --- a/src/unix/mod.rs +++ b/src/unix/mod.rs @@ -59,11 +59,13 @@ s! { pub gr_mem: *mut *mut ::c_char, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct utimbuf { pub actime: time_t, pub modtime: time_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct timeval { pub tv_sec: time_t, pub tv_usec: suseconds_t, @@ -71,6 +73,7 @@ s! { // linux x32 compatibility // See https://sourceware.org/bugzilla/show_bug.cgi?id=16437 + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct timespec { pub tv_sec: time_t, #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))] @@ -79,11 +82,13 @@ s! { pub tv_nsec: ::c_long, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct rlimit { pub rlim_cur: rlim_t, pub rlim_max: rlim_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct rusage { pub ru_utime: timeval, pub ru_stime: timeval, @@ -134,6 +139,7 @@ s! { __reserved: [c_long; 16], } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct ipv6_mreq { pub ipv6mr_multiaddr: in6_addr, #[cfg(target_os = "android")] @@ -155,12 +161,14 @@ s! { pub iov_len: ::size_t, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct pollfd { pub fd: ::c_int, pub events: ::c_short, pub revents: ::c_short, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct winsize { pub ws_row: ::c_ushort, pub ws_col: ::c_ushort, @@ -168,6 +176,7 @@ s! { pub ws_ypixel: ::c_ushort, } + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct linger { pub l_onoff: ::c_int, pub l_linger: ::c_int, @@ -179,12 +188,14 @@ s! { } // + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes))] pub struct itimerval { pub it_interval: ::timeval, pub it_value: ::timeval, } // + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct tms { pub tms_utime: ::clock_t, pub tms_stime: ::clock_t, diff --git a/src/unix/no_align.rs b/src/unix/no_align.rs index f6b9f4c12d4ba..b6832140ac912 100644 --- a/src/unix/no_align.rs +++ b/src/unix/no_align.rs @@ -1,4 +1,5 @@ s! { + #[cfg_attr(feature = "zerocopy", derive(FromZeroes, FromBytes, AsBytes))] pub struct in6_addr { pub s6_addr: [u8; 16], __align: [u32; 0],