From 73de6561cae5e8707f66ba08203c082cd86e9850 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Sun, 10 Sep 2000 16:10:41 +0000 Subject: [PATCH] Update free for current 2.4.x behavior... -Erik --- free.c | 34 +++++++++++++--------------------- procps/free.c | 34 +++++++++++++--------------------- 2 files changed, 26 insertions(+), 42 deletions(-) diff --git a/free.c b/free.c index 78298cfb6..d8c3f0b91 100644 --- a/free.c +++ b/free.c @@ -29,29 +29,21 @@ 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); diff --git a/procps/free.c b/procps/free.c index 78298cfb6..d8c3f0b91 100644 --- a/procps/free.c +++ b/procps/free.c @@ -29,29 +29,21 @@ 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); -- 2.25.1