Commit 8408e3a9 authored by Alexandre Julliard's avatar Alexandre Julliard

msvcrt: Add explicit 32- and 64-bit versions of the time functions.

parent b175a43f
...@@ -198,8 +198,15 @@ extern unsigned msvcrt_create_io_inherit_block(WORD*, BYTE**); ...@@ -198,8 +198,15 @@ extern unsigned msvcrt_create_io_inherit_block(WORD*, BYTE**);
#define _RT_CRNL 252 #define _RT_CRNL 252
#define _RT_BANNER 255 #define _RT_BANNER 255
struct MSVCRT__timeb { struct MSVCRT___timeb32 {
MSVCRT_time_t time; MSVCRT___time32_t time;
unsigned short millitm;
short timezone;
short dstflag;
};
struct MSVCRT___timeb64 {
MSVCRT___time64_t time;
unsigned short millitm; unsigned short millitm;
short timezone; short timezone;
short dstflag; short dstflag;
...@@ -659,11 +666,9 @@ char* __cdecl MSVCRT_setlocale(int,const char*); ...@@ -659,11 +666,9 @@ char* __cdecl MSVCRT_setlocale(int,const char*);
int __cdecl MSVCRT_fclose(MSVCRT_FILE*); int __cdecl MSVCRT_fclose(MSVCRT_FILE*);
void __cdecl MSVCRT_terminate(void); void __cdecl MSVCRT_terminate(void);
MSVCRT_FILE* __cdecl MSVCRT__iob_func(void); MSVCRT_FILE* __cdecl MSVCRT__iob_func(void);
MSVCRT_time_t __cdecl MSVCRT_mktime(struct MSVCRT_tm *t);
struct MSVCRT_tm* __cdecl MSVCRT_localtime(const MSVCRT_time_t* secs);
struct MSVCRT_tm* __cdecl MSVCRT_gmtime(const MSVCRT_time_t* secs);
MSVCRT_clock_t __cdecl MSVCRT_clock(void); MSVCRT_clock_t __cdecl MSVCRT_clock(void);
double __cdecl MSVCRT_difftime(MSVCRT_time_t time1, MSVCRT_time_t time2); MSVCRT___time32_t __cdecl MSVCRT__time32(MSVCRT___time32_t*);
MSVCRT___time64_t __cdecl MSVCRT__time64(MSVCRT___time64_t*);
MSVCRT_time_t __cdecl MSVCRT_time(MSVCRT_time_t*); MSVCRT_time_t __cdecl MSVCRT_time(MSVCRT_time_t*);
MSVCRT_FILE* __cdecl MSVCRT__fdopen(int, const char *); MSVCRT_FILE* __cdecl MSVCRT__fdopen(int, const char *);
MSVCRT_FILE* __cdecl MSVCRT__wfdopen(int, const MSVCRT_wchar_t *); MSVCRT_FILE* __cdecl MSVCRT__wfdopen(int, const MSVCRT_wchar_t *);
...@@ -697,7 +702,6 @@ MSVCRT_wchar_t*** __cdecl __p__wenviron(void); ...@@ -697,7 +702,6 @@ MSVCRT_wchar_t*** __cdecl __p__wenviron(void);
char* __cdecl _strdate(char* date); char* __cdecl _strdate(char* date);
char* __cdecl _strtime(char* date); char* __cdecl _strtime(char* date);
int __cdecl _setmbcp(int); int __cdecl _setmbcp(int);
void __cdecl MSVCRT__ftime(struct MSVCRT__timeb *buf);
int __cdecl MSVCRT__close(int); int __cdecl MSVCRT__close(int);
int __cdecl MSVCRT__dup(int); int __cdecl MSVCRT__dup(int);
int __cdecl MSVCRT__dup2(int, int); int __cdecl MSVCRT__dup2(int, int);
......
...@@ -210,9 +210,13 @@ ...@@ -210,9 +210,13 @@
@ cdecl _cputs(str) @ cdecl _cputs(str)
@ cdecl _creat(str long) MSVCRT__creat @ cdecl _creat(str long) MSVCRT__creat
@ varargs _cscanf(str) @ varargs _cscanf(str)
@ cdecl _ctime32(ptr) MSVCRT__ctime32
@ cdecl _ctime64(ptr) MSVCRT__ctime64
@ extern _ctype MSVCRT__ctype @ extern _ctype MSVCRT__ctype
@ cdecl _cwait(ptr long long) @ cdecl _cwait(ptr long long)
@ extern _daylight MSVCRT___daylight @ extern _daylight MSVCRT___daylight
@ cdecl _difftime32(long long) MSVCRT__difftime32
@ cdecl _difftime64(long long) MSVCRT__difftime64
@ extern _dstbias MSVCRT__dstbias @ extern _dstbias MSVCRT__dstbias
@ cdecl _dup (long) MSVCRT__dup @ cdecl _dup (long) MSVCRT__dup
@ cdecl _dup2 (long long) MSVCRT__dup2 @ cdecl _dup2 (long long) MSVCRT__dup2
...@@ -263,6 +267,8 @@ ...@@ -263,6 +267,8 @@
@ cdecl _fstat64(long ptr) MSVCRT__fstat64 @ cdecl _fstat64(long ptr) MSVCRT__fstat64
@ cdecl _fstati64(long ptr) MSVCRT__fstati64 @ cdecl _fstati64(long ptr) MSVCRT__fstati64
@ cdecl _ftime(ptr) MSVCRT__ftime @ cdecl _ftime(ptr) MSVCRT__ftime
@ cdecl _ftime32(ptr) MSVCRT__ftime32
@ cdecl _ftime64(ptr) MSVCRT__ftime64
@ cdecl -ret64 _ftol() ntdll._ftol @ cdecl -ret64 _ftol() ntdll._ftol
@ cdecl _fullpath(ptr str long) @ cdecl _fullpath(ptr str long)
@ cdecl _futime(long ptr) @ cdecl _futime(long ptr)
...@@ -286,6 +292,8 @@ ...@@ -286,6 +292,8 @@
@ cdecl _getw(ptr) MSVCRT__getw @ cdecl _getw(ptr) MSVCRT__getw
@ cdecl _getws(ptr) MSVCRT__getws @ cdecl _getws(ptr) MSVCRT__getws
@ cdecl _global_unwind2(ptr) @ cdecl _global_unwind2(ptr)
@ cdecl _gmtime32(ptr) MSVCRT__gmtime32
@ cdecl _gmtime64(ptr) MSVCRT__gmtime64
@ cdecl _heapadd (ptr long) @ cdecl _heapadd (ptr long)
@ cdecl _heapchk() @ cdecl _heapchk()
@ cdecl _heapmin() @ cdecl _heapmin()
...@@ -341,6 +349,8 @@ ...@@ -341,6 +349,8 @@
@ cdecl _lfind(ptr ptr ptr long ptr) @ cdecl _lfind(ptr ptr ptr long ptr)
@ cdecl _loaddll(str) @ cdecl _loaddll(str)
@ cdecl -i386 _local_unwind2(ptr long) @ cdecl -i386 _local_unwind2(ptr long)
@ cdecl _localtime32(ptr) MSVCRT__localtime32
@ cdecl _localtime64(ptr) MSVCRT__localtime64
@ cdecl _lock(long) @ cdecl _lock(long)
@ cdecl _locking(long long long) MSVCRT__locking @ cdecl _locking(long long long) MSVCRT__locking
@ cdecl _logb( double ) @ cdecl _logb( double )
...@@ -414,6 +424,8 @@ ...@@ -414,6 +424,8 @@
@ cdecl _memicmp(str str long) ntdll._memicmp @ cdecl _memicmp(str str long) ntdll._memicmp
@ cdecl _mkdir(str) MSVCRT__mkdir @ cdecl _mkdir(str) MSVCRT__mkdir
@ cdecl _mktemp(str) @ cdecl _mktemp(str)
@ cdecl _mktime32(ptr) MSVCRT__mktime32
@ cdecl _mktime64(ptr) MSVCRT__mktime64
@ cdecl _msize(ptr) @ cdecl _msize(ptr)
@ cdecl _nextafter(double double) @ cdecl _nextafter(double double)
@ cdecl _onexit(ptr) MSVCRT__onexit @ cdecl _onexit(ptr) MSVCRT__onexit
...@@ -493,6 +505,8 @@ ...@@ -493,6 +505,8 @@
@ cdecl _tell(long) @ cdecl _tell(long)
@ cdecl -ret64 _telli64(long) @ cdecl -ret64 _telli64(long)
@ cdecl _tempnam(str str) @ cdecl _tempnam(str str)
@ cdecl _time32(ptr) MSVCRT__time32
@ cdecl _time64(ptr) MSVCRT__time64
@ extern _timezone MSVCRT___timezone @ extern _timezone MSVCRT___timezone
@ cdecl _tolower(long) MSVCRT__tolower @ cdecl _tolower(long) MSVCRT__tolower
@ cdecl _toupper(long) MSVCRT__toupper @ cdecl _toupper(long) MSVCRT__toupper
...@@ -530,6 +544,8 @@ ...@@ -530,6 +544,8 @@
@ cdecl _wcsset(wstr long) @ cdecl _wcsset(wstr long)
@ cdecl _wcsupr(wstr) ntdll._wcsupr @ cdecl _wcsupr(wstr) ntdll._wcsupr
@ cdecl _wctime(ptr) MSVCRT__wctime @ cdecl _wctime(ptr) MSVCRT__wctime
@ cdecl _wctime32(ptr) MSVCRT__wctime32
@ cdecl _wctime64(ptr) MSVCRT__wctime64
@ extern _wenviron @ extern _wenviron
@ varargs _wexecl(wstr wstr) @ varargs _wexecl(wstr wstr)
@ varargs _wexecle(wstr wstr) @ varargs _wexecle(wstr wstr)
......
...@@ -115,11 +115,16 @@ static void test_structs(void) ...@@ -115,11 +115,16 @@ static void test_structs(void)
CHECK_FIELD(tm, tm_wday); CHECK_FIELD(tm, tm_wday);
CHECK_FIELD(tm, tm_yday); CHECK_FIELD(tm, tm_yday);
CHECK_FIELD(tm, tm_isdst); CHECK_FIELD(tm, tm_isdst);
CHECK_STRUCT(_timeb); CHECK_STRUCT(__timeb32);
CHECK_FIELD(_timeb, time); CHECK_FIELD(__timeb32, time);
CHECK_FIELD(_timeb, millitm); CHECK_FIELD(__timeb32, millitm);
CHECK_FIELD(_timeb, timezone); CHECK_FIELD(__timeb32, timezone);
CHECK_FIELD(_timeb, dstflag); CHECK_FIELD(__timeb32, dstflag);
CHECK_STRUCT(__timeb64);
CHECK_FIELD(__timeb64, time);
CHECK_FIELD(__timeb64, millitm);
CHECK_FIELD(__timeb64, timezone);
CHECK_FIELD(__timeb64, dstflag);
CHECK_STRUCT(_iobuf); CHECK_STRUCT(_iobuf);
CHECK_FIELD(_iobuf, _ptr); CHECK_FIELD(_iobuf, _ptr);
CHECK_FIELD(_iobuf, _cnt); CHECK_FIELD(_iobuf, _cnt);
......
...@@ -85,9 +85,9 @@ static inline void unix_tm_to_msvcrt( struct MSVCRT_tm *dest, const struct tm *s ...@@ -85,9 +85,9 @@ static inline void unix_tm_to_msvcrt( struct MSVCRT_tm *dest, const struct tm *s
#define TICKS_1601_TO_1970 (SECS_1601_TO_1970 * TICKSPERSEC) #define TICKS_1601_TO_1970 (SECS_1601_TO_1970 * TICKSPERSEC)
/********************************************************************** /**********************************************************************
* mktime (MSVCRT.@) * _mktime64 (MSVCRT.@)
*/ */
MSVCRT_time_t CDECL MSVCRT_mktime(struct MSVCRT_tm *mstm) MSVCRT___time64_t CDECL MSVCRT__mktime64(struct MSVCRT_tm *mstm)
{ {
time_t secs; time_t secs;
struct tm tm; struct tm tm;
...@@ -99,10 +99,33 @@ MSVCRT_time_t CDECL MSVCRT_mktime(struct MSVCRT_tm *mstm) ...@@ -99,10 +99,33 @@ MSVCRT_time_t CDECL MSVCRT_mktime(struct MSVCRT_tm *mstm)
return secs < 0 ? -1 : secs; return secs < 0 ? -1 : secs;
} }
/**********************************************************************
* _mktime32 (MSVCRT.@)
*/
MSVCRT___time32_t CDECL MSVCRT__mktime32(struct MSVCRT_tm *mstm)
{
return MSVCRT__mktime64( mstm );
}
/**********************************************************************
* mktime (MSVCRT.@)
*/
#ifdef _WIN64
MSVCRT___time64_t CDECL MSVCRT_mktime(struct MSVCRT_tm *mstm)
{
return MSVCRT__mktime64( mstm );
}
#else
MSVCRT___time32_t CDECL MSVCRT_mktime(struct MSVCRT_tm *mstm)
{
return MSVCRT__mktime32( mstm );
}
#endif
/********************************************************************* /*********************************************************************
* localtime (MSVCRT.@) * _localtime64 (MSVCRT.@)
*/ */
struct MSVCRT_tm* CDECL MSVCRT_localtime(const MSVCRT_time_t* secs) struct MSVCRT_tm* CDECL MSVCRT__localtime64(const MSVCRT___time64_t* secs)
{ {
struct tm tm; struct tm tm;
thread_data_t *data; thread_data_t *data;
...@@ -119,9 +142,33 @@ struct MSVCRT_tm* CDECL MSVCRT_localtime(const MSVCRT_time_t* secs) ...@@ -119,9 +142,33 @@ struct MSVCRT_tm* CDECL MSVCRT_localtime(const MSVCRT_time_t* secs)
} }
/********************************************************************* /*********************************************************************
* gmtime (MSVCRT.@) * _localtime32 (MSVCRT.@)
*/ */
struct MSVCRT_tm* CDECL MSVCRT_gmtime(const MSVCRT_time_t* secs) struct MSVCRT_tm* CDECL MSVCRT__localtime32(const MSVCRT___time32_t* secs)
{
MSVCRT___time64_t secs64 = *secs;
return MSVCRT__localtime64( &secs64 );
}
/*********************************************************************
* localtime (MSVCRT.@)
*/
#ifdef _WIN64
struct MSVCRT_tm* CDECL MSVCRT_localtime(const MSVCRT___time64_t* secs)
{
return MSVCRT__localtime64( secs );
}
#else
struct MSVCRT_tm* CDECL MSVCRT_localtime(const MSVCRT___time32_t* secs)
{
return MSVCRT__localtime32( secs );
}
#endif
/*********************************************************************
* _gmtime64 (MSVCRT.@)
*/
struct MSVCRT_tm* CDECL MSVCRT__gmtime64(const MSVCRT___time64_t* secs)
{ {
thread_data_t * const data = msvcrt_get_thread_data(); thread_data_t * const data = msvcrt_get_thread_data();
int i; int i;
...@@ -154,6 +201,30 @@ struct MSVCRT_tm* CDECL MSVCRT_gmtime(const MSVCRT_time_t* secs) ...@@ -154,6 +201,30 @@ struct MSVCRT_tm* CDECL MSVCRT_gmtime(const MSVCRT_time_t* secs)
return &data->time_buffer; return &data->time_buffer;
} }
/*********************************************************************
* _gmtime32 (MSVCRT.@)
*/
struct MSVCRT_tm* CDECL MSVCRT__gmtime32(const MSVCRT___time32_t* secs)
{
MSVCRT___time64_t secs64 = *secs;
return MSVCRT__gmtime64( &secs64 );
}
/*********************************************************************
* gmtime (MSVCRT.@)
*/
#ifdef _WIN64
struct MSVCRT_tm* CDECL MSVCRT_gmtime(const MSVCRT___time64_t* secs)
{
return MSVCRT__gmtime64( secs );
}
#else
struct MSVCRT_tm* CDECL MSVCRT_gmtime(const MSVCRT___time32_t* secs)
{
return MSVCRT__gmtime32( secs );
}
#endif
/********************************************************************** /**********************************************************************
* _strdate (MSVCRT.@) * _strdate (MSVCRT.@)
*/ */
...@@ -223,17 +294,40 @@ MSVCRT_clock_t CDECL MSVCRT_clock(void) ...@@ -223,17 +294,40 @@ MSVCRT_clock_t CDECL MSVCRT_clock(void)
} }
/********************************************************************* /*********************************************************************
* difftime (MSVCRT.@) * _difftime64 (MSVCRT.@)
*/ */
double CDECL MSVCRT_difftime(MSVCRT_time_t time1, MSVCRT_time_t time2) double CDECL MSVCRT__difftime64(MSVCRT___time64_t time1, MSVCRT___time64_t time2)
{ {
return (double)(time1 - time2); return (double)(time1 - time2);
} }
/********************************************************************* /*********************************************************************
* _ftime (MSVCRT.@) * _difftime32 (MSVCRT.@)
*/ */
void CDECL MSVCRT__ftime(struct MSVCRT__timeb *buf) double CDECL MSVCRT__difftime32(MSVCRT___time32_t time1, MSVCRT___time32_t time2)
{
return (double)(time1 - time2);
}
/*********************************************************************
* difftime (MSVCRT.@)
*/
#ifdef _WIN64
double CDECL MSVCRT_difftime(MSVCRT___time64_t time1, MSVCRT___time64_t time2)
{
return MSVCRT__difftime64( time1, time2 );
}
#else
double CDECL MSVCRT_difftime(MSVCRT___time32_t time1, MSVCRT___time32_t time2)
{
return MSVCRT__difftime32( time1, time2 );
}
#endif
/*********************************************************************
* _ftime64 (MSVCRT.@)
*/
void CDECL MSVCRT__ftime64(struct MSVCRT___timeb64 *buf)
{ {
TIME_ZONE_INFORMATION tzinfo; TIME_ZONE_INFORMATION tzinfo;
FILETIME ft; FILETIME ft;
...@@ -253,18 +347,76 @@ void CDECL MSVCRT__ftime(struct MSVCRT__timeb *buf) ...@@ -253,18 +347,76 @@ void CDECL MSVCRT__ftime(struct MSVCRT__timeb *buf)
} }
/********************************************************************* /*********************************************************************
* time (MSVCRT.@) * _ftime32 (MSVCRT.@)
*/ */
MSVCRT_time_t CDECL MSVCRT_time(MSVCRT_time_t* buf) void CDECL MSVCRT__ftime32(struct MSVCRT___timeb32 *buf)
{ {
MSVCRT_time_t curtime; struct MSVCRT___timeb64 buf64;
struct MSVCRT__timeb tb;
MSVCRT__ftime(&tb); MSVCRT__ftime64( &buf64 );
buf->time = buf64.time;
buf->millitm = buf64.millitm;
buf->timezone = buf64.timezone;
buf->dstflag = buf64.dstflag;
}
curtime = tb.time; /*********************************************************************
return buf ? *buf = curtime : curtime; * _ftime (MSVCRT.@)
*/
#ifdef _WIN64
void CDECL MSVCRT__ftime(struct MSVCRT___timeb64 *buf)
{
return MSVCRT__ftime64( buf );
} }
#else
void CDECL MSVCRT__ftime(struct MSVCRT___timeb32 *buf)
{
return MSVCRT__ftime32( buf );
}
#endif
/*********************************************************************
* _time64 (MSVCRT.@)
*/
MSVCRT___time64_t CDECL MSVCRT__time64(MSVCRT___time64_t *buf)
{
MSVCRT___time64_t curtime;
struct MSVCRT___timeb64 tb;
MSVCRT__ftime64(&tb);
curtime = tb.time;
return buf ? *buf = curtime : curtime;
}
/*********************************************************************
* _time32 (MSVCRT.@)
*/
MSVCRT___time32_t CDECL MSVCRT__time32(MSVCRT___time32_t *buf)
{
MSVCRT___time32_t curtime;
struct MSVCRT___timeb64 tb;
MSVCRT__ftime64(&tb);
curtime = tb.time;
return buf ? *buf = curtime : curtime;
}
/*********************************************************************
* time (MSVCRT.@)
*/
#ifdef _WIN64
MSVCRT___time64_t CDECL MSVCRT_time(MSVCRT___time64_t* buf)
{
return MSVCRT__time64( buf );
}
#else
MSVCRT___time32_t CDECL MSVCRT_time(MSVCRT___time32_t* buf)
{
return MSVCRT__time32( buf );
}
#endif
/********************************************************************* /*********************************************************************
* _daylight (MSVCRT.@) * _daylight (MSVCRT.@)
...@@ -443,20 +595,69 @@ MSVCRT_wchar_t * CDECL MSVCRT__wasctime(const struct MSVCRT_tm *mstm) ...@@ -443,20 +595,69 @@ MSVCRT_wchar_t * CDECL MSVCRT__wasctime(const struct MSVCRT_tm *mstm)
} }
/********************************************************************* /*********************************************************************
* ctime (MSVCRT.@) * _ctime64 (MSVCRT.@)
*/
char * CDECL MSVCRT__ctime64(const MSVCRT___time64_t *time)
{
struct MSVCRT_tm *t;
t = MSVCRT__localtime64( time );
if (!t) return NULL;
return MSVCRT_asctime( t );
}
/*********************************************************************
* _ctime32 (MSVCRT.@)
*/ */
char * CDECL MSVCRT_ctime(const MSVCRT_time_t *time) char * CDECL MSVCRT__ctime32(const MSVCRT___time32_t *time)
{ {
struct MSVCRT_tm *t; struct MSVCRT_tm *t;
t = MSVCRT_localtime( time ); t = MSVCRT__localtime32( time );
if (!t) return NULL; if (!t) return NULL;
return MSVCRT_asctime( t ); return MSVCRT_asctime( t );
} }
/********************************************************************* /*********************************************************************
* ctime (MSVCRT.@)
*/
#ifdef _WIN64
char * CDECL MSVCRT_ctime(const MSVCRT___time64_t *time)
{
return MSVCRT__ctime64( time );
}
#else
char * CDECL MSVCRT_ctime(const MSVCRT___time32_t *time)
{
return MSVCRT__ctime32( time );
}
#endif
/*********************************************************************
* _wctime64 (MSVCRT.@)
*/
MSVCRT_wchar_t * CDECL MSVCRT__wctime64(const MSVCRT___time64_t *time)
{
return MSVCRT__wasctime( MSVCRT__localtime64(time) );
}
/*********************************************************************
* _wctime32 (MSVCRT.@)
*/
MSVCRT_wchar_t * CDECL MSVCRT__wctime32(const MSVCRT___time32_t *time)
{
return MSVCRT__wasctime( MSVCRT__localtime32(time) );
}
/*********************************************************************
* _wctime (MSVCRT.@) * _wctime (MSVCRT.@)
*/ */
MSVCRT_wchar_t * CDECL MSVCRT__wctime(const MSVCRT_time_t *time) #ifdef _WIN64
MSVCRT_wchar_t * CDECL MSVCRT__wctime(const MSVCRT___time64_t *time)
{ {
return MSVCRT__wasctime( MSVCRT_localtime(time) ); return MSVCRT__wctime64( time );
} }
#else
MSVCRT_wchar_t * CDECL MSVCRT__wctime(const MSVCRT___time32_t *time)
{
return MSVCRT__wctime32( time );
}
#endif
...@@ -126,11 +126,19 @@ typedef __int64 __time64_t; ...@@ -126,11 +126,19 @@ typedef __int64 __time64_t;
#define _TIME64_T_DEFINED #define _TIME64_T_DEFINED
#endif #endif
#ifdef _USE_32BIT_TIME_T
# ifdef _WIN64
# error You cannot use 32-bit time_t in Win64
# endif
#elif !defined(_WIN64)
# define _USE_32BIT_TIME_T
#endif
#ifndef _TIME_T_DEFINED #ifndef _TIME_T_DEFINED
#ifdef _WIN64 #ifdef _USE_32BIT_TIME_T
typedef __time64_t time_t;
#else
typedef __time32_t time_t; typedef __time32_t time_t;
#else
typedef __time64_t time_t;
#endif #endif
#define _TIME_T_DEFINED #define _TIME_T_DEFINED
#endif #endif
......
...@@ -33,6 +33,20 @@ struct _timeb ...@@ -33,6 +33,20 @@ struct _timeb
short timezone; short timezone;
short dstflag; short dstflag;
}; };
struct __timeb32
{
__time32_t time;
unsigned short millitm;
short timezone;
short dstflag;
};
struct __timeb64
{
__time64_t time;
unsigned short millitm;
short timezone;
short dstflag;
};
#endif /* _TIMEB_DEFINED */ #endif /* _TIMEB_DEFINED */
...@@ -40,12 +54,18 @@ struct _timeb ...@@ -40,12 +54,18 @@ struct _timeb
extern "C" { extern "C" {
#endif #endif
void __cdecl _ftime(struct _timeb*); void __cdecl _ftime32(struct __timeb32*);
void __cdecl _ftime64(struct __timeb64*);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#ifdef _USE_32BIT_TIME_T
static inline void __cdecl _ftime(struct _timeb *tb) { return _ftime32((struct __timeb32*)tb); }
#else
static inline void __cdecl _ftime(struct _timeb *tb) { return _ftime64((struct __timeb64*)tb); }
#endif
#define timeb _timeb #define timeb _timeb
......
...@@ -77,6 +77,15 @@ extern long _timezone; ...@@ -77,6 +77,15 @@ extern long _timezone;
extern char *_tzname; extern char *_tzname;
#endif #endif
#ifdef _USE_32BIT_TIME_T
#define _ctime32 ctime
#define _difftime32 difftime
#define _gmtime32 gmtime
#define _localtime32 localtime
#define _mktime32 mktime
#define _time32 time
#endif
unsigned __cdecl _getsystime(struct tm*); unsigned __cdecl _getsystime(struct tm*);
unsigned __cdecl _setsystime(struct tm*,unsigned); unsigned __cdecl _setsystime(struct tm*,unsigned);
char* __cdecl _strdate(char*); char* __cdecl _strdate(char*);
...@@ -85,21 +94,47 @@ void __cdecl _tzset(void); ...@@ -85,21 +94,47 @@ void __cdecl _tzset(void);
char* __cdecl asctime(const struct tm*); char* __cdecl asctime(const struct tm*);
clock_t __cdecl clock(void); clock_t __cdecl clock(void);
char* __cdecl ctime(const time_t*); char* __cdecl _ctime32(const __time32_t*);
double __cdecl difftime(time_t,time_t); char* __cdecl _ctime64(const __time64_t*);
struct tm* __cdecl gmtime(const time_t*); double __cdecl _difftime32(__time32_t,__time32_t);
struct tm* __cdecl localtime(const time_t*); double __cdecl _difftime64(__time64_t,__time64_t);
time_t __cdecl mktime(struct tm*); struct tm* __cdecl _gmtime32(const __time32_t*);
struct tm* __cdecl _gmtime64(const __time64_t*);
struct tm* __cdecl _localtime32(const __time32_t*);
struct tm* __cdecl _localtime64(const __time64_t*);
__time32_t __cdecl _mktime32(struct tm*);
__time64_t __cdecl _mktime64(struct tm*);
size_t __cdecl strftime(char*,size_t,const char*,const struct tm*); size_t __cdecl strftime(char*,size_t,const char*,const struct tm*);
time_t __cdecl time(time_t*); __time32_t __cdecl _time32(__time32_t*);
__time64_t __cdecl _time64(__time64_t*);
#ifndef _USE_32BIT_TIME_T
static inline char* ctime(const time_t *t) { return _ctime64(t); }
static inline double difftime(time_t t1, time_t t2) { return _difftime64(t1, t2); }
static inline struct tm* gmtime(const time_t *t) { return _gmtime64(t); }
static inline struct tm* localtime(const time_t *t) { return _localtime64(t); }
static inline time_t mktime(struct tm *tm) { return _mktime64(tm); }
static inline time_t time(time_t *t) { return _time64(t); }
#endif
#ifndef _WTIME_DEFINED #ifndef _WTIME_DEFINED
#define _WTIME_DEFINED #define _WTIME_DEFINED
#ifdef _USE_32BIT_TIME_T
#define _wctime32 _wctime
#endif
wchar_t* __cdecl _wasctime(const struct tm*); wchar_t* __cdecl _wasctime(const struct tm*);
size_t __cdecl wcsftime(wchar_t*,size_t,const wchar_t*,const struct tm*); size_t __cdecl wcsftime(wchar_t*,size_t,const wchar_t*,const struct tm*);
wchar_t* __cdecl _wctime(const time_t*); wchar_t* __cdecl _wctime32(const __time32_t*);
wchar_t* __cdecl _wctime64(const __time64_t*);
wchar_t* __cdecl _wstrdate(wchar_t*); wchar_t* __cdecl _wstrdate(wchar_t*);
wchar_t* __cdecl _wstrtime(wchar_t*); wchar_t* __cdecl _wstrtime(wchar_t*);
#ifndef _USE_32BIT_TIME_T
static inline wchar_t* _wctime(const time_t *t) { return _wctime64(t); }
#endif
#endif /* _WTIME_DEFINED */ #endif /* _WTIME_DEFINED */
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -370,11 +370,22 @@ size_t __cdecl wcsxfrm(wchar_t*,const wchar_t*,size_t); ...@@ -370,11 +370,22 @@ size_t __cdecl wcsxfrm(wchar_t*,const wchar_t*,size_t);
#ifndef _WTIME_DEFINED #ifndef _WTIME_DEFINED
#define _WTIME_DEFINED #define _WTIME_DEFINED
#ifdef _USE_32BIT_TIME_T
#define _wctime32 _wctime
#endif
wchar_t* __cdecl _wasctime(const struct tm*); wchar_t* __cdecl _wasctime(const struct tm*);
size_t __cdecl wcsftime(wchar_t*,size_t,const wchar_t*,const struct tm*); size_t __cdecl wcsftime(wchar_t*,size_t,const wchar_t*,const struct tm*);
wchar_t* __cdecl _wctime(const time_t*); wchar_t* __cdecl _wctime32(const __time32_t*);
wchar_t* __cdecl _wctime64(const __time64_t*);
wchar_t* __cdecl _wstrdate(wchar_t*); wchar_t* __cdecl _wstrdate(wchar_t*);
wchar_t* __cdecl _wstrtime(wchar_t*); wchar_t* __cdecl _wstrtime(wchar_t*);
#ifndef _USE_32BIT_TIME_T
static inline wchar_t* _wctime(const time_t *t) { return _wctime64(t); }
#endif
#endif /* _WTIME_DEFINED */ #endif /* _WTIME_DEFINED */
wchar_t __cdecl btowc(int); wchar_t __cdecl btowc(int);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment