From d1b67cea3b56cf32c8130ca020d53a8f18876e68 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 20 Jun 2012 13:15:11 +0200 Subject: [PATCH] msvcp90: Added _Stollx implementation. --- dlls/msvcp90/locale.c | 29 +++++++++++++++++++++++++++++ dlls/msvcp90/msvcp90.spec | 6 +++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c index fc682a1eabd..ac44e1a8d02 100644 --- a/dlls/msvcp90/locale.c +++ b/dlls/msvcp90/locale.c @@ -3907,6 +3907,35 @@ float __cdecl _Stofx(const char *buf, char **buf_end, LONG exp, int *err) return _Stodx(buf, buf_end, exp, err); } +__int64 __cdecl _Stoll(const char *buf, char **buf_end, int base) +{ + return _strtoi64(buf, buf_end, base); +} + +__int64 __cdecl _Stollx(const char *buf, char **buf_end, int base, int *err) +{ + __int64 ret; + + *err = *_errno(); + *_errno() = 0; + ret = _strtoi64(buf, buf_end, base); + if(*_errno()) { + *err = *_errno(); + }else { + *_errno() = *err; + *err = 0; + } + return ret; +} + +LONG __cdecl _Stolx(const char *buf, char **buf_end, int base, int *err) +{ + __int64 i = _Stollx(buf, buf_end, base, err); + if(!*err && i!=(__int64)((LONG)i)) + *err = ERANGE; + return i; +} + /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */ locale_id num_get_wchar_id = {0}; /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */ diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index 827f7a7a8aa..d8bf44f6ae4 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -5789,9 +5789,9 @@ @ cdecl _Stofx(ptr ptr long ptr) @ cdecl _Stold(ptr ptr long) _Stod @ cdecl _Stoldx(ptr ptr long ptr) _Stodx -@ stub _Stoll -@ stub _Stollx -@ stub _Stolx +@ cdecl -ret64 _Stoll(ptr ptr long) +@ cdecl -ret64 _Stollx(ptr ptr long ptr) +@ cdecl _Stolx(ptr ptr long ptr) @ stub _Stoul @ stub _Stoull @ stub _Stoullx