diff --git a/build.rs b/build.rs index cbebca6207f2a..373a66e563af8 100644 --- a/build.rs +++ b/build.rs @@ -28,6 +28,7 @@ const ALLOWED_CFGS: &[&str] = &[ // Corresponds to `__USE_TIME_BITS64` in UAPI "linux_time_bits64", "musl_v1_2_3", + "musl_stat_timespec", // Corresponds to `_REDIR_TIME64` in musl "musl32_time64", "vxworks_lt_25_09", @@ -54,6 +55,9 @@ const CHECK_CFG_EXTRA: &[(&str, &[&str])] = &[ /// Musl architectures that set `#define _REDIR_TIME64 1`. const MUSL_REDIR_TIME64_ARCHES: &[&str] = &["arm", "mips", "powerpc", "x86"]; +/// Musl architectures that switched to out-of-line time fields in struct stat. +const MUSL_STAT_TIMESPEC_ARCHES: &[&str] = &[]; + fn main() { // Avoid unnecessary re-building. println!("cargo:rerun-if-changed=build.rs"); @@ -110,6 +114,10 @@ fn main() { // OpenHarmony uses a fork of the musl libc let musl = target_env == "musl" || target_env == "ohos"; + if musl && (musl_v1_2_3 || MUSL_STAT_TIMESPEC_ARCHES.contains(&target_arch.as_str())) { + set_cfg("musl_stat_timespec"); + } + // loongarch64 and ohos only exist with recent musl if target_arch == "loongarch64" || target_env == "ohos" { musl_v1_2_3 = true; diff --git a/libc-test/build.rs b/libc-test/build.rs index 0e6a543861621..f661a6d1a086a 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3706,7 +3706,8 @@ fn test_linux(target: &str) { let mips32 = mips && !mips64; let musl_v1_2_3 = env::var("RUST_LIBC_UNSTABLE_MUSL_V1_2_3").is_ok(); - if musl_v1_2_3 { + let musl_stat_timespec = env::var("RUST_LIBC_UNSTABLE_MUSL_V1_2_3").is_ok(); + if musl_v1_2_3 || musl_stat_timespec { assert!(musl); } let old_musl = musl && !musl_v1_2_3; @@ -3719,6 +3720,9 @@ fn test_linux(target: &str) { cfg.cfg("linux_time_bits64", None); } } + if musl_stat_timespec { + cfg.cfg("musl_stat_timespec", None); + } cfg.define("_GNU_SOURCE", None) // This macro re-defines fscanf,scanf,sscanf to link to the symbols that are // deprecated since glibc >= 2.29. This allows Rust binaries to link against @@ -3971,9 +3975,9 @@ fn test_linux(target: &str) { cfg.rename_struct_field(move |struct_, field| { match (struct_.ident(), field.ident()) { // Our stat *_nsec fields normally don't actually exist but are part - // of a timeval struct - this is fixed in musl_v1_2_3 + // of a timeval struct - this is fixed in musl_stat_timespec ("stat" | "statfs" | "statvfs" | "stat64" | "statfs64" | "statvfs64", f) - if !musl_v1_2_3 && f.ends_with("_nsec") => + if !musl_stat_timespec && f.ends_with("_nsec") => { Some(f.replace("e_nsec", ".tv_nsec")) } 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 ae8e4939bbcb2..853ff6dc13620 100644 --- a/src/unix/linux_like/linux/musl/b32/arm/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/arm/mod.rs @@ -27,17 +27,17 @@ s! { #[cfg(musl32_time64)] __st_ctim32: Padding<__c_anonymous_timespec32>, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, pub st_ino: crate::ino_t, diff --git a/src/unix/linux_like/linux/musl/b32/hexagon.rs b/src/unix/linux_like/linux/musl/b32/hexagon.rs index 7aa01d625cdcd..8d1e3adc0b35c 100644 --- a/src/unix/linux_like/linux/musl/b32/hexagon.rs +++ b/src/unix/linux_like/linux/musl/b32/hexagon.rs @@ -18,24 +18,24 @@ s! { __st_blksize_padding: Padding, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2]>, 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 8c7ccbfc07450..7fbf0043c91b4 100644 --- a/src/unix/linux_like/linux/musl/b32/mips/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/mips/mod.rs @@ -25,17 +25,17 @@ s! { #[cfg(musl32_time64)] __st_ctim32: Padding<__c_anonymous_timespec32>, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, pub st_blksize: crate::blksize_t, diff --git a/src/unix/linux_like/linux/musl/b32/powerpc.rs b/src/unix/linux_like/linux/musl/b32/powerpc.rs index cd11a44e43cd4..b77fc3a396fc2 100644 --- a/src/unix/linux_like/linux/musl/b32/powerpc.rs +++ b/src/unix/linux_like/linux/musl/b32/powerpc.rs @@ -37,17 +37,17 @@ s! { #[cfg(musl32_time64)] __st_ctim32: Padding<__c_anonymous_timespec32>, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, __unused: Padding<[c_long; 2]>, 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 5561dcb34d358..430e1306f7a3b 100644 --- a/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs @@ -22,24 +22,24 @@ s! { pub __pad2: c_int, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2usize]>, 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 737438a594efb..711863ecb736e 100644 --- a/src/unix/linux_like/linux/musl/b32/x86/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/x86/mod.rs @@ -27,17 +27,17 @@ s! { #[cfg(musl32_time64)] __st_ctim32: Padding<__c_anonymous_timespec32>, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, pub st_ino: crate::ino_t, 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 47f29d5e11abf..38742562eab6f 100644 --- a/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs @@ -24,24 +24,24 @@ s! { __pad1: Padding, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, __unused: Padding<[c_uint; 2]>, diff --git a/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs b/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs index 29f7d49cc8320..025698f4fcb13 100644 --- a/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs @@ -27,24 +27,24 @@ s! { __pad2: Padding, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2usize]>, diff --git a/src/unix/linux_like/linux/musl/b64/mips64.rs b/src/unix/linux_like/linux/musl/b64/mips64.rs index d05b40bd38a11..79fb2a05a331c 100644 --- a/src/unix/linux_like/linux/musl/b64/mips64.rs +++ b/src/unix/linux_like/linux/musl/b64/mips64.rs @@ -23,24 +23,24 @@ s! { pub st_size: off_t, __pad3: Padding, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, diff --git a/src/unix/linux_like/linux/musl/b64/powerpc64.rs b/src/unix/linux_like/linux/musl/b64/powerpc64.rs index 6e0d6db6a1978..88e3bfb0bb611 100644 --- a/src/unix/linux_like/linux/musl/b64/powerpc64.rs +++ b/src/unix/linux_like/linux/musl/b64/powerpc64.rs @@ -34,24 +34,24 @@ s! { pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, __unused: Padding<[c_long; 3]>, 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 ba9bebd84cc73..7164c365527b0 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs @@ -27,24 +27,24 @@ s! { __pad2: Padding, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2usize]>, diff --git a/src/unix/linux_like/linux/musl/b64/s390x.rs b/src/unix/linux_like/linux/musl/b64/s390x.rs index 7776e10b60dce..be8452d0905b2 100644 --- a/src/unix/linux_like/linux/musl/b64/s390x.rs +++ b/src/unix/linux_like/linux/musl/b64/s390x.rs @@ -41,24 +41,24 @@ s! { pub st_rdev: crate::dev_t, pub st_size: off_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, diff --git a/src/unix/linux_like/linux/musl/b64/wasm32/mod.rs b/src/unix/linux_like/linux/musl/b64/wasm32/mod.rs index 06b34c25d9238..b4e775e8b3023 100644 --- a/src/unix/linux_like/linux/musl/b64/wasm32/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/wasm32/mod.rs @@ -25,24 +25,24 @@ s! { pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, __unused: Padding<[c_long; 3]>, 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 ec9a31bccf577..e626fadb7484a 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 @@ -24,24 +24,24 @@ s! { pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] + #[cfg(not(musl_stat_timespec))] pub st_ctime_nsec: c_long, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] + #[cfg(musl_stat_timespec)] pub st_ctim: crate::timespec, __unused: Padding<[c_long; 3]>,