diff options
Diffstat (limited to 'user/lib/xtoa.c')
-rw-r--r-- | user/lib/xtoa.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/user/lib/xtoa.c b/user/lib/xtoa.c new file mode 100644 index 0000000..bf02236 --- /dev/null +++ b/user/lib/xtoa.c @@ -0,0 +1,31 @@ +#include <stdlib.h> + +#define XTOA(type, name) \ + char *name(type n, char *buffer, int radix) \ + { \ + if (n == 0) { \ + buffer[0] = '0'; \ + buffer[1] = '\0'; \ + return buffer + 1; \ + } \ + if (n < 0) { \ + *buffer++ = '-'; \ + n = -n; \ + } \ + char *start = buffer; \ + for (; n; n /= radix) { \ + *buffer++ = itoc(n % radix); \ + } \ + char *buf_end = buffer; \ + *buffer-- = '\0'; \ + while (buffer > start) { \ + char tmp = *start; \ + *start++ = *buffer; \ + *buffer-- = tmp; \ + } \ + return buf_end; \ + } + +XTOA(int, itoa) +XTOA(long int, ltoa) +XTOA(long long int, lltoa) |