# HG changeset patch # User Rob Landley # Date 1411003304 18000 # Node ID f0c4b7476118c9e5fc17e6cbd58c4e732b43c181 # Parent 8a13412acf4dcca9afe9d1c432dd7010c8e5190c Cleanup pass on README. Other versions are adding Cached from /proc/meminfo to free buffers/cache (and subtracting it from used), but sysinfo() doesn't provide it. (But it provide "high memory", which hasn't been relevant for almost a decade...) But that's a design change, not a cleanup issue. diff -r 8a13412acf4d -r f0c4b7476118 toys/other/free.c --- a/toys/other/free.c Wed Sep 17 18:25:05 2014 -0500 +++ b/toys/other/free.c Wed Sep 17 20:21:44 2014 -0500 @@ -2,56 +2,46 @@ * * Copyright 2012 Elie De Brauwer -USE_FREE(NEWTOY(free, "gmkb", TOYFLAG_USR|TOYFLAG_BIN)) +USE_FREE(NEWTOY(free, "tgmkb[!tgmkb]", TOYFLAG_USR|TOYFLAG_BIN)) config FREE bool "free" default y help - usage: free [-bkmg] + usage: free [-bkmgt] - Display the total, free and used amount of physical memory and - swap space. + Display the total, free and used amount of physical memory and swap space. - -bkmg Output in bytes (default), KB, MB or GB + -bkmgt Output units (default is bytes) */ #define FOR_free #include "toys.h" -static unsigned long long convert(unsigned long d, unsigned int iscale, - unsigned int oscale) +GLOBALS( + unsigned bits; + unsigned long long units; +) + +static unsigned long long convert(unsigned long d) { - return ((unsigned long long)d*iscale)>>oscale; + return (d*TT.units)>>TT.bits; } void free_main(void) { - struct sysinfo info; - unsigned int iscale = 1; - unsigned int oscale = 0; + struct sysinfo in; - sysinfo(&info); - if (info.mem_unit) iscale = info.mem_unit; - if (toys.optflags & FLAG_b) oscale = 0; - if (toys.optflags & FLAG_k) oscale = 10; - if (toys.optflags & FLAG_m) oscale = 20; - if (toys.optflags & FLAG_g) oscale = 30; + sysinfo(&in); + TT.units = in.mem_unit ? in.mem_unit : 1; + for (TT.bits = 0; toys.optflags && !(toys.optflags&(1<