diff --git a/crates/wasi-c2/src/file.rs b/crates/wasi-c2/src/file.rs index 8c7a51e9de..38caf8d5de 100644 --- a/crates/wasi-c2/src/file.rs +++ b/crates/wasi-c2/src/file.rs @@ -92,9 +92,9 @@ pub struct Filestat { pub filetype: Filetype, pub nlink: u64, pub size: u64, - pub atim: std::time::SystemTime, - pub mtim: std::time::SystemTime, - pub ctim: std::time::SystemTime, + pub atim: Option, + pub mtim: Option, + pub ctim: Option, } pub(crate) struct FileEntry { @@ -244,19 +244,9 @@ impl WasiFile for cap_std::fs::File { filetype: self.get_filetype()?, nlink: meta.nlink(), size: meta.len(), - // XXX handle these features not being available better: - atim: meta - .accessed() - .map(|t| t.into_std()) - .unwrap_or_else(|_| std::time::SystemTime::UNIX_EPOCH), - mtim: meta - .modified() - .map(|t| t.into_std()) - .unwrap_or_else(|_| std::time::SystemTime::UNIX_EPOCH), - ctim: meta - .created() - .map(|t| t.into_std()) - .unwrap_or_else(|_| std::time::SystemTime::UNIX_EPOCH), + atim: meta.accessed().map(|t| Some(t.into_std())).unwrap_or(None), + mtim: meta.modified().map(|t| Some(t.into_std())).unwrap_or(None), + ctim: meta.created().map(|t| Some(t.into_std())).unwrap_or(None), }) } fn set_filestat_size(&self, size: u64) -> Result<(), Error> { diff --git a/crates/wasi-c2/src/snapshots/preview_1.rs b/crates/wasi-c2/src/snapshots/preview_1.rs index 87ffe7b601..7757a7cf74 100644 --- a/crates/wasi-c2/src/snapshots/preview_1.rs +++ b/crates/wasi-c2/src/snapshots/preview_1.rs @@ -1034,19 +1034,16 @@ impl From for types::Filestat { size: stat.size, atim: stat .atim - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_nanos() as u64, + .map(|t| t.duration_since(std::time::UNIX_EPOCH).unwrap().as_nanos() as u64) + .unwrap_or(0), mtim: stat .mtim - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_nanos() as u64, + .map(|t| t.duration_since(std::time::UNIX_EPOCH).unwrap().as_nanos() as u64) + .unwrap_or(0), ctim: stat .ctim - .duration_since(std::time::UNIX_EPOCH) - .unwrap() - .as_nanos() as u64, + .map(|t| t.duration_since(std::time::UNIX_EPOCH).unwrap().as_nanos() as u64) + .unwrap_or(0), } } }