X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=procps%2Ffree.c;h=2e34a972c0b0c51712ccc72750a54a53d9d7dc3a;hb=4fd382ea29c6492f4776aa29b8b298d3c4a98d01;hp=78298cfb6422a55e04df5d5654cb657d0744555d;hpb=bf181b9338152759fd56c8009e9a962a84808e7c;p=oweals%2Fbusybox.git diff --git a/procps/free.c b/procps/free.c index 78298cfb6..2e34a972c 100644 --- a/procps/free.c +++ b/procps/free.c @@ -2,7 +2,7 @@ /* * Mini free implementation for busybox * - * Copyright (C) 1999,2000 by Lineo, inc. + * Copyright (C) 1999,2000,2001 by Lineo, inc. * Written by Erik Andersen , * * This program is free software; you can redistribute it and/or modify @@ -21,39 +21,34 @@ * */ -#include "internal.h" +/* getopt not needed */ + #include #include +#include +#include "busybox.h" extern int free_main(int argc, char **argv) { struct sysinfo info; sysinfo(&info); - /* Kernels prior to 2.4.x will return info.mem_unit==0. Kernels after - * 2.4.x actually fill this value in */ + + /* Kernels prior to 2.4.x will return info.mem_unit==0, so cope... */ if (info.mem_unit==0) { - /* Looks like we have a kernel prior to Linux 2.4.x */ - info.mem_unit=1024; - info.totalram/=info.mem_unit; - info.freeram/=info.mem_unit; - info.totalswap/=info.mem_unit; - info.freeswap/=info.mem_unit; - info.sharedram/=info.mem_unit; - info.bufferram/=info.mem_unit; - } else { - /* Bah. Linux 2.4.x completely changed sysinfo. This can in theory - overflow a 32 bit unsigned long, but who puts more then 4GiB ram+swap - on an embedded system? */ - info.mem_unit/=1024; - info.totalram*=info.mem_unit; - info.freeram*=info.mem_unit; - info.totalswap*=info.mem_unit; - info.freeswap*=info.mem_unit; - info.sharedram*=info.mem_unit; - info.bufferram*=info.mem_unit; + 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; + info.totalswap/=info.mem_unit; + info.freeswap/=info.mem_unit; + info.sharedram/=info.mem_unit; + info.bufferram/=info.mem_unit; + if (argc > 1 && **(argv + 1) == '-') - usage(free_usage); + show_usage(); printf("%6s%13s%13s%13s%13s%13s\n", "", "total", "used", "free", "shared", "buffers"); @@ -68,7 +63,7 @@ extern int free_main(int argc, char **argv) printf("%6s%13ld%13ld%13ld\n", "Total:", info.totalram+info.totalswap, (info.totalram-info.freeram)+(info.totalswap-info.freeswap), info.freeram+info.freeswap); - return(TRUE); + return EXIT_SUCCESS; }