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
This commit is contained in:
@@ -284,35 +284,44 @@ void smart_ulltoa5(unsigned long long ul, char buf[5])
|
||||
{
|
||||
const char *fmt;
|
||||
char c;
|
||||
unsigned v,idx = 0;
|
||||
ul *= 10;
|
||||
if (ul > 9999*10) { // do not scale if 9999 or less
|
||||
while (ul >= 10000) {
|
||||
unsigned v, u, idx = 0;
|
||||
|
||||
if (ul > 9999) { // do not scale if 9999 or less
|
||||
ul *= 10;
|
||||
do {
|
||||
ul /= 1024;
|
||||
idx++;
|
||||
}
|
||||
} while (ul >= 10000);
|
||||
}
|
||||
v = ul; // ullong divisions are expensive, avoid them
|
||||
|
||||
fmt = " 123456789";
|
||||
if (!idx) { // 9999 or less: use 1234 format
|
||||
c = buf[0] = " 123456789"[v/10000];
|
||||
u = v / 10;
|
||||
v = v % 10;
|
||||
if (!idx) {
|
||||
// 9999 or less: use "1234" format
|
||||
// u is value/10, v is last digit
|
||||
c = buf[0] = " 123456789"[u/100];
|
||||
if (c != ' ') fmt = "0123456789";
|
||||
c = buf[1] = fmt[v/1000%10];
|
||||
c = buf[1] = fmt[u/10%10];
|
||||
if (c != ' ') fmt = "0123456789";
|
||||
buf[2] = fmt[v/100%10];
|
||||
buf[3] = "0123456789"[v/10%10];
|
||||
buf[2] = fmt[u%10];
|
||||
buf[3] = "0123456789"[v];
|
||||
} else {
|
||||
if (v >= 10*10) { // scaled value is >=10: use 123M format
|
||||
c = buf[0] = " 123456789"[v/1000];
|
||||
// u is value, v is 1/10ths (allows for 9.2M format)
|
||||
if (u >= 10) {
|
||||
// value is >= 10: use "123M', " 12M" formats
|
||||
c = buf[0] = " 123456789"[u/100];
|
||||
if (c != ' ') fmt = "0123456789";
|
||||
buf[1] = fmt[v/100%10];
|
||||
buf[2] = "0123456789"[v/10%10];
|
||||
} else { // scaled value is <10: use 1.2M format
|
||||
buf[0] = "0123456789"[v/10];
|
||||
v = u % 10;
|
||||
u = u / 10;
|
||||
buf[1] = fmt[u%10];
|
||||
} else {
|
||||
// value is < 10: use "9.2M" format
|
||||
buf[0] = "0123456789"[u];
|
||||
buf[1] = '.';
|
||||
buf[2] = "0123456789"[v%10];
|
||||
}
|
||||
buf[2] = "0123456789"[v];
|
||||
// see http://en.wikipedia.org/wiki/Tera
|
||||
buf[3] = " kMGTPEZY"[idx];
|
||||
}
|
||||
@@ -470,7 +479,8 @@ char *xasprintf(const char *format, ...)
|
||||
va_end(p);
|
||||
#endif
|
||||
|
||||
if (r < 0) bb_error_msg_and_die(bb_msg_memory_exhausted);
|
||||
if (r < 0)
|
||||
bb_error_msg_and_die(bb_msg_memory_exhausted);
|
||||
return string_ptr;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user