@@ -132,12 +132,12 @@ trait EvalContextExtPrivate<'tcx>: crate::MiriInterpCxExt<'tcx> {
132132 let buf = this. deref_pointer_as ( buf_op, this. libc_ty_layout ( "stat" ) ) ?;
133133 this. write_int_fields_named (
134134 & [
135- ( "st_dev" , 0 ) ,
135+ ( "st_dev" , metadata . dev . into ( ) ) ,
136136 ( "st_mode" , mode. try_into ( ) . unwrap ( ) ) ,
137137 ( "st_nlink" , 0 ) ,
138138 ( "st_ino" , 0 ) ,
139- ( "st_uid" , 0 ) ,
140- ( "st_gid" , 0 ) ,
139+ ( "st_uid" , metadata . uid . into ( ) ) ,
140+ ( "st_gid" , metadata . gid . into ( ) ) ,
141141 ( "st_rdev" , 0 ) ,
142142 ( "st_atime" , access_sec. into ( ) ) ,
143143 ( "st_mtime" , modified_sec. into ( ) ) ,
@@ -1544,6 +1544,9 @@ struct FileMetadata {
15441544 created : Option < ( u64 , u32 ) > ,
15451545 accessed : Option < ( u64 , u32 ) > ,
15461546 modified : Option < ( u64 , u32 ) > ,
1547+ dev : u64 ,
1548+ uid : u32 ,
1549+ gid : u32 ,
15471550}
15481551
15491552impl FileMetadata {
@@ -1601,6 +1604,21 @@ impl FileMetadata {
16011604 let modified = extract_sec_and_nsec ( metadata. modified ( ) ) ?;
16021605
16031606 // FIXME: Provide more fields using platform specific methods.
1604- interp_ok ( Ok ( FileMetadata { mode, size, created, accessed, modified } ) )
1607+
1608+ cfg_select ! {
1609+ unix => {
1610+ use std:: os:: unix:: fs:: MetadataExt ;
1611+ let dev = metadata. dev( ) ;
1612+ let uid = metadata. uid( ) ;
1613+ let gid = metadata. gid( ) ;
1614+ }
1615+ _ => {
1616+ let dev = 0 ;
1617+ let uid = 0 ;
1618+ let gid = 0 ;
1619+ }
1620+ }
1621+
1622+ interp_ok ( Ok ( FileMetadata { mode, size, created, accessed, modified, dev, uid, gid } ) )
16051623 }
16061624}
0 commit comments