Module: wine Branch: master Commit: 9dcfda023332d6f39eca531574ba2bc6e149e7ba URL: https://source.winehq.org/git/wine.git/?a=commit;h=9dcfda023332d6f39eca53157...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jun 30 11:05:00 2022 +0200
ntdll: Add _wcstoui64.
Signed-off-by: Alexandre Julliard julliard@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.@) *