summaryrefslogtreecommitdiffstats
path: root/vendor/rustix/src/backend/linux_raw/time/syscalls.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/rustix/src/backend/linux_raw/time/syscalls.rs')
-rw-r--r--vendor/rustix/src/backend/linux_raw/time/syscalls.rs100
1 files changed, 44 insertions, 56 deletions
diff --git a/vendor/rustix/src/backend/linux_raw/time/syscalls.rs b/vendor/rustix/src/backend/linux_raw/time/syscalls.rs
index c039393ef..634ce2674 100644
--- a/vendor/rustix/src/backend/linux_raw/time/syscalls.rs
+++ b/vendor/rustix/src/backend/linux_raw/time/syscalls.rs
@@ -6,34 +6,32 @@
#![allow(unsafe_code)]
#![allow(clippy::undocumented_unsafe_blocks)]
-#[cfg(feature = "time")]
-use super::super::conv::{by_ref, ret_owned_fd};
-use super::super::conv::{ret, ret_infallible};
-use super::types::ClockId;
-#[cfg(feature = "time")]
-use crate::fd::BorrowedFd;
-#[cfg(feature = "time")]
-use crate::fd::OwnedFd;
+use crate::backend::conv::{ret, ret_infallible};
+use crate::clockid::ClockId;
use crate::io;
-#[cfg(feature = "time")]
-use crate::time::{Itimerspec, TimerfdClockId, TimerfdFlags, TimerfdTimerFlags};
+use crate::timespec::Timespec;
use core::mem::MaybeUninit;
-use linux_raw_sys::general::__kernel_timespec;
-#[cfg(feature = "time")]
+#[cfg(all(feature = "time", target_pointer_width = "32"))]
+use linux_raw_sys::general::itimerspec as __kernel_old_itimerspec;
#[cfg(target_pointer_width = "32")]
-use {core::convert::TryInto, linux_raw_sys::general::itimerspec as __kernel_old_itimerspec};
-#[cfg(target_pointer_width = "32")]
-use {core::ptr, linux_raw_sys::general::timespec as __kernel_old_timespec};
+use linux_raw_sys::general::timespec as __kernel_old_timespec;
+#[cfg(feature = "time")]
+use {
+ crate::backend::conv::{by_ref, ret_owned_fd},
+ crate::fd::BorrowedFd,
+ crate::fd::OwnedFd,
+ crate::time::{Itimerspec, TimerfdClockId, TimerfdFlags, TimerfdTimerFlags},
+};
// `clock_gettime` has special optimizations via the vDSO.
#[cfg(feature = "time")]
-pub(crate) use super::super::vdso_wrappers::{clock_gettime, clock_gettime_dynamic};
+pub(crate) use crate::backend::vdso_wrappers::{clock_gettime, clock_gettime_dynamic};
#[inline]
-pub(crate) fn clock_getres(which_clock: ClockId) -> __kernel_timespec {
+pub(crate) fn clock_getres(which_clock: ClockId) -> Timespec {
#[cfg(target_pointer_width = "32")]
unsafe {
- let mut result = MaybeUninit::<__kernel_timespec>::uninit();
+ let mut result = MaybeUninit::<Timespec>::uninit();
if let Err(err) = ret(syscall!(__NR_clock_getres_time64, which_clock, &mut result)) {
// See the comments in `rustix_clock_gettime_via_syscall` about
// emulation.
@@ -44,30 +42,28 @@ pub(crate) fn clock_getres(which_clock: ClockId) -> __kernel_timespec {
}
#[cfg(target_pointer_width = "64")]
unsafe {
- let mut result = MaybeUninit::<__kernel_timespec>::uninit();
+ let mut result = MaybeUninit::<Timespec>::uninit();
ret_infallible(syscall!(__NR_clock_getres, which_clock, &mut result));
result.assume_init()
}
}
#[cfg(target_pointer_width = "32")]
-unsafe fn clock_getres_old(which_clock: ClockId, result: &mut MaybeUninit<__kernel_timespec>) {
+unsafe fn clock_getres_old(which_clock: ClockId, result: &mut MaybeUninit<Timespec>) {
let mut old_result = MaybeUninit::<__kernel_old_timespec>::uninit();
ret_infallible(syscall!(__NR_clock_getres, which_clock, &mut old_result));
let old_result = old_result.assume_init();
- // TODO: With Rust 1.55, we can use MaybeUninit::write here.
- ptr::write(
- result.as_mut_ptr(),
- __kernel_timespec {
- tv_sec: old_result.tv_sec.into(),
- tv_nsec: old_result.tv_nsec.into(),
- },
- );
+ result.write(Timespec {
+ tv_sec: old_result.tv_sec.into(),
+ tv_nsec: old_result.tv_nsec.into(),
+ });
}
#[cfg(feature = "time")]
#[inline]
-pub(crate) fn clock_settime(which_clock: ClockId, timespec: __kernel_timespec) -> io::Result<()> {
+pub(crate) fn clock_settime(which_clock: ClockId, timespec: Timespec) -> io::Result<()> {
+ // `clock_settime64` was introduced in Linux 5.1. The old `clock_settime`
+ // syscall is not y2038-compatible on 32-bit architectures.
#[cfg(target_pointer_width = "32")]
unsafe {
match ret(syscall_readonly!(
@@ -91,7 +87,7 @@ pub(crate) fn clock_settime(which_clock: ClockId, timespec: __kernel_timespec) -
#[cfg(feature = "time")]
#[cfg(target_pointer_width = "32")]
-unsafe fn clock_settime_old(which_clock: ClockId, timespec: __kernel_timespec) -> io::Result<()> {
+unsafe fn clock_settime_old(which_clock: ClockId, timespec: Timespec) -> io::Result<()> {
let old_timespec = __kernel_old_timespec {
tv_sec: timespec
.tv_sec
@@ -200,20 +196,16 @@ unsafe fn timerfd_settime_old(
&mut old_result
))?;
let old_result = old_result.assume_init();
- // TODO: With Rust 1.55, we can use MaybeUninit::write here.
- ptr::write(
- result.as_mut_ptr(),
- Itimerspec {
- it_interval: __kernel_timespec {
- tv_sec: old_result.it_interval.tv_sec.into(),
- tv_nsec: old_result.it_interval.tv_nsec.into(),
- },
- it_value: __kernel_timespec {
- tv_sec: old_result.it_value.tv_sec.into(),
- tv_nsec: old_result.it_value.tv_nsec.into(),
- },
+ result.write(Itimerspec {
+ it_interval: Timespec {
+ tv_sec: old_result.it_interval.tv_sec.into(),
+ tv_nsec: old_result.it_interval.tv_nsec.into(),
},
- );
+ it_value: Timespec {
+ tv_sec: old_result.it_value.tv_sec.into(),
+ tv_nsec: old_result.it_value.tv_nsec.into(),
+ },
+ });
Ok(())
}
@@ -252,19 +244,15 @@ unsafe fn timerfd_gettime_old(
let mut old_result = MaybeUninit::<__kernel_old_itimerspec>::uninit();
ret(syscall!(__NR_timerfd_gettime, fd, &mut old_result))?;
let old_result = old_result.assume_init();
- // TODO: With Rust 1.55, we can use MaybeUninit::write here.
- ptr::write(
- result.as_mut_ptr(),
- Itimerspec {
- it_interval: __kernel_timespec {
- tv_sec: old_result.it_interval.tv_sec.into(),
- tv_nsec: old_result.it_interval.tv_nsec.into(),
- },
- it_value: __kernel_timespec {
- tv_sec: old_result.it_value.tv_sec.into(),
- tv_nsec: old_result.it_value.tv_nsec.into(),
- },
+ result.write(Itimerspec {
+ it_interval: Timespec {
+ tv_sec: old_result.it_interval.tv_sec.into(),
+ tv_nsec: old_result.it_interval.tv_nsec.into(),
+ },
+ it_value: Timespec {
+ tv_sec: old_result.it_value.tv_sec.into(),
+ tv_nsec: old_result.it_value.tv_nsec.into(),
},
- );
+ });
Ok(())
}