Module: wine Branch: master Commit: 504e68ac2491e5743b257337633a383e11fa05d4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=504e68ac2491e5743b25733763...
Author: Eryk Wieliczko ewdevel@gmail.com Date: Sat Nov 20 14:49:53 2010 +0100
msvcrt: Implement _ctime32/64_s.
---
dlls/msvcr100/msvcr100.spec | 4 +- dlls/msvcr80/msvcr80.spec | 4 +- dlls/msvcr90/msvcr90.spec | 4 +- dlls/msvcrt/msvcrt.spec | 4 +- dlls/msvcrt/time.c | 44 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 52 insertions(+), 8 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 6e860e8..a305cb2 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -560,9 +560,9 @@ @ varargs _cscanf_s(str) msvcrt._cscanf_s @ varargs _cscanf_s_l(str ptr) msvcrt._cscanf_s_l @ cdecl _ctime32(ptr) msvcrt._ctime32 -@ stub _ctime32_s +@ cdecl _ctime32_s(str long ptr) msvcrt._ctime32_s @ cdecl _ctime64(ptr) msvcrt._ctime64 -@ stub _ctime64_s +@ cdecl _ctime64_s(str long ptr) msvcrt._ctime64_s @ cdecl _cwait(ptr long long) msvcrt._cwait @ varargs _cwprintf(wstr) msvcrt._cwprintf @ stub _cwprintf_l diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 17785be..36f522c 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -399,9 +399,9 @@ @ varargs _cscanf_s(str) msvcrt._cscanf_s @ varargs _cscanf_s_l(str ptr) msvcrt._cscanf_s_l @ cdecl _ctime32(ptr) msvcrt._ctime32 -@ stub _ctime32_s +@ cdecl _ctime32_s(str ptr long) msvcrt._ctime32_s @ cdecl _ctime64(ptr) msvcrt._ctime64 -@ stub _ctime64_s +@ cdecl _ctime64_s(str ptr long) msvcrt._ctime64_s @ cdecl _cwait(ptr long long) msvcrt._cwait @ varargs _cwprintf(wstr) msvcrt._cwprintf @ stub _cwprintf_l diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 663e1b7..33bfb33 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -391,9 +391,9 @@ @ varargs _cscanf_s(str) msvcrt._cscanf_s @ varargs _cscanf_s_l(str ptr) msvcrt._cscanf_s_l @ cdecl _ctime32(ptr) msvcrt._ctime32 -@ stub _ctime32_s +@ cdecl _ctime32_s(str long ptr) msvcrt._ctime32_s @ cdecl _ctime64(ptr) msvcrt._ctime64 -@ stub _ctime64_s +@ cdecl _ctime64_s(str long ptr) msvcrt._ctime64_s @ cdecl _cwait(ptr long long) msvcrt._cwait @ varargs _cwprintf(wstr) msvcrt._cwprintf @ stub _cwprintf_l diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 3db6fa4..e65c152 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -356,9 +356,9 @@ @ varargs _cscanf_s(str) @ varargs _cscanf_s_l(str ptr) @ cdecl _ctime32(ptr) MSVCRT__ctime32 -# stub _ctime32_s +@ cdecl _ctime32_s(str long ptr) MSVCRT__ctime32_s @ cdecl _ctime64(ptr) MSVCRT__ctime64 -# stub _ctime64_s +@ cdecl _ctime64_s(str long ptr) MSVCRT__ctime64_s @ extern _ctype MSVCRT__ctype @ cdecl _cwait(ptr long long) @ varargs _cwprintf(wstr) diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c index b345a7f..7ccdc7d 100644 --- a/dlls/msvcrt/time.c +++ b/dlls/msvcrt/time.c @@ -902,6 +902,28 @@ char * CDECL MSVCRT__ctime64(const MSVCRT___time64_t *time) }
/********************************************************************* + * _ctime64_s (MSVCRT.@) + */ +int CDECL MSVCRT__ctime64_s(char *res, MSVCRT_size_t len, const MSVCRT___time64_t *time) +{ + struct MSVCRT_tm *t; + if( !MSVCRT_CHECK_PMT( res != NULL ) || !MSVCRT_CHECK_PMT( len >= 26 ) ) + { + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EINVAL; + } + res[0] = '\0'; + if( !MSVCRT_CHECK_PMT( time != NULL ) || !MSVCRT_CHECK_PMT( time > 0 ) ) + { + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EINVAL; + } + t = MSVCRT__localtime64( time ); + strcpy( res, MSVCRT_asctime( t ) ); + return 0; +} + +/********************************************************************* * _ctime32 (MSVCRT.@) */ char * CDECL MSVCRT__ctime32(const MSVCRT___time32_t *time) @@ -913,6 +935,28 @@ char * CDECL MSVCRT__ctime32(const MSVCRT___time32_t *time) }
/********************************************************************* + * _ctime32_s (MSVCRT.@) + */ +int CDECL MSVCRT__ctime32_s(char *res, MSVCRT_size_t len, const MSVCRT___time32_t *time) +{ + struct MSVCRT_tm *t; + if( !MSVCRT_CHECK_PMT( res != NULL ) || !MSVCRT_CHECK_PMT( len >= 26 ) ) + { + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EINVAL; + } + res[0] = '\0'; + if( !MSVCRT_CHECK_PMT( time != NULL ) || !MSVCRT_CHECK_PMT( time > 0 ) ) + { + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EINVAL; + } + t = MSVCRT__localtime32( time ); + strcpy( res, MSVCRT_asctime( t ) ); + return 0; +} + +/********************************************************************* * ctime (MSVCRT.@) */ #ifdef _WIN64