diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-28 19:35:34 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-08-28 19:35:34 +0000 |
commit | b308d81e927d28cb0223378049defc133787727d (patch) | |
tree | cfbf133ee5fd42014250d233a7e4e3f0a76bf9ac /libbb | |
parent | 7d8de4d55dbc140ea0dc0131bb0647f9632cc7e9 (diff) | |
download | busybox-w32-b308d81e927d28cb0223378049defc133787727d.tar.gz busybox-w32-b308d81e927d28cb0223378049defc133787727d.tar.bz2 busybox-w32-b308d81e927d28cb0223378049defc133787727d.zip |
top: use poll instead of select for waiting on one descriptor
smart_ulltoa5: make it more cryptic. -50 bytes.
function old new delta
passwd_main 1095 1103 +8
getNum 557 565 +8
buffer_fill_and_print 73 76 +3
udhcpc_main 2393 2395 +2
mkfs_minix_main 3071 3070 -1
dname_enc 377 373 -4
expmeta 480 472 -8
smart_ulltoa5 334 283 -51
top_main 911 815 -96
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/5 up/down: 21/-160) Total: -139 bytes
text data bss dec hex filename
770872 1063 10788 782723 bf183 busybox_old
770732 1063 10788 782583 bf0f7 busybox_unstripped
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/xfuncs.c | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index fa9fc10d6..140c7bb6f 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c | |||
@@ -284,35 +284,44 @@ void smart_ulltoa5(unsigned long long ul, char buf[5]) | |||
284 | { | 284 | { |
285 | const char *fmt; | 285 | const char *fmt; |
286 | char c; | 286 | char c; |
287 | unsigned v,idx = 0; | 287 | unsigned v, u, idx = 0; |
288 | ul *= 10; | 288 | |
289 | if (ul > 9999*10) { // do not scale if 9999 or less | 289 | if (ul > 9999) { // do not scale if 9999 or less |
290 | while (ul >= 10000) { | 290 | ul *= 10; |
291 | do { | ||
291 | ul /= 1024; | 292 | ul /= 1024; |
292 | idx++; | 293 | idx++; |
293 | } | 294 | } while (ul >= 10000); |
294 | } | 295 | } |
295 | v = ul; // ullong divisions are expensive, avoid them | 296 | v = ul; // ullong divisions are expensive, avoid them |
296 | 297 | ||
297 | fmt = " 123456789"; | 298 | fmt = " 123456789"; |
298 | if (!idx) { // 9999 or less: use 1234 format | 299 | u = v / 10; |
299 | c = buf[0] = " 123456789"[v/10000]; | 300 | v = v % 10; |
301 | if (!idx) { | ||
302 | // 9999 or less: use "1234" format | ||
303 | // u is value/10, v is last digit | ||
304 | c = buf[0] = " 123456789"[u/100]; | ||
300 | if (c != ' ') fmt = "0123456789"; | 305 | if (c != ' ') fmt = "0123456789"; |
301 | c = buf[1] = fmt[v/1000%10]; | 306 | c = buf[1] = fmt[u/10%10]; |
302 | if (c != ' ') fmt = "0123456789"; | 307 | if (c != ' ') fmt = "0123456789"; |
303 | buf[2] = fmt[v/100%10]; | 308 | buf[2] = fmt[u%10]; |
304 | buf[3] = "0123456789"[v/10%10]; | 309 | buf[3] = "0123456789"[v]; |
305 | } else { | 310 | } else { |
306 | if (v >= 10*10) { // scaled value is >=10: use 123M format | 311 | // u is value, v is 1/10ths (allows for 9.2M format) |
307 | c = buf[0] = " 123456789"[v/1000]; | 312 | if (u >= 10) { |
313 | // value is >= 10: use "123M', " 12M" formats | ||
314 | c = buf[0] = " 123456789"[u/100]; | ||
308 | if (c != ' ') fmt = "0123456789"; | 315 | if (c != ' ') fmt = "0123456789"; |
309 | buf[1] = fmt[v/100%10]; | 316 | v = u % 10; |
310 | buf[2] = "0123456789"[v/10%10]; | 317 | u = u / 10; |
311 | } else { // scaled value is <10: use 1.2M format | 318 | buf[1] = fmt[u%10]; |
312 | buf[0] = "0123456789"[v/10]; | 319 | } else { |
320 | // value is < 10: use "9.2M" format | ||
321 | buf[0] = "0123456789"[u]; | ||
313 | buf[1] = '.'; | 322 | buf[1] = '.'; |
314 | buf[2] = "0123456789"[v%10]; | ||
315 | } | 323 | } |
324 | buf[2] = "0123456789"[v]; | ||
316 | // see http://en.wikipedia.org/wiki/Tera | 325 | // see http://en.wikipedia.org/wiki/Tera |
317 | buf[3] = " kMGTPEZY"[idx]; | 326 | buf[3] = " kMGTPEZY"[idx]; |
318 | } | 327 | } |
@@ -470,7 +479,8 @@ char *xasprintf(const char *format, ...) | |||
470 | va_end(p); | 479 | va_end(p); |
471 | #endif | 480 | #endif |
472 | 481 | ||
473 | if (r < 0) bb_error_msg_and_die(bb_msg_memory_exhausted); | 482 | if (r < 0) |
483 | bb_error_msg_and_die(bb_msg_memory_exhausted); | ||
474 | return string_ptr; | 484 | return string_ptr; |
475 | } | 485 | } |
476 | 486 | ||