Merge branch 'collectd-4.0'
[collectd.git] / src / hddtemp.c
index a775861..0432de7 100644 (file)
 #include "plugin.h"
 #include "configfile.h"
 
-#if HAVE_NETDB_H && HAVE_SYS_SOCKET_H && HAVE_NETINET_IN_H \
-       && HAVE_NETINET_TCP_H && HAVE_LIBGEN_H
 # include <netdb.h>
 # include <sys/socket.h>
 # include <netinet/in.h>
 # include <netinet/tcp.h>
 # include <libgen.h> /* for basename */
-# define HDDTEMP_HAVE_READ 1
-#else
-# define HDDTEMP_HAVE_READ 0
-#endif
 
 #if HAVE_LINUX_MAJOR_H
 # include <linux/major.h>
 #define HDDTEMP_DEF_HOST "127.0.0.1"
 #define HDDTEMP_DEF_PORT "7634"
 
-static data_source_t data_source_temperature[1] =
-{
-       {"value", DS_TYPE_GAUGE, -273.15, NAN}
-};
-
-static data_set_t temperature_ds =
-{
-       "temperature", 1, data_source_temperature
-};
-
-#if HDDTEMP_HAVE_READ
 static const char *config_keys[] =
 {
        "Host",
@@ -79,7 +62,7 @@ typedef struct hddname
 
 static hddname_t *first_hddname = NULL;
 static char *hddtemp_host = NULL;
-static char *hddtemp_port = NULL;
+static char hddtemp_port[16];
 
 /*
  * NAME
@@ -118,7 +101,10 @@ static int hddtemp_query_daemon (char *buffer, int buffer_size)
        int              ai_return;
 
        memset (&ai_hints, '\0', sizeof (ai_hints));
-       ai_hints.ai_flags    = AI_ADDRCONFIG;
+       ai_hints.ai_flags    = 0;
+#ifdef AI_ADDRCONFIG
+       ai_hints.ai_flags   |= AI_ADDRCONFIG;
+#endif
        ai_hints.ai_family   = PF_UNSPEC;
        ai_hints.ai_socktype = SOCK_STREAM;
        ai_hints.ai_protocol = IPPROTO_TCP;
@@ -128,7 +114,7 @@ static int hddtemp_query_daemon (char *buffer, int buffer_size)
                host = HDDTEMP_DEF_HOST;
 
        port = hddtemp_port;
-       if (port == NULL)
+       if (strlen (port) == 0)
                port = HDDTEMP_DEF_PORT;
 
        if ((ai_return = getaddrinfo (host, port, &ai_hints, &ai_list)) != 0)
@@ -221,17 +207,21 @@ static int hddtemp_query_daemon (char *buffer, int buffer_size)
 
 static int hddtemp_config (const char *key, const char *value)
 {
-       if (strcasecmp (key, "host") == 0)
+       if (strcasecmp (key, "Host") == 0)
        {
                if (hddtemp_host != NULL)
                        free (hddtemp_host);
                hddtemp_host = strdup (value);
        }
-       else if (strcasecmp (key, "port") == 0)
+       else if (strcasecmp (key, "Port") == 0)
        {
-               if (hddtemp_port != NULL)
-                       free (hddtemp_port);
-               hddtemp_port = strdup (value);
+               int port = (int) (atof (value));
+               if ((port > 0) && (port <= 65535))
+                       snprintf (hddtemp_port, sizeof (hddtemp_port),
+                                       "%i", port);
+               else
+                       strncpy (hddtemp_port, value, sizeof (hddtemp_port));
+               hddtemp_port[sizeof (hddtemp_port) - 1] = '\0';
        }
        else
        {
@@ -510,18 +500,13 @@ static int hddtemp_read (void)
        
        return (0);
 } /* int hddtemp_read */
-#endif /* HDDTEMP_HAVE_READ */
 
 /* module_register
    Register collectd plugin. */
 void module_register (void)
 {
-       plugin_register_data_set (&temperature_ds);
-       
-#if HDDTEMP_HAVE_READ
        plugin_register_config ("hddtemp", hddtemp_config,
                        config_keys, config_keys_num);
        plugin_register_init ("hddtemp", hddtemp_init);
        plugin_register_read ("hddtemp", hddtemp_read);
-#endif /* HDDTEMP_HAVE_READ */
 }