Usermode - A few tweaks to POSIX emulation for dropbear
[tpg/acess2.git] / Usermode / Libraries / libc.so_src / stdlib.c
index 469f51c..e15f49b 100644 (file)
@@ -71,9 +71,8 @@ EXPORT void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void
        }\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 = 0;\r
        long long       ret = 0;\r
        \r
        if( !str || base < 0 || base > 36 || base == 1 ) {\r
@@ -86,12 +85,6 @@ EXPORT long long strtoll(const char *str, char **end, int base)
        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
@@ -129,14 +122,50 @@ EXPORT long long strtoll(const char *str, char **end, int base)
                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

UCC git Repository :: git.ucc.asn.au