free: code shrink
No binary (build failed)
—
(log yok)
| @@ -15,54 +15,67 @@ int free_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |
| int free_main(int argc UNUSED_PARAM, char **argv) | |
| { | |
| struct sysinfo info; | |
| + | unsigned mem_unit; |
| + | |
| + | #if ENABLE_DESKTOP |
| + | if (argv[1] && argv[1][0] == '-') |
| + | bb_show_usage(); |
| + | #endif |
| + | |
| sysinfo(&info); | |
| /* Kernels prior to 2.4.x will return info.mem_unit==0, so cope... */ | |
| - | if (info.mem_unit == 0) { |
| - | info.mem_unit=1; |
| + | mem_unit = 1; |
| + | if (info.mem_unit != 0) { |
| + | mem_unit = info.mem_unit; |
| } | |
| - | if (info.mem_unit == 1) { |
| - | info.mem_unit=1024; |
| - | /* TODO: Make all this stuff not overflow when mem >= 4 Gib */ |
| - | info.totalram/=info.mem_unit; |
| - | info.freeram/=info.mem_unit; |
| + | /* Convert values to kbytes */ |
| + | if (mem_unit == 1) { |
| + | info.totalram >>= 10; |
| + | info.freeram >>= 10; |
| #if BB_MMU | |
| - | info.totalswap/=info.mem_unit; |
| - | info.freeswap/=info.mem_unit; |
| + | info.totalswap >>= 10; |
| + | info.freeswap >>= 10; |
| #endif | |
| - | info.sharedram/=info.mem_unit; |
| - | info.bufferram/=info.mem_unit; |
| + | info.sharedram >>= 10; |
| + | info.bufferram >>= 10; |
| } else { | |
| - | info.mem_unit/=1024; |
| - | /* TODO: Make all this stuff not overflow when mem >= 4 Gib */ |
| - | info.totalram*=info.mem_unit; |
| - | info.freeram*=info.mem_unit; |
| + | mem_unit >>= 10; |
| + | /* TODO: Make all this stuff not overflow when mem >= 4 Tb */ |
| + | info.totalram *= mem_unit; |
| + | info.freeram *= mem_unit; |
| #if BB_MMU | |
| - | info.totalswap*=info.mem_unit; |
| - | info.freeswap*=info.mem_unit; |
| + | info.totalswap *= mem_unit; |
| + | info.freeswap *= mem_unit; |
| #endif | |
| - | info.sharedram*=info.mem_unit; |
| - | info.bufferram*=info.mem_unit; |
| + | info.sharedram *= mem_unit; |
| + | info.bufferram *= mem_unit; |
| } | |
| - | if (argv[1] && argv[1][0] == '-') |
| - | bb_show_usage(); |
| - | |
| - | printf("%6s%13s%13s%13s%13s%13s\n", "", "total", "used", "free", |
| - | "shared", "buffers"); |
| - | |
| - | printf("%6s%13ld%13ld%13ld%13ld%13ld\n", "Mem:", info.totalram, |
| - | info.totalram-info.freeram, info.freeram, |
| - | info.sharedram, info.bufferram); |
| - | |
| + | printf(" %13s%13s%13s%13s%13s\n", |
| + | "total", |
| + | "used", |
| + | "free", |
| + | "shared", "buffers" /* swap and total don't have these columns */ |
| + | ); |
| + | printf("%6s%13lu%13lu%13lu%13lu%13lu\n", "Mem:", |
| + | info.totalram, |
| + | info.totalram - info.freeram, |
| + | info.freeram, |
| + | info.sharedram, info.bufferram |
| + | ); |
| #if BB_MMU | |
| - | printf("%6s%13ld%13ld%13ld\n", "Swap:", info.totalswap, |
| - | info.totalswap-info.freeswap, info.freeswap); |
| - | |
| - | printf("%6s%13ld%13ld%13ld\n", "Total:", info.totalram+info.totalswap, |
| - | (info.totalram-info.freeram)+(info.totalswap-info.freeswap), |
| - | info.freeram+info.freeswap); |
| + | printf("%6s%13lu%13lu%13lu\n", "Swap:", |
| + | info.totalswap, |
| + | info.totalswap - info.freeswap, |
| + | info.freeswap |
| + | ); |
| + | printf("%6s%13lu%13lu%13lu\n", "Total:", |
| + | info.totalram + info.totalswap, |
| + | (info.totalram - info.freeram) + (info.totalswap - info.freeswap), |
| + | info.freeram + info.freeswap |
| + | ); |
| #endif | |
| return EXIT_SUCCESS; | |
| } | |