#include "shgetc.h" #include "intscan.h" #include #include #include #include static unsigned long long wcstox(const wchar_t * restrict s, wchar_t ** restrict p, int base, unsigned long long lim) { struct fake_file_t f; wchar_t *t = (wchar_t *)s; while (iswspace(*t)) t++; shinit_wcstring(&f, t); unsigned long long y = __intscan(&f, base, 1, lim); if (p) { size_t cnt = shcnt(&f); *p = cnt ? t + cnt : (wchar_t *)s; } return y; } unsigned long long wcstoull(const wchar_t *restrict s, wchar_t **restrict p, int base) { return wcstox(s, p, base, ULLONG_MAX); } long long wcstoll(const wchar_t *restrict s, wchar_t **restrict p, int base) { return wcstox(s, p, base, LLONG_MIN); } unsigned long wcstoul(const wchar_t *restrict s, wchar_t **restrict p, int base) { return wcstox(s, p, base, ULONG_MAX); } long wcstol(const wchar_t *restrict s, wchar_t **restrict p, int base) { return wcstox(s, p, base, 0UL+LONG_MIN); } intmax_t wcstoimax(const wchar_t *restrict s, wchar_t **restrict p, int base) { return wcstoll(s, p, base); } uintmax_t wcstoumax(const wchar_t *restrict s, wchar_t **restrict p, int base) { return wcstoull(s, p, base); }