uint32_t TRI_UInt32String (char const* str) { uint32_t result; char* endptr; #if defined(TRI_HAVE_STRTOUL_R) struct reent buffer; #elif defined(TRI_HAVE__STRTOUL_R) struct reent buffer; #endif TRI_set_errno(TRI_ERROR_NO_ERROR); #if defined(TRI_HAVE_STRTOUL_R) result = strtoul_r(&buffer, str, &endptr, 10); #elif defined(TRI_HAVE__STRTOUL_R) result = _strtoul_r(&buffer, str, &endptr, 10); #else result = strtoul(str, &endptr, 10); #endif while (isspace(*endptr)) { ++endptr; } if (*endptr != '\0') { TRI_set_errno(TRI_ERROR_ILLEGAL_NUMBER); } if (errno == ERANGE && (result == 0 || result == UINT32_MAX)) { TRI_set_errno(TRI_ERROR_NUMERIC_OVERFLOW); } return result; }
unsigned long strtoul(const char *s, char **ptr, int base) { return _strtoul_r(_REENT, s, ptr, base); }