From 60107df76911e1a5944bfb6ad2774408922c0540 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Thu, 13 Apr 2023 16:16:32 +0200 Subject: [PATCH] Added basic support to inode in filestat_get (for #3583 and #3239) (#3765) * Added basic support to inode in filestat_get (for #3583 and #3239) * Added testing for dev&inode unicity --- lib/wasi/src/fs/mod.rs | 2 +- .../src/syscalls/wasi/path_filestat_get.rs | 11 ++++--- tests/wasi-wast/wasi/snapshot1/inode.wasm | Bin 0 -> 59465 bytes tests/wasi-wast/wasi/snapshot1/inode.wast | 7 ++++ tests/wasi-wast/wasi/tests/inode.rs | 31 ++++++++++++++++++ 5 files changed, 46 insertions(+), 5 deletions(-) create mode 100755 tests/wasi-wast/wasi/snapshot1/inode.wasm create mode 100644 tests/wasi-wast/wasi/snapshot1/inode.wast create mode 100644 tests/wasi-wast/wasi/tests/inode.rs diff --git a/lib/wasi/src/fs/mod.rs b/lib/wasi/src/fs/mod.rs index f2d4fa93d85..db2637e2947 100644 --- a/lib/wasi/src/fs/mod.rs +++ b/lib/wasi/src/fs/mod.rs @@ -73,7 +73,7 @@ pub const MAX_SYMLINKS: u32 = 128; pub struct Inode(u64); impl Inode { - fn as_u64(&self) -> u64 { + pub fn as_u64(&self) -> u64 { self.0 } } diff --git a/lib/wasi/src/syscalls/wasi/path_filestat_get.rs b/lib/wasi/src/syscalls/wasi/path_filestat_get.rs index b277aee1612..ed77433c6f8 100644 --- a/lib/wasi/src/syscalls/wasi/path_filestat_get.rs +++ b/lib/wasi/src/syscalls/wasi/path_filestat_get.rs @@ -82,10 +82,13 @@ pub(crate) fn path_filestat_get_internal( path_string, flags & __WASI_LOOKUP_SYMLINK_FOLLOW != 0, )?; - if file_inode.is_preopened { - Ok(*file_inode.stat.read().unwrap().deref()) + let st_ino = file_inode.ino().as_u64(); + let mut stat = if file_inode.is_preopened { + *file_inode.stat.read().unwrap().deref() } else { let guard = file_inode.read(); - state.fs.get_stat_for_kind(guard.deref()) - } + state.fs.get_stat_for_kind(guard.deref())? + }; + stat.st_ino = st_ino; + Ok(stat) } diff --git a/tests/wasi-wast/wasi/snapshot1/inode.wasm b/tests/wasi-wast/wasi/snapshot1/inode.wasm new file mode 100755 index 0000000000000000000000000000000000000000..68122603cab8f06ae3956b6525d74b4b5edf51c3 GIT binary patch literal 59465 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 XQnlU(A6PjLMlA?&;1TIh&DMVbV-jS) literal 0 HcmV?d00001 diff --git a/tests/wasi-wast/wasi/snapshot1/inode.wast b/tests/wasi-wast/wasi/snapshot1/inode.wast new file mode 100644 index 00000000000..c7eec7c7fee --- /dev/null +++ b/tests/wasi-wast/wasi/snapshot1/inode.wast @@ -0,0 +1,7 @@ +;; This file was generated by https://github.com/wasmerio/wasi-tests + +(wasi_test "inode.wasm" + (preopens "test_fs") + (assert_return (i64.const 0)) + (assert_stdout "all done\n") +) diff --git a/tests/wasi-wast/wasi/tests/inode.rs b/tests/wasi-wast/wasi/tests/inode.rs new file mode 100644 index 00000000000..1c2e00ac69e --- /dev/null +++ b/tests/wasi-wast/wasi/tests/inode.rs @@ -0,0 +1,31 @@ +// WASI: +// dir: test_fs + +use std::fs; +use std::io; +#[cfg(target = "wasi")] +use std::os::wasi::fs::MetadataExt; + +// `test_fs` will be implicit. +// this need experimentat MetadataExt +// this program does nothing in native +// it only tests things in wasi +fn main() { + #[cfg(target = "wasi")] + { + let meta1 = fs::metadata("test_fs/hamlet/act1/scene1.txt").expect("could not find src file"); + let meta2 = fs::metadata("test_fs/hamlet/act1/scene2.txt").expect("could not find src file"); + if meta1.dev() == meta2.dev() && meta1.ino() == meta2.ino() { + println!("Warning, different files from same folder have same dev/inod"); + } + let meta3 = fs::metadata("test_fs/hamlet/act2/scene1.txt").expect("could not find src file"); + if meta1.dev() == meta3.dev() && meta1.ino() == meta3.ino() { + println!("Warning, different files from different folder with same name have same dev/inod"); + } + let meta4 = fs::metadata("test_fs/hamlet/act1/../act1/scene1.txt").expect("could not find src file"); + if meta1.dev() != meta4.dev() || meta1.ino() != meta4.ino() { + println!("Warning, same files have different dev/inod"); + } + } + println!("all done"); +}