diff options
| author | Ralf Jung <post@ralfj.de> | 2025-07-05 10:05:21 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-05 10:05:21 +0000 |
| commit | b2d8c81f7f1930f1a0d1a882c69322c9d7bb0545 (patch) | |
| tree | e4798eecfb3f430ab2ae41eaed99926206781d2c /src/tools/miri | |
| parent | 6ea0b65c09d976a1c5fa24029a6a60db99d34ceb (diff) | |
| parent | ef0490c8685ad6ef76e2777934571fc913abd1a8 (diff) | |
| download | rust-b2d8c81f7f1930f1a0d1a882c69322c9d7bb0545.tar.gz rust-b2d8c81f7f1930f1a0d1a882c69322c9d7bb0545.zip | |
Merge pull request #4444 from devnexen/filemetadata_upd
shims::fs adding more fields to FileMetadata
Diffstat (limited to 'src/tools/miri')
| -rw-r--r-- | src/tools/miri/src/shims/unix/fs.rs | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/tools/miri/src/shims/unix/fs.rs b/src/tools/miri/src/shims/unix/fs.rs index 0f7d453b296..0f2878ad26c 100644 --- a/src/tools/miri/src/shims/unix/fs.rs +++ b/src/tools/miri/src/shims/unix/fs.rs @@ -132,12 +132,12 @@ trait EvalContextExtPrivate<'tcx>: crate::MiriInterpCxExt<'tcx> { let buf = this.deref_pointer_as(buf_op, this.libc_ty_layout("stat"))?; this.write_int_fields_named( &[ - ("st_dev", 0), + ("st_dev", metadata.dev.into()), ("st_mode", mode.try_into().unwrap()), ("st_nlink", 0), ("st_ino", 0), - ("st_uid", 0), - ("st_gid", 0), + ("st_uid", metadata.uid.into()), + ("st_gid", metadata.gid.into()), ("st_rdev", 0), ("st_atime", access_sec.into()), ("st_mtime", modified_sec.into()), @@ -1544,6 +1544,9 @@ struct FileMetadata { created: Option<(u64, u32)>, accessed: Option<(u64, u32)>, modified: Option<(u64, u32)>, + dev: u64, + uid: u32, + gid: u32, } impl FileMetadata { @@ -1601,6 +1604,21 @@ impl FileMetadata { let modified = extract_sec_and_nsec(metadata.modified())?; // FIXME: Provide more fields using platform specific methods. - interp_ok(Ok(FileMetadata { mode, size, created, accessed, modified })) + + cfg_select! { + unix => { + use std::os::unix::fs::MetadataExt; + let dev = metadata.dev(); + let uid = metadata.uid(); + let gid = metadata.gid(); + } + _ => { + let dev = 0; + let uid = 0; + let gid = 0; + } + } + + interp_ok(Ok(FileMetadata { mode, size, created, accessed, modified, dev, uid, gid })) } } |
