This is the mail archive of the cygwin-patches mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Avoid decimal point localization in /proc/loadavg


Explicitly format the contents of /proc/loadavg to avoid the decimal point
getting localized according to LC_NUMERIC. Using anything other than '.'
breaks top.

Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
---
 winsup/cygwin/fhandler_proc.cc | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/winsup/cygwin/fhandler_proc.cc b/winsup/cygwin/fhandler_proc.cc
index a7e816f..ad367e4 100644
--- a/winsup/cygwin/fhandler_proc.cc
+++ b/winsup/cygwin/fhandler_proc.cc
@@ -30,6 +30,7 @@ details. */
 #include <wctype.h>
 #include "cpuid.h"
 #include "mount.h"
+#include <math.h>
 
 #define _COMPILING_NEWLIB
 #include <dirent.h>
@@ -432,10 +433,14 @@ format_proc_loadavg (void *, char *&destbuf)
   double loadavg[3] = { 0.0, 0.0, 0.0 };
   getloadavg (loadavg, 3);
 
+#define HUNDRETHS(l) (int)((l - floor(l))*100)
+
   destbuf = (char *) crealloc_abort (destbuf, 48);
-  return sprintf (destbuf, "%.2f %.2f %.2f %u/%u\n",
-		  loadavg[0], loadavg[1], loadavg[2], running,
-		  (unsigned int)pids.npids);
+  return __small_sprintf (destbuf, "%u.%02u %u.%02u %u.%02u %u/%u\n",
+			  (int)loadavg[0], HUNDRETHS(loadavg[0]),
+			  (int)loadavg[1], HUNDRETHS(loadavg[1]),
+			  (int)loadavg[2], HUNDRETHS(loadavg[2]),
+			  running, (unsigned int)pids.npids);
 }
 
 static off_t
-- 
2.8.3


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]