wcstoimax.c 477 B

12345678910111213141516171819202122232425
  1. #include <wchar.h>
  2. #include <wctype.h>
  3. #include <inttypes.h>
  4. #include <errno.h>
  5. intmax_t wcstoimax(const wchar_t *s, wchar_t **p, int base)
  6. {
  7. int sign = 0;
  8. uintmax_t x;
  9. /* Initial whitespace */
  10. for (; iswspace(*s); s++);
  11. /* Optional sign */
  12. if (*s == '-') sign = *s++;
  13. else if (*s == '+') s++;
  14. x = wcstoumax(s, p, base);
  15. if (x > INTMAX_MAX) {
  16. if (!sign || -x != INTMAX_MIN)
  17. errno = ERANGE;
  18. return sign ? INTMAX_MIN : INTMAX_MAX;
  19. }
  20. return sign ? -x : x;
  21. }