コード例 #1
0
ファイル: lib_strtoull.c プロジェクト: acassis/ros2_nuttx
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;
}
コード例 #2
0
ファイル: lib_strtoull.c プロジェクト: drashti304/TizenRT
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;
}
コード例 #3
0
ファイル: lib_strtoll.c プロジェクト: FreddieChopin/NuttX
long long strtoll(const char *nptr, char **endptr, int base)
{
  unsigned long long accum = 0;
  bool negate = false;

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

      lib_skipspace(&nptr);

      /* Check for leading + or - */

      if (*nptr == '-')
        {
          negate = true;
          nptr++;
        }
      else if (*nptr == '+')
        {
          nptr++;
        }

      /* Get the unsigned value */

      accum = strtoull(nptr, endptr, base);

      /* Correct the sign of the result */

      if (negate)
        {
          return -(long long)accum;
        }
    }

  return (long long)accum;
}