X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Flibc%2Fstdlib.c;h=8a4c8f09de029dffc6e5b6700b7639e584d44fef;hb=b789e37efab3baed9def2c1199d1cc5884e06ab5;hp=a6149e9486598987bbfeca103a53415327713c74;hpb=88989dba0a2f0b59d782d25e01227df04452e8d3;p=mdlife diff --git a/src/libc/stdlib.c b/src/libc/stdlib.c index a6149e9..8a4c8f0 100644 --- a/src/libc/stdlib.c +++ b/src/libc/stdlib.c @@ -72,10 +72,12 @@ long strtol(const char *str, char **endp, int base) void itoa(int val, char *buf, int base) { - static char rbuf[16]; + char rbuf[16]; char *ptr = rbuf; int neg = 0; + if(base <= 0) base = 10; + if(val < 0) { neg = 1; val = -val; @@ -103,11 +105,41 @@ void itoa(int val, char *buf, int base) *buf = 0; } +void xtoa(unsigned int val, char *buf) +{ + char rbuf[16]; + char *ptr = rbuf; + + if(val == 0) { + *ptr++ = '0'; + } + + while(val) { + unsigned int digit = val & 0xf; + *ptr++ = digit < 10 ? (digit + '0') : (digit - 10 + 'a'); + val >>= 4; + } + + ptr--; + + while(ptr >= rbuf) { + *buf++ = *ptr--; + } + *buf = 0; +} + void utoa(unsigned int val, char *buf, int base) { static char rbuf[16]; char *ptr = rbuf; + if(base == 16) { + xtoa(val, buf); + return; + } + + if(base <= 0) base = 10; + if(val == 0) { *ptr++ = '0'; }