*/\r
EXPORT void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *))\r
{\r
- int i, j, min;\r
+ size_t i, j, min;\r
// With 0 items, there's nothing to do and with 1 its already sorted\r
if(nmemb == 0 || nmemb == 1) return;\r
\r
}\r
}\r
\r
-EXPORT long long strtoll(const char *str, char **end, int base)\r
+EXPORT unsigned long long strtoull(const char *str, char **end, int base)\r
{\r
- int neg;\r
long long ret = 0;\r
\r
if( !str || base < 0 || base > 36 || base == 1 ) {\r
while( isspace(*str) )\r
str++;\r
\r
- // Check for negative (or positive) sign\r
- if(*str == '-' || *str == '+') {\r
- neg = (*str == '-');\r
- str++;\r
- }\r
- \r
if( base == 0 || base == 16 ) {\r
if( *str == '0' && str[1] == 'x' ) {\r
str += 2;\r
str ++;\r
}\r
\r
- if( neg )\r
- ret = -ret; \r
-\r
if(end)\r
*end = (char*)str;\r
return ret;\r
}\r
\r
+EXPORT unsigned long strtoul(const char *ptr, char **end, int base)\r
+{\r
+ unsigned long long tmp = strtoull(ptr, end, base);\r
+ \r
+ if( tmp > ULONG_MAX ) {\r
+ errno = ERANGE;\r
+ return ULONG_MAX;\r
+ }\r
+ \r
+ return tmp;\r
+}\r
+\r
+EXPORT long long strtoll(const char *str, char **end, int base)\r
+{\r
+ int neg = 0;\r
+ unsigned long long ret;\r
+\r
+ if( !str ) {\r
+ errno = EINVAL;\r
+ return 0;\r
+ }\r
+ \r
+ while( isspace(*str) )\r
+ str++;\r
+ \r
+ // Check for negative (or positive) sign\r
+ if(*str == '-' || *str == '+') {\r
+ neg = (*str == '-');\r
+ str++;\r
+ }\r
+\r
+ ret = strtoull(str, end, base); \r
+\r
+ if( neg )\r
+ return -ret;\r
+ else\r
+ return ret;\r
+}\r
+\r
EXPORT long strtol(const char *str, char **end, int base)\r
{\r
long long tmp = strtoll(str, end, base);\r