Module: wine Branch: master Commit: 06c677384402d30c2868feca59d0708bdcf635cc URL: http://source.winehq.org/git/wine.git/?a=commit;h=06c677384402d30c2868feca59...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Mar 27 16:11:32 2013 +0100
msvcrt: Added _wtol_l implementation.
---
dlls/msvcrt/msvcrt.h | 1 + dlls/msvcrt/msvcrt.spec | 4 ++-- dlls/msvcrt/wcs.c | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 07e2984..69ad7a7 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -42,6 +42,7 @@ #include "winbase.h"
#define MSVCRT_LONG_MAX 0x7fffffffL +#define MSVCRT_LONG_MIN (-MSVCRT_LONG_MAX-1) #define MSVCRT_ULONG_MAX 0xffffffffUL #define MSVCRT_I64_MAX (((__int64)0x7fffffff << 32) | 0xffffffff) #define MSVCRT_I64_MIN (-MSVCRT_I64_MAX-1) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index ef5823c..36e1510 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1226,8 +1226,8 @@ @ cdecl -ret64 _wtoi64(wstr) ntdll._wtoi64 # stub -ret64 _wtoi64_l(wstr ptr) @ cdecl _wtoi_l(wstr ptr) MSVCRT__wtoi_l -@ cdecl _wtol(wstr) ntdll._wtol -# stub _wtol_l(wstr ptr) +@ cdecl _wtol(wstr) MSVCRT__wtol +@ cdecl _wtol_l(wstr ptr) MSVCRT__wtol_l @ cdecl _wunlink(wstr) MSVCRT__wunlink @ cdecl _wutime(wstr ptr) @ cdecl _wutime32(wstr ptr) diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index e00cb83..b0a52d7 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -1472,6 +1472,31 @@ int __cdecl MSVCRT__wtoi(const MSVCRT_wchar_t *str) }
/********************************************************************* + * _wtol_l (MSVCRT.@) + */ +MSVCRT_long __cdecl MSVCRT__wtol_l(const MSVCRT_wchar_t *str, MSVCRT__locale_t locale) +{ + __int64 ret = MSVCRT__wcstoi64_l(str, NULL, 10, locale); + + if(ret > MSVCRT_LONG_MAX) { + ret = MSVCRT_LONG_MAX; + *MSVCRT__errno() = MSVCRT_ERANGE; + } else if(ret < MSVCRT_LONG_MIN) { + ret = MSVCRT_LONG_MIN; + *MSVCRT__errno() = MSVCRT_ERANGE; + } + return ret; +} + +/********************************************************************* + * _wtol (MSVCRT.@) + */ +MSVCRT_long __cdecl MSVCRT__wtol(const MSVCRT_wchar_t *str) +{ + return MSVCRT__wtol_l(str, NULL); +} + +/********************************************************************* * _wcstoui64_l (MSVCRT.@) * * FIXME: locale parameter is ignored