Piotr Caban : msvcrt: Added _ui64toa_s implementation.

Alexandre Julliard julliard at winehq.org
Wed May 5 11:08:37 CDT 2010


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed May  5 13:37:33 2010 +0200

msvcrt: Added _ui64toa_s implementation.

---

 dlls/msvcr80/msvcr80.spec |    2 +-
 dlls/msvcr90/msvcr90.spec |    2 +-
 dlls/msvcrt/msvcrt.spec   |    2 +-
 dlls/msvcrt/string.c      |   38 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index e430401..b2a19c4 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -994,7 +994,7 @@
 @ extern _tzname msvcrt._tzname
 @ cdecl _tzset() msvcrt._tzset
 @ cdecl _ui64toa(long long ptr long) msvcrt._ui64toa
-@ stub _ui64toa_s
+@ cdecl _ui64toa_s(long ptr long long) msvcrt._ui64toa_s
 @ cdecl _ui64tow(long long ptr long) msvcrt._ui64tow
 @ stub _ui64tow_s
 @ cdecl _ultoa(long ptr long) msvcrt._ultoa
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index b09a32d..f41362d 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -981,7 +981,7 @@
 @ extern _tzname msvcrt._tzname
 @ cdecl _tzset() msvcrt._tzset
 @ cdecl _ui64toa(long long ptr long) msvcrt._ui64toa
-@ stub _ui64toa_s
+@ cdecl _ui64toa_s(long ptr long long) msvcrt._ui64toa_s
 @ cdecl _ui64tow(long long ptr long) msvcrt._ui64tow
 @ stub _ui64tow_s
 @ cdecl _ultoa(long ptr long) msvcrt._ultoa
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 42fe133..4334b85 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -932,7 +932,7 @@
 @ extern _tzname MSVCRT__tzname
 @ cdecl _tzset() MSVCRT__tzset
 @ cdecl _ui64toa(long long ptr long) ntdll._ui64toa
-# stub _ui64toa_s
+@ cdecl _ui64toa_s(long ptr long long) MSVCRT__ui64toa_s
 @ cdecl _ui64tow(long long ptr long) ntdll._ui64tow
 # stub _ui64tow_s
 @ cdecl _ultoa(long ptr long) ntdll._ultoa
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c
index 35f44ed..e1d9557 100644
--- a/dlls/msvcrt/string.c
+++ b/dlls/msvcrt/string.c
@@ -624,3 +624,41 @@ unsigned __int64 CDECL MSVCRT_strtoui64(const char *nptr, char **endptr, int bas
 {
     return MSVCRT_strtoui64_l(nptr, endptr, base, NULL);
 }
+
+/*********************************************************************
+ *  _ui64toa_s (MSVCRT.@)
+ */
+int CDECL MSVCRT__ui64toa_s(unsigned __int64 value, char *str,
+        MSVCRT_size_t size, int radix)
+{
+    char buffer[65], *pos;
+    int digit;
+
+    if(!str || radix<2 || radix>36) {
+        MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0);
+        *MSVCRT__errno() = MSVCRT_EINVAL;
+        return MSVCRT_EINVAL;
+    }
+
+    pos = buffer+64;
+    *pos = '\0';
+
+    do {
+        digit = value%radix;
+        value /= radix;
+
+        if(digit < 10)
+            *--pos = '0'+digit;
+        else
+            *--pos = 'a'+digit-10;
+    }while(value != 0);
+
+    if(buffer-pos+65 > size) {
+        MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0);
+        *MSVCRT__errno() = MSVCRT_EINVAL;
+        return MSVCRT_EINVAL;
+    }
+
+    memcpy(str, pos, buffer-pos+65);
+    return 0;
+}




More information about the wine-cvs mailing list