Misc yanix fixes (#715)
* Correctly handle possibly misaligned pointers in readdir This reapplies #615, which was inadvertently reverted. * Tidy up unneeded `self::` qualifiers. * Make Dir's contents private. Also remove the `unsafe` from `impl_iter`. With `Dir`'s field being private, we can rely on the pointer being only what we've assigned to it. * Make `poll`'s timeout argument a `libc::c_int`. This clarifies that there are no subsequent conversions before calling the underlying libc API. * Use clock_gettime instead of clock_getres to get the time. * Mark FileType::from_raw as safe. It handles unknown values, so it can be marked safe.
This commit is contained in:
@@ -63,12 +63,12 @@ impl Dirent {
|
||||
|
||||
let sys_dirent = raw.as_mut_ptr() as *mut __wasi_dirent_t;
|
||||
unsafe {
|
||||
*sys_dirent = __wasi_dirent_t {
|
||||
sys_dirent.write_unaligned(__wasi_dirent_t {
|
||||
d_namlen: namlen.try_into()?,
|
||||
d_ino: self.ino,
|
||||
d_next: self.cookie,
|
||||
d_type: self.ftype.to_wasi(),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
let sys_name = unsafe { sys_dirent.offset(1) as *mut u8 };
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
use crate::old::snapshot_0::hostcalls_impl::{ClockEventData, FdEventData};
|
||||
use crate::old::snapshot_0::sys::host_impl;
|
||||
use crate::old::snapshot_0::{wasi, Error, Result};
|
||||
use yanix::clock::{clock_getres, ClockId};
|
||||
use yanix::clock::{clock_getres, clock_gettime, ClockId};
|
||||
|
||||
fn wasi_clock_id_to_unix(clock_id: wasi::__wasi_clockid_t) -> Result<ClockId> {
|
||||
// convert the supported clocks to libc types, or return EINVAL
|
||||
@@ -39,7 +39,7 @@ pub(crate) fn clock_res_get(clock_id: wasi::__wasi_clockid_t) -> Result<wasi::__
|
||||
|
||||
pub(crate) fn clock_time_get(clock_id: wasi::__wasi_clockid_t) -> Result<wasi::__wasi_timestamp_t> {
|
||||
let clock_id = wasi_clock_id_to_unix(clock_id)?;
|
||||
let timespec = clock_getres(clock_id)?;
|
||||
let timespec = clock_gettime(clock_id)?;
|
||||
|
||||
// convert to nanoseconds, returning EOVERFLOW in case of overflow; this is freelancing a bit
|
||||
// from the spec but seems like it'll be an unusual situation to hit
|
||||
|
||||
Reference in New Issue
Block a user