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

Corinna Vinschen corinna-cygwin@cygwin.com
Mon Apr 10 08:15:00 GMT 2017


On Apr  8 13:55, Jon Turney wrote:
> 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

Looks good.


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20170410/2ff32aa2/attachment.sig>


More information about the Cygwin-patches mailing list