From 8341f11a836dc8ef5d7859ae20b78135f7d43be5 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Fri, 5 Dec 2025 12:12:00 +0000 Subject: [PATCH 01/15] Fuchsia: change struct stat/stat64 times to timespec Source: https://cs.opensource.google/fuchsia/fuchsia/+/main:zircon/third_party/ulib/musl/include/bits/stat.h;bpv=1;bpt=1 --- src/fuchsia/aarch64.rs | 18 ++++++------------ src/fuchsia/riscv64.rs | 9 +++------ src/fuchsia/x86_64.rs | 18 ++++++------------ 3 files changed, 15 insertions(+), 30 deletions(-) diff --git a/src/fuchsia/aarch64.rs b/src/fuchsia/aarch64.rs index 93090f7238d7a..3a1a57f308a7b 100644 --- a/src/fuchsia/aarch64.rs +++ b/src/fuchsia/aarch64.rs @@ -20,12 +20,9 @@ s! { pub st_blksize: crate::blksize_t, __pad1: Padding, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_uint; 2]>, } @@ -42,12 +39,9 @@ s! { pub st_blksize: crate::blksize_t, __pad1: Padding, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_uint; 2]>, } diff --git a/src/fuchsia/riscv64.rs b/src/fuchsia/riscv64.rs index bc93cc3bff0a9..c1df58f68e2d1 100644 --- a/src/fuchsia/riscv64.rs +++ b/src/fuchsia/riscv64.rs @@ -22,12 +22,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timepsec, + pub st_ctim: crate::timespec, __unused: Padding<[c_long; 3]>, } diff --git a/src/fuchsia/x86_64.rs b/src/fuchsia/x86_64.rs index fc42cd9810985..abd88e99725c5 100644 --- a/src/fuchsia/x86_64.rs +++ b/src/fuchsia/x86_64.rs @@ -19,12 +19,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_long; 3]>, } @@ -40,12 +37,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __reserved: Padding<[c_long; 3]>, } From 9efeb9aadbb64048232e05758e602081323b1262 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Fri, 5 Dec 2025 12:19:40 +0000 Subject: [PATCH 02/15] Haiku: change struct stat/stat64 times to timespec Source: https://github.com/haiku/haiku/blob/3b66de32f47f31ad66891eab9c91daf17410f3eb/headers/posix/sys/stat.h#L13 --- libc-test/build.rs | 11 ----------- src/unix/haiku/mod.rs | 12 ++++-------- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index e6618beb295cd..2efee959a29de 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -5262,17 +5262,6 @@ fn test_haiku(target: &str) { cfg.skip_struct_field(move |struct_, field| { match (struct_.ident(), field.ident()) { - // FIXME(time): the stat struct actually has timespec members, whereas - // the current representation has these unpacked. - ("stat", "st_atime") => true, - ("stat", "st_atime_nsec") => true, - ("stat", "st_mtime") => true, - ("stat", "st_mtime_nsec") => true, - ("stat", "st_ctime") => true, - ("stat", "st_ctime_nsec") => true, - ("stat", "st_crtime") => true, - ("stat", "st_crtime_nsec") => true, - // these are actually unions, but we cannot represent it well ("sem_t", "named_sem_id") => true, ("sigaction", "sa_sigaction") => true, diff --git a/src/unix/haiku/mod.rs b/src/unix/haiku/mod.rs index 3136ba3f6485a..c4a20b4481a45 100644 --- a/src/unix/haiku/mod.rs +++ b/src/unix/haiku/mod.rs @@ -262,14 +262,10 @@ s! { pub st_size: off_t, pub st_rdev: dev_t, pub st_blksize: blksize_t, - pub st_atime: time_t, - pub st_atime_nsec: c_long, - pub st_mtime: time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: time_t, - pub st_ctime_nsec: c_long, - pub st_crtime: time_t, - pub st_crtime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, + pub st_crtim: crate::timespec, pub st_type: u32, pub st_blocks: blkcnt_t, } From 38960b5087bc3942d223bc00055eb2135a4d2fc4 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Fri, 5 Dec 2025 12:26:24 +0000 Subject: [PATCH 03/15] Solarish: change struct stat/stat64 times to timespec Source: https://github.com/illumos/illumos-gate/blob/5882dd1367bb5bcc67b3d8719c715fe3feb0de15/usr/src/uts/common/sys/stat.h#L72 Note: timestruc_t is an alias for struct timespec: https://github.com/illumos/illumos-gate/blob/5882dd1367bb5bcc67b3d8719c715fe3feb0de15/usr/src/uts/common/sys/time_impl.h#L81 --- libc-test/build.rs | 4 ---- src/unix/solarish/mod.rs | 9 +++------ 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 2efee959a29de..0eed6f7806915 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -1046,10 +1046,6 @@ fn test_solarish(target: &str) { match struct_.ident() { // rust struct was committed with typo for Solaris "door_arg_t" if field.ident() == "dec_num" => Some("desc_num".to_string()), - "stat" if field.ident().ends_with("_nsec") => { - // expose stat.Xtim.tv_nsec fields - Some(field.ident().trim_end_matches("e_nsec").to_string() + ".tv_nsec") - } _ => None, } }); diff --git a/src/unix/solarish/mod.rs b/src/unix/solarish/mod.rs index 963246732c437..bd181c15fcad6 100644 --- a/src/unix/solarish/mod.rs +++ b/src/unix/solarish/mod.rs @@ -319,12 +319,9 @@ s! { pub st_gid: crate::gid_t, pub st_rdev: crate::dev_t, pub st_size: off_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, pub st_fstype: [c_char; _ST_FSTYPSZ as usize], From 83b237cce5880865af5f5d651300b0c9cdca2412 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Fri, 5 Dec 2025 12:35:28 +0000 Subject: [PATCH 04/15] Emscripten: change struct stat/stat64 times to timespec Source: https://github.com/emscripten-core/emscripten/blob/81bbaa42a7827d88a71bd89701245052c622428c/system/lib/libc/musl/arch/emscripten/bits/stat.h#L22 --- libc-test/build.rs | 11 ----------- src/unix/linux_like/emscripten/mod.rs | 9 +++------ 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 0eed6f7806915..7fac80244c297 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3064,17 +3064,6 @@ fn test_emscripten(target: &str) { } }); - cfg.rename_struct_field(move |struct_, field| { - match field.ident() { - // Our stat *_nsec fields normally don't actually exist but are part - // of a timeval struct - s if s.ends_with("_nsec") && struct_.ident().starts_with("stat") => { - Some(s.replace("e_nsec", ".tv_nsec")) - } - _ => None, - } - }); - cfg.skip_alias(move |ty| { match ty.ident() { // sighandler_t is crazy across platforms diff --git a/src/unix/linux_like/emscripten/mod.rs b/src/unix/linux_like/emscripten/mod.rs index 711ed8f8b4c37..35cab938b87fa 100644 --- a/src/unix/linux_like/emscripten/mod.rs +++ b/src/unix/linux_like/emscripten/mod.rs @@ -230,12 +230,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_ino: crate::ino_t, } From 0c3150ef85c173d63277d5d022cf3d26b509f7e1 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Fri, 5 Dec 2025 12:40:34 +0000 Subject: [PATCH 05/15] Cygwin: change struct stat/stat64 times to timespec Source: https://github.com/cygwin/cygwin/blob/0d34ce2d787f0eff2e4bb4d483d4344f3f6bc37b/winsup/cygwin/include/cygwin/stat.h#L17 --- libc-test/build.rs | 6 ------ src/unix/cygwin/mod.rs | 12 ++++-------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 7fac80244c297..7b51391ff3e3f 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -694,12 +694,6 @@ fn test_cygwin(target: &str) { cfg.rename_struct_field(move |struct_, field| { match field.ident() { - // Our stat *_nsec fields normally don't actually exist but are part - // of a timeval struct - s if s.ends_with("_nsec") && struct_.ident().starts_with("stat") => { - Some(s.replace("e_nsec", ".tv_nsec")) - } - // FIXME(cygwin): sigaction actually contains a union with two variants: // a sa_sigaction with type: (*)(int, struct __siginfo *, void *) // a sa_handler with type sig_t diff --git a/src/unix/cygwin/mod.rs b/src/unix/cygwin/mod.rs index 0c093a4c17726..fb4fe9e2975cd 100644 --- a/src/unix/cygwin/mod.rs +++ b/src/unix/cygwin/mod.rs @@ -381,16 +381,12 @@ s! { pub st_gid: gid_t, pub st_rdev: dev_t, pub st_size: off_t, - pub st_atime: time_t, - pub st_atime_nsec: c_long, - pub st_mtime: time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: time_t, - pub st_ctime_nsec: c_long, + pub st_atim: timespec, + pub st_mtim: timespec, + pub st_ctim: timespec, pub st_blksize: blksize_t, pub st_blocks: blkcnt_t, - pub st_birthtime: time_t, - pub st_birthtime_nsec: c_long, + pub st_birthtim: timespec, } pub struct in_addr { From fb6579b9f29293fa1a68a5041bcdf421a158892b Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Sat, 6 Dec 2025 06:55:11 +0000 Subject: [PATCH 06/15] FreeBSD: change struct stat/stat64 times to timespec Source: https://github.com/freebsd/freebsd-src/blob/ced74610217ff0be071e4614c64a4ff66c40bc6b/sys/sys/stat.h#L157 --- libc-test/build.rs | 5 ----- src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs | 12 ++++-------- src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs | 13 ++++--------- src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs | 12 ++++-------- src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs | 12 ++++-------- src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs | 12 ++++-------- src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs | 12 ++++-------- 7 files changed, 24 insertions(+), 54 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 7b51391ff3e3f..835b858ba87a3 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -2471,11 +2471,6 @@ fn test_freebsd(target: &str) { cfg.rename_struct_field(|struct_, field_| { let struct_ = struct_.ident(); let replacement = match field_.ident() { - // Our stat *_nsec fields normally don't actually exist but are part - // of a timeval struct - s if s.ends_with("_nsec") && struct_.starts_with("stat") => { - s.replace("e_nsec", ".tv_nsec") - } // Field is named `type` in C but that is a Rust keyword, // so these fields are translated to `type_` in the bindings. "type_" if struct_ == "rtprio" => "type".to_string(), diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs index cd0c3e071012f..c3da0c7117a16 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs @@ -10,20 +10,16 @@ s! { pub st_uid: crate::uid_t, pub st_gid: crate::gid_t, pub st_rdev: crate::dev_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_size: off_t, pub st_blocks: crate::blkcnt_t, pub st_blksize: crate::blksize_t, pub st_flags: crate::fflags_t, pub st_gen: u32, pub st_lspare: i32, - pub st_birthtime: crate::time_t, - pub st_birthtime_nsec: c_long, + pub st_birthtim: crate::timespec, __unused: Padding<[u8; 8]>, } } diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs index 9e80a792a8c7b..2a96c5ce5db38 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs @@ -1,5 +1,4 @@ use crate::off_t; -use crate::prelude::*; s! { pub struct stat { @@ -10,19 +9,15 @@ s! { pub st_uid: crate::uid_t, pub st_gid: crate::gid_t, pub st_rdev: crate::dev_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_size: off_t, pub st_blocks: crate::blkcnt_t, pub st_blksize: crate::blksize_t, pub st_flags: crate::fflags_t, pub st_gen: u32, pub st_lspare: i32, - pub st_birthtime: crate::time_t, - pub st_birthtime_nsec: c_long, + pub st_birthtim: crate::timespec, } } diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs index 418c1b34f02b7..48456203b8833 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs @@ -233,20 +233,16 @@ s! { pub st_rdev: crate::dev_t, #[cfg(target_arch = "x86")] st_atim_ext: i32, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, + pub st_atim: crate::timespec, #[cfg(target_arch = "x86")] st_mtim_ext: i32, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, + pub st_mtim: crate::timespec, #[cfg(target_arch = "x86")] st_ctim_ext: i32, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_ctim: crate::timespec, #[cfg(target_arch = "x86")] st_btim_ext: i32, - pub st_birthtime: crate::time_t, - pub st_birthtime_nsec: c_long, + pub st_birthtim: crate::timespec, pub st_size: off_t, pub st_blocks: crate::blkcnt_t, pub st_blksize: crate::blksize_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs index 3367a1e2be418..368f85833e557 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs @@ -246,20 +246,16 @@ s! { pub st_rdev: crate::dev_t, #[cfg(target_arch = "x86")] st_atim_ext: i32, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, + pub st_atim: crate::timespec, #[cfg(target_arch = "x86")] st_mtim_ext: i32, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, + pub st_mtim: crate::timespec, #[cfg(target_arch = "x86")] st_ctim_ext: i32, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_ctim: crate::timespec, #[cfg(target_arch = "x86")] st_btim_ext: i32, - pub st_birthtime: crate::time_t, - pub st_birthtime_nsec: c_long, + pub st_birthtim: crate::timespec, pub st_size: off_t, pub st_blocks: crate::blkcnt_t, pub st_blksize: crate::blksize_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs index 61fa838b5b20e..c3dd38da955a0 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs @@ -247,20 +247,16 @@ s! { pub st_rdev: crate::dev_t, #[cfg(target_arch = "x86")] st_atim_ext: i32, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, + pub st_atim: crate::timespec, #[cfg(target_arch = "x86")] st_mtim_ext: i32, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, + pub st_mtim: crate::timespec, #[cfg(target_arch = "x86")] st_ctim_ext: i32, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_ctim: crate::timespec, #[cfg(target_arch = "x86")] st_btim_ext: i32, - pub st_birthtime: crate::time_t, - pub st_birthtime_nsec: c_long, + pub st_birthtim: crate::timespec, pub st_size: off_t, pub st_blocks: crate::blkcnt_t, pub st_blksize: crate::blksize_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs index ca2dcd5c8f4e8..17f2889cdec66 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs @@ -249,20 +249,16 @@ s! { pub st_rdev: crate::dev_t, #[cfg(target_arch = "x86")] st_atim_ext: i32, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, + pub st_atim: crate::timespec, #[cfg(target_arch = "x86")] st_mtim_ext: i32, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, + pub st_mtim: crate::timespec, #[cfg(target_arch = "x86")] st_ctim_ext: i32, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_ctim: crate::timespec, #[cfg(target_arch = "x86")] st_btim_ext: i32, - pub st_birthtime: crate::time_t, - pub st_birthtime_nsec: c_long, + pub st_birthtim: crate::timespec, pub st_size: off_t, pub st_blocks: crate::blkcnt_t, pub st_blksize: crate::blksize_t, From 27add7bab31fdf62f94f73aa598e1ee2e4d3f701 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Sat, 6 Dec 2025 07:00:54 +0000 Subject: [PATCH 07/15] DragonflyBSD: change struct stat/stat64 times to timespec Source: https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/stat.h --- libc-test/build.rs | 5 ----- src/unix/bsd/freebsdlike/dragonfly/mod.rs | 9 +++------ 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 835b858ba87a3..5f8538af14edf 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -1609,11 +1609,6 @@ fn test_dragonflybsd(target: &str) { cfg.rename_struct_field(move |struct_, field| { match field.ident() { - // Our stat *_nsec fields normally don't actually exist but are part - // of a timeval struct - s if s.ends_with("_nsec") && struct_.ident().starts_with("stat") => { - Some(s.replace("e_nsec", ".tv_nsec")) - } // Field is named `type` in C but that is a Rust keyword, // so these fields are translated to `type_` in the bindings. "type_" if struct_.ident() == "rtprio" => Some("type".to_string()), diff --git a/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/src/unix/bsd/freebsdlike/dragonfly/mod.rs index 0283bd4afb4a9..54f7b6091f503 100644 --- a/src/unix/bsd/freebsdlike/dragonfly/mod.rs +++ b/src/unix/bsd/freebsdlike/dragonfly/mod.rs @@ -144,12 +144,9 @@ s! { pub st_uid: crate::uid_t, pub st_gid: crate::gid_t, pub st_rdev: crate::dev_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_size: off_t, pub st_blocks: i64, pub __old_st_blksize: u32, From 5d6589e414f32d877f7be144a78a8406b5b7b02c Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Sat, 6 Dec 2025 07:11:11 +0000 Subject: [PATCH 08/15] OpenBSD: change struct stat/stat64 times to timespec Source: https://github.com/openbsd/src/blob/976c316f788ad8622366f6452e787413e76fede1/sys/sys/stat.h#L53 --- libc-test/build.rs | 9 +-------- src/unix/bsd/netbsdlike/openbsd/mod.rs | 12 ++++-------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 5f8538af14edf..0683e446a9d26 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -540,14 +540,7 @@ fn test_openbsd(target: &str) { cfg.rename_struct_field(|struct_, field_| { let struct_ = struct_.ident(); let replacement = match field_.ident() { - "st_birthtime" if struct_.starts_with("stat") => "__st_birthtime".to_string(), - "st_birthtime_nsec" if struct_.starts_with("stat") => "__st_birthtimensec".to_string(), - - // Our stat *_nsec fields normally don't actually exist but are part - // of a timeval struct - s if s.ends_with("_nsec") && struct_.starts_with("stat") => { - s.replace("e_nsec", ".tv_nsec") - } + "st_birthtim" if struct_.starts_with("stat") => "__st_birthtim".to_string(), "sa_sigaction" if struct_ == "sigaction" => "sa_handler".to_string(), diff --git a/src/unix/bsd/netbsdlike/openbsd/mod.rs b/src/unix/bsd/netbsdlike/openbsd/mod.rs index e642ef18ebc27..927ad85d1b83d 100644 --- a/src/unix/bsd/netbsdlike/openbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/openbsd/mod.rs @@ -267,19 +267,15 @@ s! { pub st_uid: crate::uid_t, pub st_gid: crate::gid_t, pub st_rdev: crate::dev_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_size: off_t, pub st_blocks: crate::blkcnt_t, pub st_blksize: crate::blksize_t, pub st_flags: u32, pub st_gen: u32, - pub st_birthtime: crate::time_t, - pub st_birthtime_nsec: c_long, + pub st_birthtim: crate::timespec, } pub struct statvfs { From 1c00696a16081e869e7581c0d2373843f2ac6055 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Sat, 6 Dec 2025 07:16:24 +0000 Subject: [PATCH 09/15] NetBSD: change struct stat/stat64 times to timespec Source: https://github.com/NetBSD/src/blob/c802b18990b9adaa6593241cd6a8b3bf4ce9753d/sys/sys/stat.h#L67 --- libc-test/build.rs | 11 ----------- src/unix/bsd/netbsdlike/netbsd/mod.rs | 12 ++++-------- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 0683e446a9d26..fc96f77875d08 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -1307,17 +1307,6 @@ fn test_netbsd(target: &str) { _ => None, }); - cfg.rename_struct_field(move |struct_, field| { - match field.ident() { - // Our stat *_nsec fields normally don't actually exist but are part - // of a timeval struct - s if s.ends_with("_nsec") && struct_.ident().starts_with("stat") => { - Some(s.replace("e_nsec", ".tv_nsec")) - } - _ => None, - } - }); - cfg.alias_is_c_enum(|ty| ty == "fae_action"); cfg.skip_alias(move |ty| { diff --git a/src/unix/bsd/netbsdlike/netbsd/mod.rs b/src/unix/bsd/netbsdlike/netbsd/mod.rs index 50e45dbebe737..aacbf4b40411d 100644 --- a/src/unix/bsd/netbsdlike/netbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/netbsd/mod.rs @@ -194,14 +194,10 @@ s! { pub st_uid: crate::uid_t, pub st_gid: crate::gid_t, pub st_rdev: crate::dev_t, - pub st_atime: crate::time_t, - pub st_atimensec: c_long, - pub st_mtime: crate::time_t, - pub st_mtimensec: c_long, - pub st_ctime: crate::time_t, - pub st_ctimensec: c_long, - pub st_birthtime: crate::time_t, - pub st_birthtimensec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, + pub st_birthtim: crate::timespec, pub st_size: off_t, pub st_blocks: crate::blkcnt_t, pub st_blksize: crate::blksize_t, From ab1be6dc44e8f7553e4d0ec6f28df8e3b1581dc3 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Tue, 21 Apr 2026 10:38:16 +0000 Subject: [PATCH 10/15] Redox: change struct stat/stat64 times to timespec Source: https://github.com/redox-os/relibc/blob/30cc2de953d5dfe319b9e0d5755ec6437c88e307/src/header/sys_stat/mod.rs#L73-L75 --- src/unix/redox/mod.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/unix/redox/mod.rs b/src/unix/redox/mod.rs index 235a067411442..98ee53dcf92ea 100644 --- a/src/unix/redox/mod.rs +++ b/src/unix/redox/mod.rs @@ -197,12 +197,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, _pad: Padding<[c_char; 24]>, } From 7f49448935029a2ecf0f830b9d0faec530489970 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Sat, 6 Dec 2025 07:19:08 +0000 Subject: [PATCH 11/15] GNU: change struct stat/stat64 times to timespec Souce: https://man7.org/linux/man-pages/man3/stat.3type.html --- src/unix/linux_like/linux/gnu/b32/arm/mod.rs | 15 ++-------- src/unix/linux_like/linux/gnu/b32/csky/mod.rs | 9 ++---- src/unix/linux_like/linux/gnu/b32/m68k/mod.rs | 9 ++---- src/unix/linux_like/linux/gnu/b32/mips/mod.rs | 30 ++++--------------- src/unix/linux_like/linux/gnu/b32/mod.rs | 15 ++-------- src/unix/linux_like/linux/gnu/b32/powerpc.rs | 30 ++++--------------- .../linux_like/linux/gnu/b32/riscv32/mod.rs | 9 ++---- .../linux_like/linux/gnu/b32/sparc/mod.rs | 18 ++++------- src/unix/linux_like/linux/gnu/b32/x86/mod.rs | 15 ++-------- .../linux_like/linux/gnu/b64/aarch64/mod.rs | 18 ++++------- .../linux/gnu/b64/loongarch64/mod.rs | 18 ++++------- .../linux_like/linux/gnu/b64/mips64/mod.rs | 18 ++++------- .../linux_like/linux/gnu/b64/powerpc64/mod.rs | 18 ++++------- .../linux_like/linux/gnu/b64/riscv64/mod.rs | 18 ++++------- src/unix/linux_like/linux/gnu/b64/s390x.rs | 18 ++++------- .../linux_like/linux/gnu/b64/sparc64/mod.rs | 18 ++++------- .../linux_like/linux/gnu/b64/x86_64/mod.rs | 18 ++++------- 17 files changed, 84 insertions(+), 210 deletions(-) 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 d05bccf3811ac..c5640a1046946 100644 --- a/src/unix/linux_like/linux/gnu/b32/arm/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/arm/mod.rs @@ -81,18 +81,9 @@ s! { pub st_size: off64_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - #[cfg(gnu_time_bits64)] - _atime_pad: Padding, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - #[cfg(gnu_time_bits64)] - _mtime_pad: Padding, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, - #[cfg(gnu_time_bits64)] - _ctime_pad: Padding, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, #[cfg(not(gnu_time_bits64))] pub st_ino: crate::ino64_t, } 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 dc88c635f1168..77dfc198d6d8c 100644 --- a/src/unix/linux_like/linux/gnu/b32/csky/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/csky/mod.rs @@ -75,12 +75,9 @@ s! { pub st_size: off64_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_ino: crate::ino64_t, } 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 2d91f986b76a0..fbe0280ae5470 100644 --- a/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs @@ -75,12 +75,9 @@ s! { pub st_size: off64_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_ulong, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_ulong, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_ulong, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_ino: crate::ino64_t, } 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 18bb1933925f0..5a4f93760658f 100644 --- a/src/unix/linux_like/linux/gnu/b32/mips/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mips/mod.rs @@ -43,18 +43,9 @@ s! { #[cfg(gnu_time_bits64)] pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - #[cfg(gnu_time_bits64)] - _atime_pad: Padding, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - #[cfg(gnu_time_bits64)] - _mtime_pad: Padding, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - #[cfg(gnu_time_bits64)] - _ctime_pad: Padding, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, #[cfg(not(gnu_time_bits64))] pub st_blksize: crate::blksize_t, @@ -96,18 +87,9 @@ s! { #[cfg(gnu_time_bits64)] pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - #[cfg(gnu_time_bits64)] - _atime_pad: Padding, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - #[cfg(gnu_time_bits64)] - _mtime_pad: Padding, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - #[cfg(gnu_time_bits64)] - _ctime_pad: Padding, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, #[cfg(not(gnu_time_bits64))] pub st_blksize: crate::blksize_t, diff --git a/src/unix/linux_like/linux/gnu/b32/mod.rs b/src/unix/linux_like/linux/gnu/b32/mod.rs index d9aebbe0efda8..b053d4f8cc741 100644 --- a/src/unix/linux_like/linux/gnu/b32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mod.rs @@ -103,18 +103,9 @@ cfg_if! { pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - #[cfg(gnu_time_bits64)] - _atime_pad: Padding, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - #[cfg(gnu_time_bits64)] - _mtime_pad: Padding, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, - #[cfg(gnu_time_bits64)] - _ctime_pad: Padding, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, #[cfg(not(gnu_file_offset_bits64))] __glibc_reserved4: Padding, diff --git a/src/unix/linux_like/linux/gnu/b32/powerpc.rs b/src/unix/linux_like/linux/gnu/b32/powerpc.rs index b5d3631a6fcf2..f2a033629cc76 100644 --- a/src/unix/linux_like/linux/gnu/b32/powerpc.rs +++ b/src/unix/linux_like/linux/gnu/b32/powerpc.rs @@ -77,18 +77,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - #[cfg(gnu_time_bits64)] - _atime_pad: Padding, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - #[cfg(gnu_time_bits64)] - _mtime_pad: Padding, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - #[cfg(gnu_time_bits64)] - _ctime_pad: Padding, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, #[cfg(not(gnu_time_bits64))] __glibc_reserved4: Padding, #[cfg(not(gnu_time_bits64))] @@ -108,18 +99,9 @@ s! { pub st_size: off64_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - #[cfg(gnu_time_bits64)] - _atime_pad: Padding, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - #[cfg(gnu_time_bits64)] - _mtime_pad: Padding, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - #[cfg(gnu_time_bits64)] - _ctime_pad: Padding, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, #[cfg(not(gnu_time_bits64))] __glibc_reserved4: Padding, #[cfg(not(gnu_time_bits64))] 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 5484a68bd1ec1..38a32d4ce1e50 100644 --- a/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs @@ -36,12 +36,9 @@ s! { pub st_blksize: crate::blksize_t, pub __pad2: c_int, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2]>, } 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 75fefcd9401a8..343b837fc9691 100644 --- a/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs @@ -80,12 +80,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __glibc_reserved4: Padding, __glibc_reserved5: Padding, } @@ -102,12 +99,9 @@ s! { pub st_size: off64_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __glibc_reserved4: Padding, __glibc_reserved5: Padding, } 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 97429dad64285..dd912e372eb3a 100644 --- a/src/unix/linux_like/linux/gnu/b32/x86/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/x86/mod.rs @@ -155,18 +155,9 @@ s! { pub st_size: off64_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - #[cfg(gnu_time_bits64)] - _atime_pad: Padding, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - #[cfg(gnu_time_bits64)] - _mtime_pad: Padding, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, - #[cfg(gnu_time_bits64)] - _ctime_pad: Padding, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, #[cfg(not(gnu_time_bits64))] pub st_ino: crate::ino64_t, } 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 b8c55dc33c89f..9920c375df85a 100644 --- a/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs @@ -70,12 +70,9 @@ s! { pub st_blksize: crate::blksize_t, __pad2: Padding, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2]>, } @@ -92,12 +89,9 @@ s! { pub st_blksize: crate::blksize_t, __pad2: Padding, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2]>, } 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 3f01da8c0b989..0b798f83a9714 100644 --- a/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs @@ -27,12 +27,9 @@ s! { pub st_blksize: crate::blksize_t, __pad2: Padding, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2]>, } @@ -49,12 +46,9 @@ s! { pub st_blksize: crate::blksize_t, pub __pad2: c_int, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2]>, } 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 dfec9203361d0..ac61d0efd9858 100644 --- a/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs @@ -25,12 +25,9 @@ s! { st_pad2: Padding<[c_ulong; 1]>, pub st_size: off_t, st_pad3: Padding, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, st_pad4: Padding, pub st_blocks: crate::blkcnt_t, @@ -79,12 +76,9 @@ s! { pub st_rdev: c_ulong, st_pad2: Padding<[c_long; 2]>, pub st_size: off64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, st_pad3: Padding, pub st_blocks: crate::blkcnt64_t, 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 ee2cd21dec783..293c3c815b607 100644 --- a/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs @@ -72,12 +72,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_long; 3]>, } @@ -93,12 +90,9 @@ s! { pub st_size: off64_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __reserved: Padding<[c_long; 3]>, } 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 cbb1502ebcc01..c084249abf03d 100644 --- a/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs @@ -34,12 +34,9 @@ s! { pub st_blksize: crate::blksize_t, pub __pad2: c_int, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2usize]>, } @@ -56,12 +53,9 @@ s! { pub st_blksize: crate::blksize_t, pub __pad2: c_int, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_int; 2]>, } diff --git a/src/unix/linux_like/linux/gnu/b64/s390x.rs b/src/unix/linux_like/linux/gnu/b64/s390x.rs index 9c4c2f81772b6..0ee679ec690ff 100644 --- a/src/unix/linux_like/linux/gnu/b64/s390x.rs +++ b/src/unix/linux_like/linux/gnu/b64/s390x.rs @@ -81,12 +81,9 @@ s! { st_pad0: Padding, pub st_rdev: crate::dev_t, pub st_size: off_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, __glibc_reserved: Padding<[c_long; 3]>, @@ -102,12 +99,9 @@ s! { st_pad0: Padding, pub st_rdev: crate::dev_t, pub st_size: off_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, __glibc_reserved: Padding<[c_long; 3]>, 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 0b32562339690..d1d32d39c5b0e 100644 --- a/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs @@ -93,12 +93,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_long; 2]>, } @@ -115,12 +112,9 @@ s! { pub st_size: off64_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __reserved: Padding<[c_long; 2]>, } 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 7edd7c5664001..67bbab0f976e5 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 @@ -91,12 +91,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: i64, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: i64, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: i64, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[i64; 3]>, } @@ -112,12 +109,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: i64, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: i64, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: i64, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __reserved: Padding<[i64; 3]>, } From 14f3091371dd3398b0d8c444faa3b7ce7ee3885f Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Sat, 6 Dec 2025 07:40:00 +0000 Subject: [PATCH 12/15] uClibc: change struct stat/stat64 times to timespec Source: https://github.com/wbx-github/uclibc-ng/blob/3dcc84c74ece048b62c992edceab9cce54446f57/libc/sysdeps/linux/common-generic/bits/stat.h#L32 --- src/unix/linux_like/linux/uclibc/arm/mod.rs | 18 ++++++------------ .../linux_like/linux/uclibc/mips/mips32/mod.rs | 18 ++++++------------ .../linux_like/linux/uclibc/mips/mips64/mod.rs | 18 ++++++------------ src/unix/linux_like/linux/uclibc/x86_64/mod.rs | 9 +++------ 4 files changed, 21 insertions(+), 42 deletions(-) diff --git a/src/unix/linux_like/linux/uclibc/arm/mod.rs b/src/unix/linux_like/linux/uclibc/arm/mod.rs index 26dd49b24465b..6fb0cf79024b3 100644 --- a/src/unix/linux_like/linux/uclibc/arm/mod.rs +++ b/src/unix/linux_like/linux/uclibc/arm/mod.rs @@ -55,12 +55,9 @@ s! { pub st_size: off_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused4: Padding, __unused5: Padding, } @@ -78,12 +75,9 @@ s! { pub st_size: off64_t, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_ino: crate::ino64_t, } 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 93ed7ab213335..c3ce5914c77fe 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs @@ -30,12 +30,9 @@ s! { pub st_pad2: [c_long; 1], pub st_size: off_t, st_pad3: Padding, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, st_pad5: Padding<[c_long; 14]>, @@ -52,12 +49,9 @@ s! { pub st_rdev: crate::dev_t, st_pad2: Padding<[c_long; 2]>, pub st_size: off64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, st_pad3: Padding, pub st_blocks: crate::blkcnt64_t, 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 4495181400d48..5259ece814b73 100644 --- a/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs +++ b/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs @@ -25,12 +25,9 @@ s! { st_pad2: Padding<[c_ulong; 1]>, pub st_size: off_t, st_pad3: Padding, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, st_pad4: Padding, pub st_blocks: crate::blkcnt_t, @@ -48,12 +45,9 @@ s! { pub st_rdev: c_ulong, st_pad2: Padding<[c_long; 2]>, pub st_size: off64_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, st_pad3: Padding, pub st_blocks: crate::blkcnt64_t, 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 510b90b599108..cb9a5befa82b3 100644 --- a/src/unix/linux_like/linux/uclibc/x86_64/mod.rs +++ b/src/unix/linux_like/linux/uclibc/x86_64/mod.rs @@ -123,12 +123,9 @@ s! { pub st_size: off_t, // file size pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_ulong, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_ulong, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_ulong, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, st_pad4: Padding<[c_long; 3]>, } From 5322bdb07f7caa9a27bd6704a893523bc4204a90 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Sat, 20 Dec 2025 11:25:08 +0000 Subject: [PATCH 13/15] Android: change struct stat/stat64 times to timespec SOURCE: https://cs.android.com/android/platform/superproject/main/+/main:bionic/libc/include/sys/stat.h;l=44?ss=android%2Fplatform%2Fsuperproject%2Fmain --- libc-test/build.rs | 7 ------- src/unix/linux_like/android/b32/mod.rs | 18 ++++++------------ src/unix/linux_like/android/b64/aarch64/mod.rs | 18 ++++++------------ src/unix/linux_like/android/b64/riscv64/mod.rs | 18 ++++++------------ src/unix/linux_like/android/b64/x86_64/mod.rs | 18 ++++++------------ 5 files changed, 24 insertions(+), 55 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index fc96f77875d08..721c8485c226a 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -1951,13 +1951,6 @@ fn test_android(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 - ("stat" | "statfs" | "statvfs" | "stat64" | "statfs64" | "statvfs64", f) - if f.ends_with("_nsec") => - { - Some(f.to_string()) - } // The following structs have a field called `type` in C, // but `type` is a Rust keyword, so these fields are translated // to `type_` in Rust. diff --git a/src/unix/linux_like/android/b32/mod.rs b/src/unix/linux_like/android/b32/mod.rs index d0c2349b98c62..6a6eab04a7f3e 100644 --- a/src/unix/linux_like/android/b32/mod.rs +++ b/src/unix/linux_like/android/b32/mod.rs @@ -39,12 +39,9 @@ s! { pub st_size: c_longlong, pub st_blksize: crate::blksize_t, pub st_blocks: c_ulonglong, - pub st_atime: c_long, - pub st_atime_nsec: c_long, - pub st_mtime: c_long, - pub st_mtime_nsec: c_long, - pub st_ctime: c_long, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_ino: c_ulonglong, } @@ -61,12 +58,9 @@ s! { pub st_size: c_longlong, pub st_blksize: crate::blksize_t, pub st_blocks: c_ulonglong, - pub st_atime: c_long, - pub st_atime_nsec: c_long, - pub st_mtime: c_long, - pub st_mtime_nsec: c_long, - pub st_ctime: c_long, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, pub st_ino: c_ulonglong, } diff --git a/src/unix/linux_like/android/b64/aarch64/mod.rs b/src/unix/linux_like/android/b64/aarch64/mod.rs index 3cc6fc837693e..b0e76c801a22d 100644 --- a/src/unix/linux_like/android/b64/aarch64/mod.rs +++ b/src/unix/linux_like/android/b64/aarch64/mod.rs @@ -19,12 +19,9 @@ s! { pub st_blksize: c_int, __pad2: Padding, pub st_blocks: c_long, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused4: Padding, __unused5: Padding, } @@ -42,12 +39,9 @@ s! { pub st_blksize: c_int, __pad2: Padding, pub st_blocks: c_long, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused4: Padding, __unused5: Padding, } diff --git a/src/unix/linux_like/android/b64/riscv64/mod.rs b/src/unix/linux_like/android/b64/riscv64/mod.rs index dded1292b393f..7f882bd95973e 100644 --- a/src/unix/linux_like/android/b64/riscv64/mod.rs +++ b/src/unix/linux_like/android/b64/riscv64/mod.rs @@ -20,12 +20,9 @@ s! { pub st_blksize: c_int, __pad2: Padding, pub st_blocks: c_long, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused4: Padding, __unused5: Padding, } @@ -43,12 +40,9 @@ s! { pub st_blksize: c_int, __pad2: Padding, pub st_blocks: c_long, - pub st_atime: crate::time_t, - pub st_atime_nsec: c_long, - pub st_mtime: crate::time_t, - pub st_mtime_nsec: c_long, - pub st_ctime: crate::time_t, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused4: Padding, __unused5: Padding, } 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 0f3b74131449a..8041bef904884 100644 --- a/src/unix/linux_like/android/b64/x86_64/mod.rs +++ b/src/unix/linux_like/android/b64/x86_64/mod.rs @@ -18,12 +18,9 @@ s! { pub st_size: off64_t, pub st_blksize: c_long, pub st_blocks: c_long, - pub st_atime: c_long, - pub st_atime_nsec: c_long, - pub st_mtime: c_long, - pub st_mtime_nsec: c_long, - pub st_ctime: c_long, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_long; 3]>, } @@ -38,12 +35,9 @@ s! { pub st_size: off64_t, pub st_blksize: c_long, pub st_blocks: c_long, - pub st_atime: c_long, - pub st_atime_nsec: c_long, - pub st_mtime: c_long, - pub st_mtime_nsec: c_long, - pub st_ctime: c_long, - pub st_ctime_nsec: c_long, + pub st_atim: crate::timespec, + pub st_mtim: crate::timespec, + pub st_ctim: crate::timespec, __unused: Padding<[c_long; 3]>, } From 67e904f83e91975f18f76a729c4777e694760be1 Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Tue, 21 Apr 2026 09:50:11 +0000 Subject: [PATCH 14/15] musl: change struct stat/stat64 times to timespec SOURCE: https://github.com/kraj/musl/blob/8cb84492b0245d70b2cd0edd523e2b55c7ad67a9/arch/generic/bits/stat.h#L14 --- src/unix/linux_like/linux/musl/b32/arm/mod.rs | 18 ++++++------------ src/unix/linux_like/linux/musl/b32/hexagon.rs | 16 ---------------- src/unix/linux_like/linux/musl/b32/mips/mod.rs | 18 ++++++------------ src/unix/linux_like/linux/musl/b32/powerpc.rs | 18 ++++++------------ .../linux_like/linux/musl/b32/riscv32/mod.rs | 16 ---------------- src/unix/linux_like/linux/musl/b32/x86/mod.rs | 18 ++++++------------ .../linux_like/linux/musl/b64/aarch64/mod.rs | 16 ---------------- .../linux/musl/b64/loongarch64/mod.rs | 16 ---------------- src/unix/linux_like/linux/musl/b64/mips64.rs | 16 ---------------- .../linux_like/linux/musl/b64/powerpc64.rs | 16 ---------------- .../linux_like/linux/musl/b64/riscv64/mod.rs | 16 ---------------- src/unix/linux_like/linux/musl/b64/s390x.rs | 16 ---------------- .../linux_like/linux/musl/b64/wasm32/mod.rs | 16 ---------------- .../linux_like/linux/musl/b64/x86_64/mod.rs | 16 ---------------- 14 files changed, 24 insertions(+), 208 deletions(-) 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..0f96453fde4f4 100644 --- a/src/unix/linux_like/linux/musl/b32/arm/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/arm/mod.rs @@ -27,18 +27,12 @@ s! { #[cfg(musl32_time64)] __st_ctim32: Padding<__c_anonymous_timespec32>, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, + #[cfg(not(musl32_time64))] + pub st_atim: crate::timespec, + #[cfg(not(musl32_time64))] + pub st_mtim: crate::timespec, + #[cfg(not(musl32_time64))] + pub st_ctim: crate::timespec, 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 9a62e4d57d6da..325ff28d6c03f 100644 --- a/src/unix/linux_like/linux/musl/b32/hexagon.rs +++ b/src/unix/linux_like/linux/musl/b32/hexagon.rs @@ -18,24 +18,8 @@ s! { __st_blksize_padding: Padding, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] 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..0771a7f67c888 100644 --- a/src/unix/linux_like/linux/musl/b32/mips/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/mips/mod.rs @@ -25,18 +25,12 @@ s! { #[cfg(musl32_time64)] __st_ctim32: Padding<__c_anonymous_timespec32>, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, + #[cfg(not(musl32_time64))] + pub st_atim: crate::timespec, + #[cfg(not(musl32_time64))] + pub st_mtim: crate::timespec, + #[cfg(not(musl32_time64))] + pub st_ctim: crate::timespec, pub st_blksize: crate::blksize_t, __st_padding3: Padding, diff --git a/src/unix/linux_like/linux/musl/b32/powerpc.rs b/src/unix/linux_like/linux/musl/b32/powerpc.rs index cd11a44e43cd4..64a2719abbc11 100644 --- a/src/unix/linux_like/linux/musl/b32/powerpc.rs +++ b/src/unix/linux_like/linux/musl/b32/powerpc.rs @@ -37,18 +37,12 @@ s! { #[cfg(musl32_time64)] __st_ctim32: Padding<__c_anonymous_timespec32>, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, + #[cfg(not(musl32_time64))] + pub st_atim: crate::timespec, + #[cfg(not(musl32_time64))] + pub st_mtim: crate::timespec, + #[cfg(not(musl32_time64))] + pub st_ctim: crate::timespec, __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..acf5b7d0cc362 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,8 @@ s! { pub __pad2: c_int, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] 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..3f2145bc266ef 100644 --- a/src/unix/linux_like/linux/musl/b32/x86/mod.rs +++ b/src/unix/linux_like/linux/musl/b32/x86/mod.rs @@ -27,18 +27,12 @@ s! { #[cfg(musl32_time64)] __st_ctim32: Padding<__c_anonymous_timespec32>, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, + #[cfg(not(musl32_time64))] + pub st_atim: crate::timespec, + #[cfg(not(musl32_time64))] + pub st_mtim: crate::timespec, + #[cfg(not(musl32_time64))] + pub st_ctim: crate::timespec, 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 79a9e999ee21b..78414a522accb 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,8 @@ s! { __pad1: Padding, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] 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..cb38ee6bb248f 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,8 @@ s! { __pad2: Padding, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] 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..44c7b8dee5903 100644 --- a/src/unix/linux_like/linux/musl/b64/mips64.rs +++ b/src/unix/linux_like/linux/musl/b64/mips64.rs @@ -23,24 +23,8 @@ s! { pub st_size: off_t, __pad3: Padding, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] 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..0a6b82ee8f022 100644 --- a/src/unix/linux_like/linux/musl/b64/powerpc64.rs +++ b/src/unix/linux_like/linux/musl/b64/powerpc64.rs @@ -34,24 +34,8 @@ s! { pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] 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..75eb3b39eaf95 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,8 @@ s! { __pad2: Padding, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] 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..f2677a88fabe7 100644 --- a/src/unix/linux_like/linux/musl/b64/s390x.rs +++ b/src/unix/linux_like/linux/musl/b64/s390x.rs @@ -41,24 +41,8 @@ s! { pub st_rdev: crate::dev_t, pub st_size: off_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] 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..45e4feaededa2 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,8 @@ s! { pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] 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..034c80f9b45b1 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,8 @@ s! { pub st_blksize: crate::blksize_t, pub st_blocks: crate::blkcnt_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_atime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_mtime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_mtime_nsec: c_long, - #[cfg(not(musl_v1_2_3))] - pub st_ctime: crate::time_t, - #[cfg(not(musl_v1_2_3))] - pub st_ctime_nsec: c_long, - - #[cfg(musl_v1_2_3)] pub st_atim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_mtim: crate::timespec, - #[cfg(musl_v1_2_3)] pub st_ctim: crate::timespec, __unused: Padding<[c_long; 3]>, From 1ae80a9d09aa2f9f7cc6eb9615eadfeb989296de Mon Sep 17 00:00:00 2001 From: Reagan Bohan Date: Sat, 6 Dec 2025 07:27:25 +0000 Subject: [PATCH 15/15] libc-test: Linux: remove test workaround for inlined timespec They have all been fixed. --- libc-test/build.rs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 721c8485c226a..5c88e7906e119 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3933,14 +3933,6 @@ 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 - ("stat" | "statfs" | "statvfs" | "stat64" | "statfs64" | "statvfs64", f) - if !musl_v1_2_3 && f.ends_with("_nsec") => - { - Some(f.replace("e_nsec", ".tv_nsec")) - } - // FIXME(linux): epoll_event.data is actually a union in C, but in Rust // it is only a u64 because we only expose one field // http://man7.org/linux/man-pages/man2/epoll_wait.2.html