Просмотр исходного кода

Merge pull request #481 from sawolf/check_load_macosx

Fix check_load on Mac OSX
Sebastian Wolf 6 лет назад
Родитель
Сommit
60a9c455bb
1 измененных файлов с 18 добавлено и 3 удалено
  1. 18 3
      plugins/check_load.c

+ 18 - 3
plugins/check_load.c

@@ -102,12 +102,13 @@ int
 main (int argc, char **argv)
 {
 	int result;
-	int i;
+	int i, j;
 	long numcpus;
 
 	double la[3] = { 0.0, 0.0, 0.0 };	/* NetBSD complains about uninitialized arrays */
 #ifndef HAVE_GETLOADAVG
 	char input_buffer[MAX_INPUT_BUFFER];
+	int len;
 #endif
 
 	setlocale (LC_ALL, "");
@@ -136,11 +137,25 @@ main (int argc, char **argv)
 		printf (_("Could not open stderr for %s\n"), PATH_TO_UPTIME);
 	}
 	fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process);
+
+	/* Some platforms include commas in load averages, some don't. */
+	/* Strip out any commas in the uptime output */
+	len = strlen(input_buffer);
+
+	for (i = 0, j = 0; i < len, j < len; i++, j++) {
+		while (input_buffer[j] == ',') {
+			j += 1;
+		}
+		input_buffer[i] = input_buffer[j];
+	}
+
+	input_buffer[i] = '\0';
+
     if(strstr(input_buffer, "load average:")) {
-	    sscanf (input_buffer, "%*[^l]load average: %lf, %lf, %lf", &la1, &la5, &la15);
+	    sscanf (input_buffer, "%*[^l]load average: %lf %lf %lf", &la1, &la5, &la15);
     }
     else if(strstr(input_buffer, "load averages:")) {
-	    sscanf (input_buffer, "%*[^l]load averages: %lf, %lf, %lf", &la1, &la5, &la15);
+	    sscanf (input_buffer, "%*[^l]load averages: %lf %lf %lf", &la1, &la5, &la15);
     }
     else {
 		printf (_("could not parse load %d from uptime: %s\n"), result, PATH_TO_UPTIME);