3 * - By John Hodge (thePowersGang)
6 * - strto[u][l]l/atoi implimentation
13 unsigned long long strtoull(const char *str, char **end, int base)
17 if( !str || base < 0 || base > 36 || base == 1 ) {
24 // Trim leading spaces
25 while( isspace(*str) )
28 // Handle base detection for hex
29 if( base == 0 || base == 16 ) {
30 if( *str == '0' && str[1] == 'x' ) {
36 // Handle base detection for octal
37 if( base == 0 && *str == '0' ) {
42 // Fall back on decimal when unknown
50 if( '0' <= *str && *str <= '0'+base-1 )
54 if( '0' <= *str && *str <= '9' )
56 if( 'A' <= *str && *str <= 'A'+base-10-1 )
58 if( 'a' <= *str && *str <= 'a'+base-10-1 )
73 unsigned long strtoul(const char *ptr, char **end, int base)
75 unsigned long long tmp = strtoull(ptr, end, base);
77 if( tmp > ULONG_MAX ) {
85 long long strtoll(const char *str, char **end, int base)
88 unsigned long long ret;
95 while( isspace(*str) )
98 // Check for negative (or positive) sign
99 if(*str == '-' || *str == '+') {
104 ret = strtoull(str, end, base);
112 long strtol(const char *str, char **end, int base)
114 long long tmp = strtoll(str, end, base);
115 if( tmp > LONG_MAX || tmp < LONG_MIN ) {
117 return (tmp > LONG_MAX) ? LONG_MAX : LONG_MIN;
123 * \fn int atoi(const char *str)
124 * \brief Convert a string to an integer
126 int atoi(const char *str)
128 long long tmp = strtoll(str, NULL, 0);
129 if( tmp > INT_MAX || tmp < INT_MIN ) {
131 return (tmp > INT_MAX) ? INT_MAX : INT_MIN;
136 long atol(const char *str)
138 long long tmp = strtoll(str, NULL, 0);
139 if( tmp > LONG_MAX || tmp < LONG_MIN ) {
141 return (tmp > LONG_MAX) ? LONG_MAX : LONG_MIN;
146 long long atoll(const char *str)
148 long long tmp = strtoll(str, NULL, 0);