Module: wine Branch: master Commit: c3c44544ff0e2446979117daebddb70124a0afe1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c3c44544ff0e2446979117daeb...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Sep 25 14:41:40 2013 +0200
msvcrt: Call MSVCRT_strtoi64_l in strtol implementation.
---
dlls/msvcrt/string.c | 52 +++++++++++++++++-------------------------------- 1 files changed, 18 insertions(+), 34 deletions(-)
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c index d3bde66..cdce4a2 100644 --- a/dlls/msvcrt/string.c +++ b/dlls/msvcrt/string.c @@ -727,40 +727,6 @@ int CDECL __STRINGTOLD( MSVCRT__LDOUBLE *value, char **endptr, const char *str, }
/****************************************************************** - * strtol (MSVCRT.@) - */ -MSVCRT_long CDECL MSVCRT_strtol(const char* nptr, char** end, int base) -{ - /* wrapper to forward libc error code to msvcrt's error codes */ - long ret; - - errno = 0; - ret = strtol(nptr, end, base); - switch (errno) - { - case ERANGE: *MSVCRT__errno() = MSVCRT_ERANGE; break; - case EINVAL: *MSVCRT__errno() = MSVCRT_EINVAL; break; - default: - /* cope with the fact that we may use 64bit long integers on libc - * while msvcrt always uses 32bit long integers - */ - if (ret > MSVCRT_LONG_MAX) - { - ret = MSVCRT_LONG_MAX; - *MSVCRT__errno() = MSVCRT_ERANGE; - } - else if (ret < -MSVCRT_LONG_MAX - 1) - { - ret = -MSVCRT_LONG_MAX - 1; - *MSVCRT__errno() = MSVCRT_ERANGE; - } - break; - } - - return ret; -} - -/****************************************************************** * strtoul (MSVCRT.@) */ MSVCRT_ulong CDECL MSVCRT_strtoul(const char* nptr, char** end, int base) @@ -934,6 +900,24 @@ int __cdecl MSVCRT_atoi(const char *str) return minus ? -ret : ret; }
+/****************************************************************** + * strtol (MSVCRT.@) + */ +MSVCRT_long CDECL MSVCRT_strtol(const char* nptr, char** end, int base) +{ + __int64 ret = MSVCRT_strtoi64_l(nptr, end, base, NULL); + + 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; +} + /********************************************************************* * _strtoui64_l (MSVCRT.@) *