From ad9bbdfcc27b9a9f547a650e919bc53fb1069fdc Mon Sep 17 00:00:00 2001 From: Valentyn Kit Date: Fri, 21 Aug 2026 20:57:45 +0300 Subject: [PATCH 1/3] glibc: Dedup per-arch `statvfs64` declarations on b32 Almost every glibc 32-bit arch declared an identical `statvfs64`. Six of the eight were fully the same, so they move to the shared `b32/mod.rs`. `m68k` and `riscv32` differ, so they are excluded by cfg, and keep their own declarations. No functional change: shared declaration is byte-for-byte identical to the six it replaces. --- src/unix/linux_like/linux/gnu/b32/arm/mod.rs | 16 ---------------- src/unix/linux_like/linux/gnu/b32/csky/mod.rs | 16 ---------------- src/unix/linux_like/linux/gnu/b32/mips/mod.rs | 16 ---------------- src/unix/linux_like/linux/gnu/b32/mod.rs | 17 +++++++++++++++++ src/unix/linux_like/linux/gnu/b32/powerpc.rs | 16 ---------------- src/unix/linux_like/linux/gnu/b32/sparc/mod.rs | 16 ---------------- src/unix/linux_like/linux/gnu/b32/x86/mod.rs | 16 ---------------- 7 files changed, 17 insertions(+), 96 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 5b5cfeca2227..48aa35322e4d 100644 --- a/src/unix/linux_like/linux/gnu/b32/arm/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/arm/mod.rs @@ -103,22 +103,6 @@ s! { pub f_spare: [crate::__fsword_t; 4], } - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - __f_unused: Padding, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct shmid_ds { pub shm_perm: crate::ipc_perm, pub shm_segsz: size_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 b0afd5733399..aad04df4f820 100644 --- a/src/unix/linux_like/linux/gnu/b32/csky/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/csky/mod.rs @@ -90,22 +90,6 @@ s! { pub f_spare: [crate::__fsword_t; 4], } - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - __f_unused: Padding, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct shmid_ds { pub shm_perm: crate::ipc_perm, pub shm_segsz: size_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 b05ae5c2ebbf..87308df6267c 100644 --- a/src/unix/linux_like/linux/gnu/b32/mips/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mips/mod.rs @@ -150,22 +150,6 @@ s! { pub f_spare: [c_long; 5], } - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - __f_unused: Padding, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct stack_t { pub ss_sp: *mut c_void, pub ss_size: size_t, diff --git a/src/unix/linux_like/linux/gnu/b32/mod.rs b/src/unix/linux_like/linux/gnu/b32/mod.rs index 2b2efb1e1813..b2ddc9c7be49 100644 --- a/src/unix/linux_like/linux/gnu/b32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mod.rs @@ -141,6 +141,23 @@ s! { __f_spare: [c_int; 6], } + #[cfg(not(any(target_arch = "m68k", target_arch = "riscv32")))] + pub struct statvfs64 { + pub f_bsize: c_ulong, + pub f_frsize: c_ulong, + pub f_blocks: u64, + pub f_bfree: u64, + pub f_bavail: u64, + pub f_files: u64, + pub f_ffree: u64, + pub f_favail: u64, + pub f_fsid: c_ulong, + __f_unused: Padding, + pub f_flag: c_ulong, + pub f_namemax: c_ulong, + __f_spare: [c_int; 6], + } + pub struct pthread_attr_t { __size: [u32; 9], } diff --git a/src/unix/linux_like/linux/gnu/b32/powerpc.rs b/src/unix/linux_like/linux/gnu/b32/powerpc.rs index b63be98ecaeb..1cfd9c98187f 100644 --- a/src/unix/linux_like/linux/gnu/b32/powerpc.rs +++ b/src/unix/linux_like/linux/gnu/b32/powerpc.rs @@ -132,22 +132,6 @@ s! { pub f_spare: [crate::__fsword_t; 4], } - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - __f_unused: Padding, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct shmid_ds { pub shm_perm: crate::ipc_perm, #[cfg(gnu_time_bits64)] 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 f29605ba51e2..e9a20895cd78 100644 --- a/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs @@ -118,22 +118,6 @@ s! { pub f_spare: [crate::__fsword_t; 4], } - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - __f_unused: Padding, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct ipc_perm { pub __key: crate::key_t, pub uid: crate::uid_t, 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 1bed38e18fcf..c59489c03ffb 100644 --- a/src/unix/linux_like/linux/gnu/b32/x86/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/x86/mod.rs @@ -177,22 +177,6 @@ s! { pub f_spare: [crate::__fsword_t; 4], } - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - __f_unused: Padding, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct shmid_ds { pub shm_perm: crate::ipc_perm, pub shm_segsz: size_t, From 49556812e7b70b29d838d53fa9d901f2fb940be0 Mon Sep 17 00:00:00 2001 From: Valentyn Kit Date: Fri, 21 Aug 2026 21:58:58 +0300 Subject: [PATCH 2/3] glibc: Dedup per-arch `statvfs` and `statvfs64` declarations on b64 No functional changes: shared declaration is byte for byte identical to architecture specifics it replaces, only `riscv64` differs, and guarded by cfg, to use it own declaration. --- .../linux_like/linux/gnu/b64/aarch64/mod.rs | 30 ----------------- .../linux/gnu/b64/loongarch64/mod.rs | 30 ----------------- .../linux_like/linux/gnu/b64/mips64/mod.rs | 30 ----------------- src/unix/linux_like/linux/gnu/b64/mod.rs | 33 +++++++++++++++++++ .../linux_like/linux/gnu/b64/powerpc64/mod.rs | 30 ----------------- src/unix/linux_like/linux/gnu/b64/s390x.rs | 30 ----------------- .../linux_like/linux/gnu/b64/sparc64/mod.rs | 30 ----------------- .../linux_like/linux/gnu/b64/x86_64/mod.rs | 15 --------- .../linux/gnu/b64/x86_64/not_x32.rs | 17 ---------- .../linux_like/linux/gnu/b64/x86_64/x32.rs | 17 ---------- 10 files changed, 33 insertions(+), 229 deletions(-) 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 f863aa435768..d4fd8530999d 100644 --- a/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs @@ -103,36 +103,6 @@ s! { pub f_spare: [crate::__fsword_t; 4], } - pub struct statvfs { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: crate::fsblkcnt_t, - pub f_bfree: crate::fsblkcnt_t, - pub f_bavail: crate::fsblkcnt_t, - pub f_files: crate::fsfilcnt_t, - pub f_ffree: crate::fsfilcnt_t, - pub f_favail: crate::fsfilcnt_t, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct pthread_attr_t { __size: [usize; 8], } 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 add1256ac6d2..18feea6acaad 100644 --- a/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs @@ -101,36 +101,6 @@ s! { pub l_pid: crate::pid_t, } - pub struct statvfs { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: crate::fsblkcnt_t, - pub f_bfree: crate::fsblkcnt_t, - pub f_bavail: crate::fsblkcnt_t, - pub f_files: crate::fsfilcnt_t, - pub f_ffree: crate::fsfilcnt_t, - pub f_favail: crate::fsfilcnt_t, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct pthread_attr_t { __size: [c_ulong; 7], } 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 df2b8f9745a7..a383609b8dd1 100644 --- a/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs @@ -103,36 +103,6 @@ s! { pub f_spare: [c_long; 5], } - pub struct statvfs { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: crate::fsblkcnt_t, - pub f_bfree: crate::fsblkcnt_t, - pub f_bavail: crate::fsblkcnt_t, - pub f_files: crate::fsfilcnt_t, - pub f_ffree: crate::fsfilcnt_t, - pub f_favail: crate::fsfilcnt_t, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct pthread_attr_t { __size: [c_ulong; 7], } diff --git a/src/unix/linux_like/linux/gnu/b64/mod.rs b/src/unix/linux_like/linux/gnu/b64/mod.rs index 16b7bef085fe..c358a8a02712 100644 --- a/src/unix/linux_like/linux/gnu/b64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mod.rs @@ -188,6 +188,39 @@ s! { pub __unused11: i32, } } +s! { + #[cfg(not(any(target_arch = "riscv64")))] + pub struct statvfs { + pub f_bsize: c_ulong, + pub f_frsize: c_ulong, + pub f_blocks: crate::fsblkcnt_t, + pub f_bfree: crate::fsblkcnt_t, + pub f_bavail: crate::fsblkcnt_t, + pub f_files: crate::fsfilcnt_t, + pub f_ffree: crate::fsfilcnt_t, + pub f_favail: crate::fsfilcnt_t, + pub f_fsid: c_ulong, + pub f_flag: c_ulong, + pub f_namemax: c_ulong, + __f_spare: [c_int; 6], + } + + #[cfg(not(any(target_arch = "riscv64")))] + pub struct statvfs64 { + pub f_bsize: c_ulong, + pub f_frsize: c_ulong, + pub f_blocks: u64, + pub f_bfree: u64, + pub f_bavail: u64, + pub f_files: u64, + pub f_ffree: u64, + pub f_favail: u64, + pub f_fsid: c_ulong, + pub f_flag: c_ulong, + pub f_namemax: c_ulong, + __f_spare: [c_int; 6], + } +} pub const __SIZEOF_PTHREAD_RWLOCKATTR_T: usize = 8; 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 0f7e065c8532..b598f885da22 100644 --- a/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs @@ -103,36 +103,6 @@ s! { pub f_spare: [crate::__fsword_t; 4], } - pub struct statvfs { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: crate::fsblkcnt_t, - pub f_bfree: crate::fsblkcnt_t, - pub f_bavail: crate::fsblkcnt_t, - pub f_files: crate::fsfilcnt_t, - pub f_ffree: crate::fsfilcnt_t, - pub f_favail: crate::fsfilcnt_t, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct pthread_attr_t { __size: [u64; 7], } diff --git a/src/unix/linux_like/linux/gnu/b64/s390x.rs b/src/unix/linux_like/linux/gnu/b64/s390x.rs index eae7b7124e6b..43898457b25b 100644 --- a/src/unix/linux_like/linux/gnu/b64/s390x.rs +++ b/src/unix/linux_like/linux/gnu/b64/s390x.rs @@ -130,21 +130,6 @@ s! { __unused5: Padding, } - pub struct statvfs { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: crate::fsblkcnt_t, - pub f_bfree: crate::fsblkcnt_t, - pub f_bavail: crate::fsblkcnt_t, - pub f_files: crate::fsfilcnt_t, - pub f_ffree: crate::fsfilcnt_t, - pub f_favail: crate::fsfilcnt_t, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct __psw_t { pub mask: u64, pub addr: u64, @@ -185,21 +170,6 @@ s! { pub f_flags: c_uint, pub f_spare: [c_uint; 4], } - - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } } s_no_extra_traits! { 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 dcfc7c442fa0..48760cb0b639 100644 --- a/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs @@ -125,36 +125,6 @@ s! { pub f_spare: [crate::__fsword_t; 4], } - pub struct statvfs { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: crate::fsblkcnt_t, - pub f_bfree: crate::fsblkcnt_t, - pub f_bavail: crate::fsblkcnt_t, - pub f_files: crate::fsfilcnt_t, - pub f_ffree: crate::fsfilcnt_t, - pub f_favail: crate::fsfilcnt_t, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct pthread_attr_t { __size: [u64; 7], } 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 98506315c371..87350c11f9ea 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 @@ -123,21 +123,6 @@ s! { pub f_spare: [crate::__fsword_t; 4], } - pub struct statvfs64 { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_favail: u64, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } - pub struct pthread_attr_t { #[cfg(target_pointer_width = "32")] __size: [u32; 8], 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 4c179540436b..f95bb8729d01 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 @@ -1,22 +1,5 @@ use crate::prelude::*; -s! { - pub struct statvfs { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: crate::fsblkcnt_t, - pub f_bfree: crate::fsblkcnt_t, - pub f_bavail: crate::fsblkcnt_t, - pub f_files: crate::fsfilcnt_t, - pub f_ffree: crate::fsfilcnt_t, - pub f_favail: crate::fsfilcnt_t, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } -} - pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 40; pub const __SIZEOF_PTHREAD_RWLOCK_T: usize = 56; pub const __SIZEOF_PTHREAD_BARRIER_T: usize = 32; 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 183eccc43f5e..41b77f64c1df 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 @@ -1,22 +1,5 @@ use crate::prelude::*; -s! { - pub struct statvfs { - pub f_bsize: c_ulong, - pub f_frsize: c_ulong, - pub f_blocks: crate::fsblkcnt_t, - pub f_bfree: crate::fsblkcnt_t, - pub f_bavail: crate::fsblkcnt_t, - pub f_files: crate::fsfilcnt_t, - pub f_ffree: crate::fsfilcnt_t, - pub f_favail: crate::fsfilcnt_t, - pub f_fsid: c_ulong, - pub f_flag: c_ulong, - pub f_namemax: c_ulong, - __f_spare: [c_int; 6], - } -} - pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 32; pub const __SIZEOF_PTHREAD_RWLOCK_T: usize = 44; pub const __SIZEOF_PTHREAD_BARRIER_T: usize = 20; From 428c0c83bb753d061677dd7589e106b1dc5dcf94 Mon Sep 17 00:00:00 2001 From: Valentyn Kit Date: Fri, 21 Aug 2026 22:18:49 +0300 Subject: [PATCH 3/3] glibc: Add f_type to `statvfs` and `statvfs64` glibc 2.39 allocated one of the six spares to `f_type` of type unsigned int. Link: https://github.com/sailfishos-mirror/glibc/blob/ef321e23c20eebc6d6fb4044425c00e6df27b05f/sysdeps/unix/sysv/linux/bits/statvfs.h#L75-L76 Link: https://github.com/sailfishos-mirror/glibc/blob/ef321e23c20eebc6d6fb4044425c00e6df27b05f/sysdeps/unix/sysv/linux/bits/statvfs.h#L54-L55 --- libc-test/build/main.rs | 9 ++++++--- src/unix/linux_like/linux/gnu/b32/m68k/mod.rs | 3 ++- src/unix/linux_like/linux/gnu/b32/mod.rs | 6 ++++-- src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs | 3 ++- src/unix/linux_like/linux/gnu/b64/mod.rs | 6 ++++-- src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs | 6 ++++-- 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/libc-test/build/main.rs b/libc-test/build/main.rs index c53f93dca354..2483bce6aab5 100755 --- a/libc-test/build/main.rs +++ b/libc-test/build/main.rs @@ -5196,9 +5196,12 @@ fn test_linux(t: &Target) { } // invalid application of 'sizeof' to incomplete type 'long unsigned int[]' ("mcontext_t", "__extcontext") if musl && loongarch64 => true, - // FIXME(#4121): a new field was added from `f_spare` - ("statvfs", "__f_spare") => true, - ("statvfs64", "__f_spare") => true, + // glibc 2.39 allocated one of the six `__f_spare` to `f_type` + ("statvfs" | "statvfs64", "f_type" | "__f_spare") + if gnu && versions.glibc.unwrap() < (2, 39) => + { + true + } // the `xsk_tx_metadata_union` field is an anonymous union ("xsk_tx_metadata", "xsk_tx_metadata_union") => true, // After musl 1.2.0, the type becomes `int` instead of `long`. 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 f3940f4be51c..b528e2b9bbb5 100644 --- a/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs @@ -103,7 +103,8 @@ s! { __f_unused: Padding, pub f_flag: c_ulong, pub f_namemax: c_ulong, - __f_spare: [c_int; 6], + pub f_type: c_uint, + __f_spare: [c_int; 5], } pub struct shmid_ds { diff --git a/src/unix/linux_like/linux/gnu/b32/mod.rs b/src/unix/linux_like/linux/gnu/b32/mod.rs index b2ddc9c7be49..4ea7ec09ec8d 100644 --- a/src/unix/linux_like/linux/gnu/b32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/mod.rs @@ -138,7 +138,8 @@ s! { __f_unused: Padding, pub f_flag: c_ulong, pub f_namemax: c_ulong, - __f_spare: [c_int; 6], + pub f_type: c_uint, + __f_spare: [c_int; 5], } #[cfg(not(any(target_arch = "m68k", target_arch = "riscv32")))] @@ -155,7 +156,8 @@ s! { __f_unused: Padding, pub f_flag: c_ulong, pub f_namemax: c_ulong, - __f_spare: [c_int; 6], + pub f_type: c_uint, + __f_spare: [c_int; 5], } pub struct pthread_attr_t { 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 8a9c597ea060..34a7835e6227 100644 --- a/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs +++ b/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs @@ -87,7 +87,8 @@ s! { pub f_fsid: c_ulong, pub f_flag: c_ulong, pub f_namemax: c_ulong, - pub __f_spare: [c_int; 6], + pub f_type: c_uint, + pub __f_spare: [c_int; 5], } pub struct siginfo_t { diff --git a/src/unix/linux_like/linux/gnu/b64/mod.rs b/src/unix/linux_like/linux/gnu/b64/mod.rs index c358a8a02712..5f5040ebe654 100644 --- a/src/unix/linux_like/linux/gnu/b64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/mod.rs @@ -202,7 +202,8 @@ s! { pub f_fsid: c_ulong, pub f_flag: c_ulong, pub f_namemax: c_ulong, - __f_spare: [c_int; 6], + pub f_type: c_uint, + __f_spare: [c_int; 5], } #[cfg(not(any(target_arch = "riscv64")))] @@ -218,7 +219,8 @@ s! { pub f_fsid: c_ulong, pub f_flag: c_ulong, pub f_namemax: c_ulong, - __f_spare: [c_int; 6], + pub f_type: c_uint, + __f_spare: [c_int; 5], } } 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 f473f8c7338c..69f275f8eb32 100644 --- a/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs @@ -105,7 +105,8 @@ s! { pub f_fsid: c_ulong, pub f_flag: c_ulong, pub f_namemax: c_ulong, - pub __f_spare: [c_int; 6], + pub f_type: c_uint, + pub __f_spare: [c_int; 5], } pub struct statvfs64 { @@ -120,7 +121,8 @@ s! { pub f_fsid: c_ulong, pub f_flag: c_ulong, pub f_namemax: c_ulong, - pub __f_spare: [c_int; 6], + pub f_type: c_uint, + pub __f_spare: [c_int; 5], } pub struct siginfo_t {