From 54197ef18caff83f31387f91850e891a1a51430a Mon Sep 17 00:00:00 2001 From: Nathaniel Date: Tue, 20 Aug 2024 15:00:25 -0400 Subject: [PATCH] Linux: add `getitimer()`/`setitimer()` --- libc-test/build.rs | 3 +++ libc-test/semver/linux.txt | 3 +++ src/unix/linux_like/linux/mod.rs | 24 ++++++++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/libc-test/build.rs b/libc-test/build.rs index 26b1c550de22c..dd0f773b8ccce 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3558,6 +3558,9 @@ fn test_linux(target: &str) { // https://github.com/rust-lang/libc/issues/1359 "sighandler_t" => true, + // musl doesn't define these; instead, it uses a raw int for getitimer/setitimer + "__itimer_which_t" if musl => true, + // These cannot be tested when "resolv.h" is included and are tested // in the `linux_elf.rs` file. "Elf64_Phdr" | "Elf32_Phdr" => true, diff --git a/libc-test/semver/linux.txt b/libc-test/semver/linux.txt index c93940b82e485..24f7a5f1d2889 100644 --- a/libc-test/semver/linux.txt +++ b/libc-test/semver/linux.txt @@ -3475,6 +3475,7 @@ __c_anonymous_sockaddr_can_j1939 __c_anonymous_sockaddr_can_tp __errno_location __exit_status +__itimer_which_t __s16 __s32 __u16 @@ -3591,6 +3592,7 @@ getgrnam_r getgrouplist gethostid getifaddrs +getitimer getline getmntent getnameinfo @@ -3892,6 +3894,7 @@ setfsuid setgrent setgroups sethostname +setitimer setmntent setns setpriority diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index 2ce09ed168df8..06f6203a9006f 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -73,6 +73,8 @@ missing! { pub enum fpos64_t {} // FIXME: fill this out with a struct } +pub type __itimer_which_t = ::c_int; + e! { pub enum tpacket_versions { TPACKET_V1, @@ -6129,6 +6131,28 @@ extern "C" { pub fn ioctl(fd: ::c_int, request: ::Ioctl, ...) -> ::c_int; } +cfg_if! { + if #[cfg(target_env = "musl")] { + extern "C" { + pub fn getitimer(which: ::c_int, value: *mut ::itimerval) -> ::c_int; + pub fn setitimer( + which: ::c_int, + new: *const ::itimerval, + old: *mut ::itimerval, + ) -> ::c_int; + } + } else { + extern "C" { + pub fn getitimer(which: ::__itimer_which_t, value: *mut ::itimerval) -> ::c_int; + pub fn setitimer( + which: ::__itimer_which_t, + new: *const ::itimerval, + old: *mut ::itimerval, + ) -> ::c_int; + } + } +} + // LFS64 extensions // // * musl has 64-bit versions only so aliases the LFS64 symbols to the standard ones