get path filestat on a dir

This commit is contained in:
Pat Hickey
2021-01-05 13:51:55 -08:00
parent 07a9584a08
commit fb32f65118
2 changed files with 18 additions and 2 deletions

View File

@@ -26,6 +26,7 @@ pub trait WasiDir {
fn unlink_file(&self, path: &str) -> Result<(), Error>;
fn read_link(&self, path: &str) -> Result<PathBuf, Error>;
fn get_filestat(&self) -> Result<Filestat, Error>;
fn get_path_filestat(&self, path: &str) -> Result<Filestat, Error>;
fn rename(&self, path: &str, dest_dir: &dyn WasiDir, dest_path: &str) -> Result<(), Error>;
fn hard_link(
&self,
@@ -349,7 +350,21 @@ impl WasiDir for cap_std::fs::Dir {
Ok(link)
}
fn get_filestat(&self) -> Result<Filestat, Error> {
let meta = self.metadata(".")?;
let meta = self.dir_metadata()?;
use cap_fs_ext::MetadataExt;
Ok(Filestat {
device_id: meta.dev(),
inode: meta.ino(),
filetype: FileType::from(&meta.file_type()),
nlink: meta.nlink(),
size: meta.len(),
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 get_path_filestat(&self, path: &str) -> Result<Filestat, Error> {
let meta = self.metadata(Path::new(path))?;
use cap_fs_ext::MetadataExt;
Ok(Filestat {
device_id: meta.dev(),

View File

@@ -647,7 +647,8 @@ impl<'a> wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
let table = self.table();
let dir_entry: Ref<DirEntry> = table.get(u32::from(dirfd))?;
let dir = dir_entry.get_cap(DirCaps::PATH_FILESTAT_GET)?;
todo!()
let filestat = dir.get_path_filestat(path.as_str()?.deref())?;
Ok(types::Filestat::from(filestat))
}
fn path_filestat_set_times(