Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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");
Expand Down Expand Up @@ -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;
Expand Down
10 changes: 7 additions & 3 deletions libc-test/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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"))
}
Expand Down
12 changes: 6 additions & 6 deletions src/unix/linux_like/linux/musl/b32/arm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
18 changes: 9 additions & 9 deletions src/unix/linux_like/linux/musl/b32/hexagon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,24 @@ s! {
__st_blksize_padding: Padding<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; 2]>,
Expand Down
12 changes: 6 additions & 6 deletions src/unix/linux_like/linux/musl/b32/mips/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
12 changes: 6 additions & 6 deletions src/unix/linux_like/linux/musl/b32/powerpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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]>,
Expand Down
18 changes: 9 additions & 9 deletions src/unix/linux_like/linux/musl/b32/riscv32/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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]>,
Expand Down
12 changes: 6 additions & 6 deletions src/unix/linux_like/linux/musl/b32/x86/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
18 changes: 9 additions & 9 deletions src/unix/linux_like/linux/musl/b64/aarch64/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,24 @@ s! {
__pad1: Padding<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_uint; 2]>,
Expand Down
18 changes: 9 additions & 9 deletions src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,24 +27,24 @@ s! {
__pad2: Padding<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]>,
Expand Down
18 changes: 9 additions & 9 deletions src/unix/linux_like/linux/musl/b64/mips64.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,24 +23,24 @@ s! {
pub st_size: off_t,
__pad3: Padding<c_int>,

#[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,
Expand Down
18 changes: 9 additions & 9 deletions src/unix/linux_like/linux/musl/b64/powerpc64.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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]>,
Expand Down
18 changes: 9 additions & 9 deletions src/unix/linux_like/linux/musl/b64/riscv64/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,24 +27,24 @@ s! {
__pad2: Padding<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]>,
Expand Down
Loading