From: Rob Landley Date: Mon, 10 Jul 2006 07:41:34 +0000 (-0000) Subject: Add itoa and utoa to see what Denis Vlasenko thinks. X-Git-Tag: 1_2_0~26 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5b88a381578d3e65d56da4c43e3d3190c889f904;p=oweals%2Fbusybox.git Add itoa and utoa to see what Denis Vlasenko thinks. --- diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 684d0a4fb..00cacaadf 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -229,4 +229,53 @@ int wait4pid(int pid) if (WIFSIGNALED(status)) return WTERMSIG(status); return 0; } -#endif +#endif + +#ifdef L_itoa +// Largest 32 bit integer is -2 billion plus null terminator. +// Int should always be 32 bits on a Unix-oid system, see +// http://www.unix.org/whitepapers/64bit.html +static char local_buf[12]; + +void utoa_to_buf(unsigned n, char *buf, int buflen) +{ + int i, out = 0; + for (i=1000000000; i; i/=10) { + int res = n/i; + + if (res || out || i == 1) { + out++; + n -= res*i; + *buf++ = '0' + res; + } + } + *buf = 0; +} + +// Note: uses static buffer, calling it twice in a row will overwrite. + +char *utoa(unsigned n) +{ + utoa_to_buf(n, local_buf, sizeof(local_buf)); + + return local_buf; +} + +void itoa_to_buf(int n, char *buf, int buflen) +{ + if (n<0) { + n = -n; + *buf++ = '-'; + } + utoa_to_buf((unsigned)n, buf, buflen); +} + +// Note: uses static buffer, calling it twice in a row will overwrite. + +char *itoa(int n) +{ + itoa_to_buf(n, local_buf, sizeof(local_buf)); + + return local_buf; +} +#endif