From: Sebastian Harl Date: Wed, 21 May 2008 14:50:07 +0000 (+0200) Subject: collectd-nagios: Updated to the new "unixsock" protocol. X-Git-Tag: collectd-4.4.1~5^2~1 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=ca3fb937748e51b9a4e7ef170777a0f4bfff7695;p=collectd.git collectd-nagios: Updated to the new "unixsock" protocol. When disambiguating the protocol used by the unixsock plugin in commit 90287c6d240a168fca8d01f8330e2e2263e1f0a4 ("Disambiguated the protocol used by the unixsock (and other) plugins.") the formatting of the return values of the "GETVAL" command has been modified. This patch updates collectd-nagios to handle the new format correctly. Signed-off-by: Sebastian Harl Signed-off-by: Florian Forster --- diff --git a/src/collectd-nagios.c b/src/collectd-nagios.c index f4dff5bb..1bf5b3f3 100644 --- a/src/collectd-nagios.c +++ b/src/collectd-nagios.c @@ -201,12 +201,17 @@ static int get_values (int *ret_values_num, double **ret_values, fclose (fh_out); return (-1); } - fclose (fh_in); fh_in = NULL; fd = -1; - fclose (fh_out); fh_out = NULL; - values_num = atoi (buffer); - if (values_num < 1) - return (-1); + { + char *ptr = strchr (buffer, ' '); + + if (ptr != NULL) + *ptr = '\0'; + + values_num = atoi (buffer); + if (values_num < 1) + return (-1); + } values = (double *) malloc (values_num * sizeof (double)); if (values == NULL) @@ -225,32 +230,33 @@ static int get_values (int *ret_values_num, double **ret_values, return (-1); } + i = 0; + while (fgets (buffer, sizeof (buffer), fh_in) != NULL) { - char *ptr = strchr (buffer, ' ') + 1; char *key; char *value; - i = 0; - while ((key = strtok (ptr, " \t")) != NULL) - { - ptr = NULL; - value = strchr (key, '='); - if (value == NULL) - continue; - *value = '\0'; value++; + key = buffer; - if (ignore_ds (key) != 0) - continue; + value = strchr (key, '='); + if (value == NULL) + continue; + *value = '\0'; value++; - values_names[i] = strdup (key); - values[i] = atof (value); + if (ignore_ds (key) != 0) + continue; - i++; - if (i >= values_num) - break; - } - values_num = i; + values_names[i] = strdup (key); + values[i] = atof (value); + + i++; + if (i >= values_num) + break; } + values_num = i; + + fclose (fh_in); fh_in = NULL; fd = -1; + fclose (fh_out); fh_out = NULL; *ret_values_num = values_num; *ret_values = values;