@@ -132,12 +132,12 @@ trait EvalContextExtPrivate<'tcx>: crate::MiriInterpCxExt<'tcx> {
132
132
let buf = this. deref_pointer_as ( buf_op, this. libc_ty_layout ( "stat" ) ) ?;
133
133
this. write_int_fields_named (
134
134
& [
135
- ( "st_dev" , 0 ) ,
135
+ ( "st_dev" , metadata . dev . into ( ) ) ,
136
136
( "st_mode" , mode. try_into ( ) . unwrap ( ) ) ,
137
137
( "st_nlink" , 0 ) ,
138
138
( "st_ino" , 0 ) ,
139
- ( "st_uid" , 0 ) ,
140
- ( "st_gid" , 0 ) ,
139
+ ( "st_uid" , metadata . uid . into ( ) ) ,
140
+ ( "st_gid" , metadata . gid . into ( ) ) ,
141
141
( "st_rdev" , 0 ) ,
142
142
( "st_atime" , access_sec. into ( ) ) ,
143
143
( "st_mtime" , modified_sec. into ( ) ) ,
@@ -1544,6 +1544,9 @@ struct FileMetadata {
1544
1544
created : Option < ( u64 , u32 ) > ,
1545
1545
accessed : Option < ( u64 , u32 ) > ,
1546
1546
modified : Option < ( u64 , u32 ) > ,
1547
+ dev : u64 ,
1548
+ uid : u32 ,
1549
+ gid : u32 ,
1547
1550
}
1548
1551
1549
1552
impl FileMetadata {
@@ -1601,6 +1604,21 @@ impl FileMetadata {
1601
1604
let modified = extract_sec_and_nsec ( metadata. modified ( ) ) ?;
1602
1605
1603
1606
// 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 } ) )
1605
1623
}
1606
1624
}
0 commit comments