diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index c57b43df988..44123a3ca0f 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -693,7 +693,7 @@ @ cdecl _atoflt_l(ptr str ptr) msvcrt._atoflt_l @ cdecl -ret64 _atoi64(str) msvcrt._atoi64 @ stub _atoi64_l -@ stub _atoi_l +@ cdecl _atoi_l(str ptr) msvcrt._atoi_l @ stub _atol_l @ cdecl _atoldbl(ptr str) msvcrt._atoldbl @ stub _atoldbl_l diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 8c537516081..91fe34a2a88 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -349,7 +349,7 @@ @ cdecl _atoflt_l(ptr str ptr) msvcrt._atoflt_l @ cdecl -ret64 _atoi64(str) msvcrt._atoi64 @ stub _atoi64_l -@ stub _atoi_l +@ cdecl _atoi_l(str ptr) msvcrt._atoi_l @ stub _atol_l @ cdecl _atoldbl(ptr str) msvcrt._atoldbl @ stub _atoldbl_l diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 500ed276827..ae3dfa2c2bb 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -341,7 +341,7 @@ @ cdecl _atoflt_l(ptr str ptr) msvcrt._atoflt_l @ cdecl -ret64 _atoi64(str) msvcrt._atoi64 @ stub _atoi64_l -@ stub _atoi_l +@ cdecl _atoi_l(str ptr) msvcrt._atoi_l @ stub _atol_l @ cdecl _atoldbl(ptr str) msvcrt._atoldbl @ stub _atoldbl_l diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 239e8201d73..6d46f82ab8a 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -306,7 +306,7 @@ @ cdecl _atoflt_l(ptr str ptr) MSVCRT__atoflt_l @ cdecl -ret64 _atoi64(str) ntdll._atoi64 # stub -ret64 _atoi64_l(str ptr) -# stub _atoi_l(str ptr) +@ cdecl _atoi_l(str ptr) MSVCRT__atoi_l # stub _atol_l(str ptr) @ cdecl _atoldbl(ptr str) MSVCRT__atoldbl # stub _atoldbl_l(ptr str ptr) diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c index ad33f6ac19a..1e464889437 100644 --- a/dlls/msvcrt/string.c +++ b/dlls/msvcrt/string.c @@ -914,6 +914,23 @@ __int64 CDECL MSVCRT_strtoi64(const char *nptr, char **endptr, int base) return MSVCRT_strtoi64_l(nptr, endptr, base, NULL); } +/********************************************************************* + * _atoi_l (MSVCRT.@) + */ +int MSVCRT__atoi_l(const char *str, MSVCRT__locale_t locale) +{ + __int64 ret = MSVCRT_strtoi64_l(str, NULL, 10, locale); + + if(ret > INT_MAX) { + ret = INT_MAX; + *MSVCRT__errno() = MSVCRT_ERANGE; + } else if(ret < INT_MIN) { + ret = INT_MIN; + *MSVCRT__errno() = MSVCRT_ERANGE; + } + return ret; +} + /********************************************************************* * _strtoui64_l (MSVCRT.@) *