From 59b2e32953bdeb97f640726db0c60b1cb8d2ca32 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Fri, 2 Dec 2022 08:00:36 -0700 Subject: [PATCH] Fix compilation on 32-bit systems --- src/header/stdio/mod.rs | 2 +- src/header/time/mod.rs | 12 +++++------- src/header/unistd/mod.rs | 4 ++-- src/platform/pte.rs | 10 +++++----- src/platform/redox/mod.rs | 4 ++-- src/platform/redox/signal.rs | 8 ++++---- 6 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/header/stdio/mod.rs b/src/header/stdio/mod.rs index 52bee273..e4d3eb1b 100644 --- a/src/header/stdio/mod.rs +++ b/src/header/stdio/mod.rs @@ -616,7 +616,7 @@ pub unsafe fn fseek_locked(stream: &mut FILE, mut off: off_t, whence: c_int) -> /// Seek to a position `pos` in the file from the beginning of the file #[no_mangle] pub unsafe extern "C" fn fsetpos(stream: *mut FILE, pos: *const fpos_t) -> c_int { - fseek(stream, *pos, SEEK_SET) + fseeko(stream, *pos, SEEK_SET) } /// Get the current position of the cursor in the file diff --git a/src/header/time/mod.rs b/src/header/time/mod.rs index dce14c03..a2071e58 100644 --- a/src/header/time/mod.rs +++ b/src/header/time/mod.rs @@ -163,14 +163,12 @@ pub extern "C" fn clock() -> clock_t { } let ts = unsafe { ts.assume_init() }; - if ts.tv_sec > time_t::max_value() / CLOCKS_PER_SEC - || ts.tv_nsec / (1_000_000_000 / CLOCKS_PER_SEC) - > time_t::max_value() - CLOCKS_PER_SEC * ts.tv_sec - { - return -1; + let clocks = ts.tv_sec * CLOCKS_PER_SEC as i64 + + (ts.tv_nsec / (1_000_000_000 / CLOCKS_PER_SEC)) as i64; + match clock_t::try_from(clocks) { + Ok(ok) => ok, + Err(_err) => -1, } - - ts.tv_sec * CLOCKS_PER_SEC + ts.tv_nsec / (1_000_000_000 / CLOCKS_PER_SEC) } // #[no_mangle] diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index 49169fa6..ede59022 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -603,7 +603,7 @@ pub extern "C" fn setuid(uid: uid_t) -> c_int { #[no_mangle] pub extern "C" fn sleep(seconds: c_uint) -> c_uint { let rqtp = timespec { - tv_sec: seconds as c_long, + tv_sec: seconds as time_t, tv_nsec: 0, }; let rmtp = ptr::null_mut(); @@ -731,7 +731,7 @@ pub unsafe extern "C" fn unlink(path: *const c_char) -> c_int { #[no_mangle] pub extern "C" fn usleep(useconds: useconds_t) -> c_int { let rqtp = timespec { - tv_sec: (useconds / 1_000_000) as c_long, + tv_sec: (useconds / 1_000_000) as time_t, tv_nsec: ((useconds % 1_000_000) * 1000) as c_long, }; let rmtp = ptr::null_mut(); diff --git a/src/platform/pte.rs b/src/platform/pte.rs index ee70a6e6..049f6868 100644 --- a/src/platform/pte.rs +++ b/src/platform/pte.rs @@ -14,7 +14,7 @@ use crate::{ tcb::{Master, Tcb}, }, platform::{ - types::{c_int, c_uint, c_long, c_void, pid_t, size_t}, + types::{c_int, c_uint, c_long, c_void, pid_t, size_t, time_t}, Pal, Sys, }, sync::{Mutex, Semaphore}, @@ -253,8 +253,8 @@ pub unsafe extern "C" fn pte_osThreadSleep(msecs: c_uint) { Sys::sched_yield(); } else { let tm = timespec { - tv_sec: msecs as c_long / 1000, - tv_nsec: (msecs % 1000) as c_long * 1000000, + tv_sec: msecs as time_t / 1000, + tv_nsec: ((msecs as c_long) % 1000) * 1000000, }; Sys::nanosleep(&tm, ptr::null_mut()); } @@ -353,9 +353,9 @@ pub unsafe extern "C" fn pte_osSemaphorePend( clock_gettime(CLOCK_MONOTONIC, &mut time); // Add timeout to time - let timeout = *pTimeout as c_long; + let timeout = *pTimeout as time_t; time.tv_sec += timeout / 1000; - time.tv_nsec += (timeout % 1000) * 1_000_000; + time.tv_nsec += ((timeout % 1000) * 1_000_000) as c_long; while time.tv_nsec >= 1_000_000_000 { time.tv_sec += 1; time.tv_nsec -= 1_000_000_000; diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index 405b1077..58d07df9 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -190,7 +190,7 @@ impl Pal for Sys { -1 => -1, _ => { unsafe { - (*tp).tv_sec = redox_tp.tv_sec as c_long; + (*tp).tv_sec = redox_tp.tv_sec as time_t; (*tp).tv_nsec = redox_tp.tv_nsec as c_long; }; 0 @@ -702,7 +702,7 @@ impl Pal for Sys { _ => { unsafe { if !rmtp.is_null() { - (*rmtp).tv_sec = redox_rmtp.tv_sec as c_long; + (*rmtp).tv_sec = redox_rmtp.tv_sec as time_t; (*rmtp).tv_nsec = redox_rmtp.tv_nsec as c_long; } } diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index cfe0dc93..801d947d 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -39,9 +39,9 @@ impl PalSignal for Sys { } unsafe { - (*out).it_interval.tv_sec = spec.it_interval.tv_sec as c_long; + (*out).it_interval.tv_sec = spec.it_interval.tv_sec as time_t; (*out).it_interval.tv_usec = spec.it_interval.tv_nsec / 1000; - (*out).it_value.tv_sec = spec.it_value.tv_sec as c_long; + (*out).it_value.tv_sec = spec.it_value.tv_sec as time_t; (*out).it_value.tv_usec = spec.it_value.tv_nsec / 1000; } @@ -81,9 +81,9 @@ impl PalSignal for Sys { if count != !0 { unsafe { if !old.is_null() { - (*old).it_interval.tv_sec = spec.it_interval.tv_sec as c_long; + (*old).it_interval.tv_sec = spec.it_interval.tv_sec as time_t; (*old).it_interval.tv_usec = spec.it_interval.tv_nsec / 1000; - (*old).it_value.tv_sec = spec.it_value.tv_sec as c_long; + (*old).it_value.tv_sec = spec.it_value.tv_sec as time_t; (*old).it_value.tv_usec = spec.it_value.tv_nsec / 1000; } -- GitLab