about summary refs log tree commit diff
path: root/src/tools/miri
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2025-07-05 10:05:21 +0000
committerGitHub <noreply@github.com>2025-07-05 10:05:21 +0000
commitb2d8c81f7f1930f1a0d1a882c69322c9d7bb0545 (patch)
treee4798eecfb3f430ab2ae41eaed99926206781d2c /src/tools/miri
parent6ea0b65c09d976a1c5fa24029a6a60db99d34ceb (diff)
parentef0490c8685ad6ef76e2777934571fc913abd1a8 (diff)
downloadrust-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.rs26
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 }))
     }
 }