From bb6bb0e3944064f0c4ababbbfa5e4f9087f8ff8a Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 20 Jun 2012 13:15:29 +0200 Subject: [PATCH] msvcp90: Added _Stoullx implementation. --- dlls/msvcp90/locale.c | 38 ++++++++++++++++++++++++++++++++++++++ dlls/msvcp90/msvcp90.spec | 8 ++++---- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c index ac44e1a8d02..9147092859a 100644 --- a/dlls/msvcp90/locale.c +++ b/dlls/msvcp90/locale.c @@ -3936,6 +3936,44 @@ LONG __cdecl _Stolx(const char *buf, char **buf_end, int base, int *err) return i; } +unsigned __int64 __cdecl _Stoull(const char *buf, char **buf_end, int base) +{ + return _strtoui64(buf, buf_end, base); +} + +unsigned __int64 __cdecl _Stoullx(const char *buf, char **buf_end, int base, int *err) +{ + unsigned __int64 ret; + + *err = *_errno(); + *_errno() = 0; + ret = _strtoui64(buf, buf_end, base); + if(*_errno()) { + *err = *_errno(); + }else { + *_errno() = *err; + *err = 0; + } + return ret; +} + +ULONG __cdecl _Stoul(const char *buf, char **buf_end, int base) +{ + int err; + unsigned __int64 i = _Stoullx(buf[0]=='-' ? buf+1 : buf, buf_end, base, &err); + if(!err && i!=(unsigned __int64)((ULONG)i)) + *_errno() = ERANGE; + return buf[0]=='-' ? -i : i; +} + +ULONG __cdecl _Stoulx(const char *buf, char **buf_end, int base, int *err) +{ + unsigned __int64 i = _Stoullx(buf[0]=='-' ? buf+1 : buf, buf_end, base, err); + if(!*err && i!=(unsigned __int64)((ULONG)i)) + *err = ERANGE; + return buf[0]=='-' ? -i : 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 d8bf44f6ae4..cd46d9bfb3d 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -5792,10 +5792,10 @@ @ 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 -@ stub _Stoulx +@ cdecl _Stoul(ptr ptr long) +@ cdecl -ret64 _Stoull(ptr ptr long) +@ cdecl -ret64 _Stoullx(ptr ptr long ptr) +@ cdecl _Stoulx(ptr ptr long ptr) @ cdecl _Strcoll(ptr ptr ptr ptr ptr) @ stub _Strxfrm @ cdecl _Tolower(long ptr)