]> granicus.if.org Git - procps-ng/commitdiff
free: fix scaling on 32-bit systems
authorCraig Small <csmall@enc.com.au>
Tue, 10 Apr 2018 11:20:25 +0000 (21:20 +1000)
committerCraig Small <csmall@enc.com.au>
Tue, 10 Apr 2018 11:20:25 +0000 (21:20 +1000)
Systems that have a 32-bit long would give incorrect results in free.

References:
 Issue #89
 https://www.freelists.org/post/procps/frees-scale-size-broken-with-32bit-long

NEWS
free.c

diff --git a/NEWS b/NEWS
index f9ee69a79ed800b6df061ee16d3fa888b875f625..822a88bebfbc4cec9af80399da4103512e376b27 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,7 @@ procps-ng-3.3.14
 ----------------
   * pgrep: Don't segfault on non match                     Debian #894917
   * pgrep/pkill: Revert so matches all namespaces          issue #91
+  * free: Fix scaling on 32-bit systems                    issue #89
 
 procps-ng-3.3.13
 ----------------
diff --git a/free.c b/free.c
index 08cb73bda14fd2217dadc81b29bf43a45055ff79..70ecb127af26a80bb7dda58c6aacbaa28664c4bc 100644 (file)
--- a/free.c
+++ b/free.c
@@ -133,7 +133,7 @@ static const char *scale_size(unsigned long size, int flags, struct commandline_
                if (args.exponent > 1) {
                        /* In desired scale. */
                        snprintf(buf, sizeof(buf), "%ld",
-                 (long int)((size * 1024) / power(base, args.exponent-1))
+                 (long int)((size * 1024.0) / power(base, args.exponent-1))
                            );
                        return buf;
                }