Blob Blame History Raw
diff -up ./top/top.c.ori ./top/top.c
--- ./top/top.c.ori	2018-01-15 14:04:42.403457405 +0100
+++ ./top/top.c	2018-01-15 14:07:59.663713707 +0100
@@ -1260,15 +1260,25 @@ static char *ioline (const char *prompt)
 
 
         /*
-         * Make locale aware float (but maybe restrict to whole numbers). */
+         * Make locale unaware float (but maybe restrict to whole numbers). */
 static int mkfloat (const char *str, float *num, int whole) {
-   char *ep;
+   char tmp[SMLBUFSIZ], *ep;
 
-   if (whole)
+   if (whole) {
       *num = (float)strtol(str, &ep, 0);
-   else
-      *num = strtof(str, &ep);
-   if (ep != str && *ep == '\0' && *num < INT_MAX)
+      if (ep != str && *ep == '\0' && *num < INT_MAX)
+         return 1;
+      return 0;
+   }
+   snprintf(tmp, sizeof(tmp), "%s", str);
+   *num = strtof(tmp, &ep);
+   if (*ep != '\0') {
+      // fallback - try to swap the floating point separator
+      if (*ep == '.') *ep = ',';
+      else if (*ep == ',') *ep = '.';
+      *num = strtof(tmp, &ep);
+   }
+   if (ep != tmp && *ep == '\0' && *num < INT_MAX)
       return 1;
    return 0;
 } // end: mkfloat