123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /* vi: set sw=4 ts=4: */
- /*
- * Mini free implementation for busybox
- *
- * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
- *
- * Licensed under the GPL version 2, see the file LICENSE in this tarball.
- */
- /* getopt not needed */
- #include "libbb.h"
- int free_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int free_main(int argc UNUSED_PARAM, char **argv IF_NOT_DESKTOP(UNUSED_PARAM))
- {
- 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... */
- mem_unit = 1;
- if (info.mem_unit != 0) {
- mem_unit = info.mem_unit;
- }
- /* Convert values to kbytes */
- if (mem_unit == 1) {
- info.totalram >>= 10;
- info.freeram >>= 10;
- #if BB_MMU
- info.totalswap >>= 10;
- info.freeswap >>= 10;
- #endif
- info.sharedram >>= 10;
- info.bufferram >>= 10;
- } else {
- 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 *= mem_unit;
- info.freeswap *= mem_unit;
- #endif
- info.sharedram *= mem_unit;
- info.bufferram *= mem_unit;
- }
- 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%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;
- }
|