@@ -1192,8 +1192,6 @@ impl File {
11921192 None  => Ok ( libc:: timespec  {  tv_sec :  0 ,  tv_nsec :  libc:: UTIME_OMIT  as  _  } ) , 
11931193 } 
11941194 } ; 
1195-  #[ cfg( not( any( target_os = "redox" ,  target_os = "espidf" ,  target_os = "horizon" ) ) ) ]  
1196-  let  times = [ to_timespec ( times. accessed ) ?,  to_timespec ( times. modified ) ?] ; 
11971195 cfg_if:: cfg_if! { 
11981196 if  #[ cfg( any( target_os = "redox" ,  target_os = "espidf" ,  target_os = "horizon" ) ) ]  { 
11991197 // Redox doesn't appear to support `UTIME_OMIT`. 
@@ -1205,6 +1203,7 @@ impl File {
12051203 "setting file times not supported" , 
12061204 ) ) 
12071205 }  else if  #[ cfg( any( target_os = "android" ,  target_os = "macos" ) ) ]  { 
1206+  let  times = [ to_timespec( times. accessed) ?,  to_timespec( times. modified) ?] ; 
12081207 // futimens requires macOS 10.13, and Android API level 19 
12091208 cvt( unsafe  { 
12101209 weak!( fn  futimens( c_int,  * const  libc:: timespec)  -> c_int) ; 
@@ -1231,6 +1230,22 @@ impl File {
12311230 } ) ?; 
12321231 Ok ( ( ) ) 
12331232 }  else { 
1233+  #[ cfg( all( target_os = "linux" ,  target_env = "gnu" ,  target_pointer_width = "32" ,  not( target_arch = "riscv32" ) ) ) ] 
1234+  { 
1235+  use  crate :: sys:: { time:: __timespec64,  weak:: weak} ; 
1236+ 
1237+  // Added in glibc 2.34 
1238+  weak!( fn  __futimens64( libc:: c_int,  * const  __timespec64)  -> libc:: c_int) ; 
1239+ 
1240+  if  let  Some ( futimens64)  = __futimens64. get( )  { 
1241+  let  to_timespec = |time:  Option <SystemTime >| time. map( |time| time. t. to_timespec64( ) ) 
1242+  . unwrap_or( __timespec64:: new( 0 ,  libc:: UTIME_OMIT  as  _) ) ; 
1243+  let  times = [ to_timespec( times. accessed) ,  to_timespec( times. modified) ] ; 
1244+  cvt( unsafe  {  futimens64( self . as_raw_fd( ) ,  times. as_ptr( ) )  } ) ?; 
1245+  return  Ok ( ( ) ) ; 
1246+  } 
1247+  } 
1248+  let  times = [ to_timespec( times. accessed) ?,  to_timespec( times. modified) ?] ; 
12341249 cvt( unsafe  {  libc:: futimens( self . as_raw_fd( ) ,  times. as_ptr( ) )  } ) ?; 
12351250 Ok ( ( ) ) 
12361251 } 
0 commit comments