diff options
Diffstat (limited to 'user/lib/atox.c')
-rw-r--r-- | user/lib/atox.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/user/lib/atox.c b/user/lib/atox.c new file mode 100644 index 0000000..c4bef59 --- /dev/null +++ b/user/lib/atox.c @@ -0,0 +1,30 @@ +#include <stdlib.h> +#include <ctype.h> + +#define ATOX(name, type) \ + type name(const char *s) \ + { \ + for (; isspace(*s); s++) \ + ; \ + int neg = 0; \ + switch (*s) { \ + case '-': \ + neg = 1; \ + /* fallthrough */ \ + case '+': \ + s++; \ + break; \ + } \ + type num = 0; \ + for (; *s == '0'; s++) \ + ; \ + for (; isdigit(*s); s++) { \ + num *= 10; \ + num += *s - '0'; \ + } \ + return num * (neg ? -1 : 1); \ + } + +ATOX(atoi, int) +ATOX(atol, long int) +ATOX(atoll, long long int) |