Alexandre Julliard : ntdll: Add _wcstoui64.
Alexandre Julliard
julliard at winehq.org
Thu Jun 30 16:34:19 CDT 2022
Module: wine
Branch: master
Commit: 9dcfda023332d6f39eca531574ba2bc6e149e7ba
URL: https://source.winehq.org/git/wine.git/?a=commit;h=9dcfda023332d6f39eca531574ba2bc6e149e7ba
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Jun 30 11:05:00 2022 +0200
ntdll: Add _wcstoui64.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/ntdll.spec | 1 +
dlls/ntdll/wcstring.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 2ed68e1bc5d..ca896902762 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -1541,6 +1541,7 @@
@ cdecl _wcslwr_s(wstr long)
@ cdecl _wcsnicmp(wstr wstr long)
@ cdecl -ret64 _wcstoi64(wstr ptr long)
+@ cdecl -ret64 _wcstoui64(wstr ptr long)
@ cdecl _wcsupr(wstr)
@ cdecl _wcsupr_s(wstr long)
@ cdecl _wtoi(wstr)
diff --git a/dlls/ntdll/wcstring.c b/dlls/ntdll/wcstring.c
index 06447248235..192bd9e9a46 100644
--- a/dlls/ntdll/wcstring.c
+++ b/dlls/ntdll/wcstring.c
@@ -800,6 +800,50 @@ __int64 __cdecl _wcstoi64( const wchar_t *s, wchar_t **end, int base )
}
+/*********************************************************************
+ * _wcstoui64 (NTDLL.@)
+ */
+unsigned __int64 __cdecl _wcstoui64( const wchar_t *s, wchar_t **end, int base )
+{
+ BOOL negative = FALSE, empty = TRUE;
+ unsigned __int64 ret = 0;
+
+ if (base < 0 || base == 1 || base > 36) return 0;
+ if (end) *end = (wchar_t *)s;
+ while (iswspace(*s)) s++;
+
+ if (*s == '-')
+ {
+ negative = TRUE;
+ s++;
+ }
+ else if (*s == '+') s++;
+
+ if ((base == 0 || base == 16) && !wctoint( *s ) && (s[1] == 'x' || s[1] == 'X'))
+ {
+ base = 16;
+ s += 2;
+ }
+ if (base == 0) base = wctoint( *s ) ? 10 : 8;
+
+ while (*s)
+ {
+ int v = wctoint( *s );
+ if (v < 0 || v >= base) break;
+ s++;
+ empty = FALSE;
+
+ if (ret > UI64_MAX / base || ret * base > UI64_MAX - v)
+ ret = UI64_MAX;
+ else
+ ret = ret * base + v;
+ }
+
+ if (end && !empty) *end = (wchar_t *)s;
+ return negative ? -ret : ret;
+}
+
+
/*********************************************************************
* _ultow (NTDLL.@)
*
More information about the wine-cvs
mailing list