Piotr Caban : msvcp90: Added _Stoullx implementation.

Alexandre Julliard julliard at winehq.org
Wed Jun 20 13:49:44 CDT 2012


Module: wine
Branch: master
Commit: bb6bb0e3944064f0c4ababbbfa5e4f9087f8ff8a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bb6bb0e3944064f0c4ababbbfa5e4f9087f8ff8a

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Jun 20 13:15:29 2012 +0200

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 ac44e1a..9147092 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 at _WV?$istreambuf_iterator at _WU?$char_traits at _W@std@@@std@@@std@@2V0locale at 2@A */
 locale_id num_get_wchar_id = {0};
 /* ?id@?$num_get at GV?$istreambuf_iterator at GU?$char_traits at G@std@@@std@@@std@@2V0locale at 2@A */
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index d8bf44f..cd46d9b 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)




More information about the wine-cvs mailing list