@@ -130,18 +130,21 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
130130 let size = this. read_scalar ( size_op) ?. to_usize ( & * this. tcx ) ?;
131131 // If we cannot get the current directory, we return null
132132 // FIXME: Technically we have to set the `errno` global too
133- if let Ok ( cwd) = env:: current_dir ( ) {
134- // It is not clear what happens with non-utf8 paths here
135- let mut bytes = cwd. display ( ) . to_string ( ) . into_bytes ( ) ;
136- // If the buffer is smaller or equal than the path, we return null.
137- // FIXME: Technically we have to set the `errno` global too
138- if ( bytes. len ( ) as u64 ) < size {
139- // We add a `/0` terminator
140- bytes. push ( 0 ) ;
141- // This is ok because the buffer is larger than the path with the null terminator.
142- this. memory_mut ( ) . get_mut ( buf. alloc_id ) ?. write_bytes ( tcx, buf, & bytes) ?;
143- return Ok ( Scalar :: Ptr ( buf) )
133+ match env:: current_dir ( ) {
134+ Ok ( cwd) =>{
135+ // It is not clear what happens with non-utf8 paths here
136+ let mut bytes = cwd. display ( ) . to_string ( ) . into_bytes ( ) ;
137+ // If the buffer is smaller or equal than the path, we return null.
138+ if ( bytes. len ( ) as u64 ) < size {
139+ // We add a `/0` terminator
140+ bytes. push ( 0 ) ;
141+ // This is ok because the buffer is larger than the path with the null terminator.
142+ this. memory_mut ( ) . get_mut ( buf. alloc_id ) ?. write_bytes ( tcx, buf, & bytes) ?;
143+ return Ok ( Scalar :: Ptr ( buf) )
144+ }
145+ this. machine . last_error = 34 ; // ERANGE
144146 }
147+ Err ( e) => this. machine . last_error = e. raw_os_error ( ) . unwrap ( ) as u32 ,
145148 }
146149 Ok ( Scalar :: ptr_null ( & * this. tcx ) )
147150 }
0 commit comments