* sysdep.c (system_process_attributes) [SOLARIS2 && HAVE_PROCFS]:
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 2 Jun 2012 16:37:54 +0000 (09:37 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 2 Jun 2012 16:37:54 +0000 (09:37 -0700)
Convert pctcpu and pctmem to Lisp float properly.
Let the compiler fold better, as 100.0/0x8000 is exact.

src/ChangeLog
src/sysdep.c

index 1d48a6f..82ff412 100644 (file)
@@ -1,3 +1,9 @@
+2012-06-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * sysdep.c (system_process_attributes) [SOLARIS2 && HAVE_PROCFS]:
+       Convert pctcpu and pctmem to Lisp float properly.
+       Let the compiler fold better, as 100.0/0x8000 is exact.
+
 2012-06-02  Andreas Schwab  <schwab@linux-m68k.org>
 
        * alloc.c (CONS_BLOCK_SIZE): Account for padding at the end of
index a82f802..bf87fa2 100644 (file)
@@ -3107,8 +3107,8 @@ system_process_attributes (Lisp_Object pid)
          attrs = Fcons (Fcons (Qrss, make_fixnum_or_float (pinfo.pr_rssize)), attrs);
 
          /* pr_pctcpu and pr_pctmem are encoded as a fixed point 16 bit number in  [0 ... 1].  */
-         attrs = Fcons (Fcons (Qpcpu, (pinfo.pr_pctcpu * 100.0) / (double)0x8000), attrs);
-         attrs = Fcons (Fcons (Qpmem, (pinfo.pr_pctmem * 100.0) / (double)0x8000), attrs);
+         attrs = Fcons (Fcons (Qpcpu, make_float (100.0 / 0x8000 * pinfo.pr_pctcpu)), attrs);
+         attrs = Fcons (Fcons (Qpmem, make_float (100.0 / 0x8000 * pinfo.pr_pctmem)), attrs);
 
          decoded_cmd
            =  code_convert_string_norecord (make_unibyte_string (pinfo.pr_fname,