diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index c71f7fa5ad3..9d4cc803708 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1505,7 +1505,7 @@ @ cdecl _wcstod_l(wstr ptr) msvcrt._wcstod_l @ cdecl -ret64 _wcstoi64(wstr ptr long) msvcrt._wcstoi64 @ cdecl -ret64 _wcstoi64_l(wstr ptr long ptr) msvcrt._wcstoi64_l -@ stub _wcstol_l +@ cdecl _wcstol_l(wstr ptr long ptr) msvcrt._wcstol_l @ cdecl _wcstombs_l(ptr ptr long ptr) msvcrt._wcstombs_l @ cdecl _wcstombs_s_l(ptr ptr long wstr long ptr) msvcrt._wcstombs_s_l @ cdecl -ret64 _wcstoui64(wstr ptr long) msvcrt._wcstoui64 diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 40dd029d83b..6e97edbe940 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1868,7 +1868,7 @@ @ cdecl _wcstod_l(wstr ptr) msvcrt._wcstod_l @ cdecl -ret64 _wcstoi64(wstr ptr long) msvcrt._wcstoi64 @ cdecl -ret64 _wcstoi64_l(wstr ptr long ptr) msvcrt._wcstoi64_l -@ stub _wcstol_l +@ cdecl _wcstol_l(wstr ptr long ptr) msvcrt._wcstol_l @ cdecl _wcstombs_l(ptr ptr long ptr) msvcrt._wcstombs_l @ cdecl _wcstombs_s_l(ptr ptr long wstr long ptr) msvcrt._wcstombs_s_l @ cdecl -ret64 _wcstoui64(wstr ptr long) msvcrt._wcstoui64 diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 68530bfdb50..8d91d66468b 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1183,7 +1183,7 @@ @ cdecl _wcstod_l(wstr ptr) msvcrt._wcstod_l @ cdecl -ret64 _wcstoi64(wstr ptr long) msvcrt._wcstoi64 @ cdecl -ret64 _wcstoi64_l(wstr ptr long ptr) msvcrt._wcstoi64_l -@ stub _wcstol_l +@ cdecl _wcstol_l(wstr ptr long ptr) msvcrt._wcstol_l @ cdecl _wcstombs_l(ptr ptr long ptr) msvcrt._wcstombs_l @ cdecl _wcstombs_s_l(ptr ptr long wstr long ptr) msvcrt._wcstombs_s_l @ cdecl -ret64 _wcstoui64(wstr ptr long) msvcrt._wcstoui64 diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 6a1657fb8d1..9469587775f 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1159,7 +1159,7 @@ @ cdecl _wcstod_l(wstr ptr) msvcrt._wcstod_l @ cdecl -ret64 _wcstoi64(wstr ptr long) msvcrt._wcstoi64 @ cdecl -ret64 _wcstoi64_l(wstr ptr long ptr) msvcrt._wcstoi64_l -@ stub _wcstol_l +@ cdecl _wcstol_l(wstr ptr long ptr) msvcrt._wcstol_l @ cdecl _wcstombs_l(ptr ptr long ptr) msvcrt._wcstombs_l @ cdecl _wcstombs_s_l(ptr ptr long wstr long ptr) msvcrt._wcstombs_s_l @ cdecl -ret64 _wcstoui64(wstr ptr long) msvcrt._wcstoui64 diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 6a812a902df..975afe08539 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1123,7 +1123,7 @@ @ cdecl _wcstod_l(wstr ptr) MSVCRT__wcstod_l @ cdecl -ret64 _wcstoi64(wstr ptr long) MSVCRT__wcstoi64 @ cdecl -ret64 _wcstoi64_l(wstr ptr long ptr) MSVCRT__wcstoi64_l -# stub _wcstol_l(wstr ptr long ptr) +@ cdecl _wcstol_l(wstr ptr long ptr) MSVCRT__wcstol_l @ cdecl _wcstombs_l(ptr ptr long ptr) MSVCRT__wcstombs_l @ cdecl _wcstombs_s_l(ptr ptr long wstr long ptr) MSVCRT__wcstombs_s_l @ cdecl -ret64 _wcstoui64(wstr ptr long) MSVCRT__wcstoui64 diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index dbb12dd0553..3df7c025750 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -1612,6 +1612,24 @@ __int64 CDECL MSVCRT__wcstoi64(const MSVCRT_wchar_t *nptr, return MSVCRT__wcstoi64_l(nptr, endptr, base, NULL); } +/********************************************************************* + * _wcstol_l (MSVCRT.@) + */ +MSVCRT_long CDECL MSVCRT__wcstol_l(const MSVCRT_wchar_t *s, + MSVCRT_wchar_t **end, int base, MSVCRT__locale_t locale) +{ + __int64 ret = MSVCRT__wcstoi64_l(s, end, base, 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; +} + /********************************************************************* * _wtoi_l (MSVCRT.@) */