diff options
Diffstat (limited to 'libbb')
| -rw-r--r-- | libbb/xfuncs.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 00cacaadf..bcd0751ee 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c | |||
| @@ -237,19 +237,21 @@ int wait4pid(int pid) | |||
| 237 | // http://www.unix.org/whitepapers/64bit.html | 237 | // http://www.unix.org/whitepapers/64bit.html |
| 238 | static char local_buf[12]; | 238 | static char local_buf[12]; |
| 239 | 239 | ||
| 240 | void utoa_to_buf(unsigned n, char *buf, int buflen) | 240 | void utoa_to_buf(unsigned n, char *buf, unsigned buflen) |
| 241 | { | 241 | { |
| 242 | int i, out = 0; | 242 | int i, out = 0; |
| 243 | for (i=1000000000; i; i/=10) { | 243 | if (buflen) { |
| 244 | int res = n/i; | 244 | for (i=1000000000; i; i/=10) { |
| 245 | 245 | int res = n/i; | |
| 246 | if (res || out || i == 1) { | 246 | |
| 247 | out++; | 247 | if ((res || out || i == 1) && --buflen>0) { |
| 248 | n -= res*i; | 248 | out++; |
| 249 | *buf++ = '0' + res; | 249 | n -= res*i; |
| 250 | *buf++ = '0' + res; | ||
| 251 | } | ||
| 250 | } | 252 | } |
| 253 | *buf = 0; | ||
| 251 | } | 254 | } |
| 252 | *buf = 0; | ||
| 253 | } | 255 | } |
| 254 | 256 | ||
| 255 | // Note: uses static buffer, calling it twice in a row will overwrite. | 257 | // Note: uses static buffer, calling it twice in a row will overwrite. |
| @@ -261,11 +263,12 @@ char *utoa(unsigned n) | |||
| 261 | return local_buf; | 263 | return local_buf; |
| 262 | } | 264 | } |
| 263 | 265 | ||
| 264 | void itoa_to_buf(int n, char *buf, int buflen) | 266 | void itoa_to_buf(int n, char *buf, unsigned buflen) |
| 265 | { | 267 | { |
| 266 | if (n<0) { | 268 | if (buflen && n<0) { |
| 267 | n = -n; | 269 | n = -n; |
| 268 | *buf++ = '-'; | 270 | *buf++ = '-'; |
| 271 | buflen--; | ||
| 269 | } | 272 | } |
| 270 | utoa_to_buf((unsigned)n, buf, buflen); | 273 | utoa_to_buf((unsigned)n, buf, buflen); |
| 271 | } | 274 | } |
