Beispiel #1
0
unsigned long long strtoull(FAR const char *nptr, FAR char **endptr, int base)
{
  unsigned long long accum = 0;
  int value;

  if (nptr)
    {
      /* Skip leading spaces */

      lib_skipspace(&nptr);

      /* Check for unspecified base */

      base = lib_checkbase(base, &nptr);

      /* Accumulate each "digit" */

      while (lib_isbasedigit(*nptr, base, &value))
        {
            accum = accum*base + value;
            nptr++;
        }

      /* Return the final pointer to the unused value */

      if (endptr)
        {
          *endptr = (char *)nptr;
        }
    }
   return accum;
}
Beispiel #2
0
unsigned long long strtoull(const char *nptr, char **endptr, int base)
{
	unsigned long long prev, accum = 0;
	int value;

	if (nptr) {
		/* Skip leading spaces */

		lib_skipspace(&nptr);

		/* Check for unspecified base */

		base = lib_checkbase(base, &nptr);
		if (base < 0) {
			set_errno(EINVAL);
			return 0;
		}

		/* Accumulate each "digit" */

		while (lib_isbasedigit(*nptr, base, &value)) {
			prev = accum;
			accum = accum * base + value;
			nptr++;

			/* Check for overflow */

			if (accum < prev) {
				set_errno(ERANGE);
				accum = 0;
				break;
			}
		}

		/* Return the final pointer to the unused value */

		if (endptr) {
			*endptr = (char *)nptr;
		}
	}
	return accum;
}