zfs_arc plugin: Use the more generic "cache_*" types …
[collectd.git] / src / collectdctl.c
index cc19509..e1091cc 100644 (file)
 # include "config.h"
 #endif
 
-#include "libcollectdclient/client.h"
-
-#include <assert.h>
+#ifndef _ISOC99_SOURCE
+# define _ISOC99_SOURCE
+#endif
 
-#include <errno.h>
+#ifndef _POSIX_C_SOURCE
+# define _POSIX_C_SOURCE 200112L
+#endif
 
-#include <getopt.h>
+#ifndef _XOPEN_SOURCE
+# define _XOPEN_SOURCE 600
+#endif
 
-#include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
 #include <string.h>
+#include <strings.h>
+
+#include <assert.h>
+#include <errno.h>
+#include <math.h>
+
+#include "libcollectdclient/client.h"
 
-#include <unistd.h>
 
 #define DEFAULT_SOCK LOCALSTATEDIR"/run/"PACKAGE_NAME"-unixsock"
 
@@ -239,7 +250,7 @@ static int flush (lcc_connection_t *c, int argc, char **argv)
     if (strcasecmp (key, "timeout") == 0) {
       char *endptr = NULL;
 
-      timeout = strtol (value, &endptr, 0);
+      timeout = (int) strtol (value, &endptr, 0);
 
       if (endptr == value) {
         fprintf (stderr, "ERROR: Failed to parse timeout as number: %s.\n",
@@ -252,7 +263,7 @@ static int flush (lcc_connection_t *c, int argc, char **argv)
       }
     }
     else if (strcasecmp (key, "plugin") == 0) {
-      status = array_grow ((void **)&plugins, &plugins_num,
+      status = array_grow ((void *)&plugins, &plugins_num,
           sizeof (*plugins));
       if (status != 0)
         BAIL_OUT (status);
@@ -260,7 +271,7 @@ static int flush (lcc_connection_t *c, int argc, char **argv)
       plugins[plugins_num - 1] = value;
     }
     else if (strcasecmp (key, "identifier") == 0) {
-      status = array_grow ((void **)&identifiers, &identifiers_num,
+      status = array_grow ((void *)&identifiers, &identifiers_num,
           sizeof (*identifiers));
       if (status != 0)
         BAIL_OUT (status);
@@ -278,7 +289,7 @@ static int flush (lcc_connection_t *c, int argc, char **argv)
   }
 
   if (plugins_num == 0) {
-    status = array_grow ((void **)&plugins, &plugins_num, sizeof (*plugins));
+    status = array_grow ((void *)&plugins, &plugins_num, sizeof (*plugins));
     if (status != 0)
       BAIL_OUT (status);
 
@@ -441,7 +452,7 @@ static int putval (lcc_connection_t *c, int argc, char **argv)
 
         vl.time = strtol (argv[i], &endptr, 0);
 
-        if (endptr == value) {
+        if (endptr == argv[i]) {
           fprintf (stderr, "ERROR: Failed to parse time as number: %s.\n",
               argv[i]);
           return (-1);
@@ -469,7 +480,12 @@ static int putval (lcc_connection_t *c, int argc, char **argv)
          * anyway. Also, lcc uses the type information for formatting the
          * number only, so the real meaning does not matter. -tokkee */
         dot = strchr (value, (int)'.');
-        if (dot) { /* floating point value */
+        endptr = NULL;
+        if (strcasecmp (value, "U") == 0) {
+          values[values_len].gauge = NAN;
+          values_types[values_len] = LCC_TYPE_GAUGE;
+        }
+        else if (dot) { /* floating point value */
           values[values_len].gauge = strtod (value, &endptr);
           values_types[values_len] = LCC_TYPE_GAUGE;
         }