@@ -395,11 +395,33 @@ extern "C" {
395395 pub fn signal ( signum : c_int , handler : sighandler_t ) -> sighandler_t ;
396396 pub fn raise ( signum : c_int ) -> c_int ;
397397
398+ // By default, the following link to 64-bit variants where the expected
399+ // `time_t` is also 64-bits.
400+ //
401+ // Under Windows x86 with GNU, `time_t` is still 32-bit wide on stable, so
402+ // these routines have to link with their 32-bit variants.
403+ cfg_if ! {
404+ if #[ cfg( all( target_arch = "x86" , target_env = "gnu" , not( gnu_time_bits64) ) ) ] {
405+ #[ link_name = "_ctime32" ]
406+ pub fn ctime( sourceTime: * const time_t) -> * mut c_char;
407+ #[ link_name = "_difftime32" ]
408+ pub fn difftime( timeEnd: time_t, timeStart: time_t) -> c_double;
409+ #[ link_name = "_gmtime32_s" ]
410+ pub fn gmtime_s( destTime: * mut tm, srcTime: * const time_t) -> c_int;
411+ #[ link_name = "_localtime32_s" ]
412+ pub fn localtime_s( tmDest: * mut tm, sourceTime: * const time_t) -> crate :: errno_t;
413+ #[ link_name = "_time32" ]
414+ pub fn time( destTime: * mut time_t) -> time_t;
415+ } else {
416+ pub fn ctime( sourceTime: * const time_t) -> * mut c_char;
417+ pub fn difftime( timeEnd: time_t, timeStart: time_t) -> c_double;
418+ pub fn gmtime_s( destTime: * mut tm, srcTime: * const time_t) -> c_int;
419+ pub fn localtime_s( tmDest: * mut tm, sourceTime: * const time_t) -> crate :: errno_t;
420+ pub fn time( destTime: * mut time_t) -> time_t;
421+ }
422+ }
423+
398424 pub fn clock ( ) -> clock_t ;
399- pub fn ctime ( sourceTime : * const time_t ) -> * mut c_char ;
400- pub fn difftime ( timeEnd : time_t , timeStart : time_t ) -> c_double ;
401- #[ link_name = "_gmtime64_s" ]
402- pub fn gmtime_s ( destTime : * mut tm , srcTime : * const time_t ) -> c_int ;
403425 #[ link_name = "_get_daylight" ]
404426 pub fn get_daylight ( hours : * mut c_int ) -> errno_t ;
405427 #[ link_name = "_get_dstbias" ]
@@ -413,10 +435,6 @@ extern "C" {
413435 size_in_bytes : size_t ,
414436 index : c_int ,
415437 ) -> errno_t ;
416- #[ link_name = "_localtime64_s" ]
417- pub fn localtime_s ( tmDest : * mut tm , sourceTime : * const time_t ) -> crate :: errno_t ;
418- #[ link_name = "_time64" ]
419- pub fn time ( destTime : * mut time_t ) -> time_t ;
420438 #[ link_name = "_tzset" ]
421439 pub fn tzset ( ) ;
422440 #[ link_name = "_chmod" ]
0 commit comments