Module: wine Branch: master Commit: df038ec544d50888f7e4db717d7e936e1b0db080 URL: http://source.winehq.org/git/wine.git/?a=commit;h=df038ec544d50888f7e4db717d...
Author: Piotr Caban piotr@codeweavers.com Date: Wed May 5 13:37:33 2010 +0200
msvcrt: Added _ui64toa_s implementation.
---
dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt/string.c | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index e430401..b2a19c4 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -994,7 +994,7 @@ @ extern _tzname msvcrt._tzname @ cdecl _tzset() msvcrt._tzset @ cdecl _ui64toa(long long ptr long) msvcrt._ui64toa -@ stub _ui64toa_s +@ cdecl _ui64toa_s(long ptr long long) msvcrt._ui64toa_s @ cdecl _ui64tow(long long ptr long) msvcrt._ui64tow @ stub _ui64tow_s @ cdecl _ultoa(long ptr long) msvcrt._ultoa diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index b09a32d..f41362d 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -981,7 +981,7 @@ @ extern _tzname msvcrt._tzname @ cdecl _tzset() msvcrt._tzset @ cdecl _ui64toa(long long ptr long) msvcrt._ui64toa -@ stub _ui64toa_s +@ cdecl _ui64toa_s(long ptr long long) msvcrt._ui64toa_s @ cdecl _ui64tow(long long ptr long) msvcrt._ui64tow @ stub _ui64tow_s @ cdecl _ultoa(long ptr long) msvcrt._ultoa diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 42fe133..4334b85 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -932,7 +932,7 @@ @ extern _tzname MSVCRT__tzname @ cdecl _tzset() MSVCRT__tzset @ cdecl _ui64toa(long long ptr long) ntdll._ui64toa -# stub _ui64toa_s +@ cdecl _ui64toa_s(long ptr long long) MSVCRT__ui64toa_s @ cdecl _ui64tow(long long ptr long) ntdll._ui64tow # stub _ui64tow_s @ cdecl _ultoa(long ptr long) ntdll._ultoa diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c index 35f44ed..e1d9557 100644 --- a/dlls/msvcrt/string.c +++ b/dlls/msvcrt/string.c @@ -624,3 +624,41 @@ unsigned __int64 CDECL MSVCRT_strtoui64(const char *nptr, char **endptr, int bas { return MSVCRT_strtoui64_l(nptr, endptr, base, NULL); } + +/********************************************************************* + * _ui64toa_s (MSVCRT.@) + */ +int CDECL MSVCRT__ui64toa_s(unsigned __int64 value, char *str, + MSVCRT_size_t size, int radix) +{ + char buffer[65], *pos; + int digit; + + if(!str || radix<2 || radix>36) { + MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0); + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EINVAL; + } + + pos = buffer+64; + *pos = '\0'; + + do { + digit = value%radix; + value /= radix; + + if(digit < 10) + *--pos = '0'+digit; + else + *--pos = 'a'+digit-10; + }while(value != 0); + + if(buffer-pos+65 > size) { + MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0); + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EINVAL; + } + + memcpy(str, pos, buffer-pos+65); + return 0; +}