Merge branch 'collectd-5.7' into collectd-5.8
[collectd.git] / src / sensors.c
index 189a17e..33982e0 100644 (file)
@@ -149,7 +149,7 @@ typedef struct featurelist {
 static char *conffile = SENSORS_CONF_PATH;
 /* #endif SENSORS_API_VERSION < 0x400 */
 
-#elif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500)
+#elif (SENSORS_API_VERSION >= 0x400)
 typedef struct featurelist {
   const sensors_chip_name *chip;
   const sensors_feature *feature;
@@ -159,11 +159,6 @@ typedef struct featurelist {
 
 static char *conffile = NULL;
 static _Bool use_labels = 0;
-/* #endif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) */
-
-#else /* if SENSORS_API_VERSION >= 0x500 */
-#error "This version of libsensors is not supported yet. Please report this " \
-       "as bug."
 #endif
 
 static featurelist_t *first_feature = NULL;
@@ -176,7 +171,7 @@ static int sensors_snprintf_chip_name(char *buf, size_t buf_size,
   int status = -1;
 
   if (chip->bus == SENSORS_CHIP_NAME_BUS_ISA) {
-    status = ssnprintf(buf, buf_size, "%s-isa-%04x", chip->prefix, chip->addr);
+    status = snprintf(buf, buf_size, "%s-isa-%04x", chip->prefix, chip->addr);
   } else if (chip->bus == SENSORS_CHIP_NAME_BUS_DUMMY) {
     status = snprintf(buf, buf_size, "%s-%s-%04x", chip->prefix, chip->busname,
                       chip->addr);
@@ -185,7 +180,7 @@ static int sensors_snprintf_chip_name(char *buf, size_t buf_size,
                       chip->addr);
   }
 
-  return (status);
+  return status;
 } /* int sensors_snprintf_chip_name */
 
 static int sensors_feature_name_to_type(const char *name) {
@@ -193,9 +188,9 @@ static int sensors_feature_name_to_type(const char *name) {
    * it's a one time cost.. */
   for (int i = 0; i < known_features_num; i++)
     if (strcasecmp(known_features[i].label, name) == 0)
-      return (known_features[i].type);
+      return known_features[i].type;
 
-  return (SENSOR_TYPE_UNKNOWN);
+  return SENSOR_TYPE_UNKNOWN;
 } /* int sensors_feature_name_to_type */
 #endif
 
@@ -216,23 +211,23 @@ static int sensors_config(const char *key, const char *value) {
     if (ignorelist_add(sensor_list, value)) {
       ERROR("sensors plugin: "
             "Cannot add value to ignorelist.");
-      return (1);
+      return 1;
     }
   } else if (strcasecmp(key, "IgnoreSelected") == 0) {
     ignorelist_set_invert(sensor_list, 1);
     if (IS_TRUE(value))
       ignorelist_set_invert(sensor_list, 0);
   }
-#if (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500)
+#if (SENSORS_API_VERSION >= 0x400)
   else if (strcasecmp(key, "UseLabels") == 0) {
     use_labels = IS_TRUE(value) ? 1 : 0;
   }
 #endif
   else {
-    return (-1);
+    return -1;
   }
 
-  return (0);
+  return 0;
 }
 
 static void sensors_free_features(void) {
@@ -272,7 +267,7 @@ static int sensors_load_conf(void) {
       char errbuf[1024];
       ERROR("sensors plugin: fopen(%s) failed: %s", conffile,
             sstrerror(errno, errbuf, sizeof(errbuf)));
-      return (-1);
+      return -1;
     }
   }
 
@@ -283,7 +278,7 @@ static int sensors_load_conf(void) {
   if (status != 0) {
     ERROR("sensors plugin: Cannot initialize sensors. "
           "Data will not be collected.");
-    return (-1);
+    return -1;
   }
 
 #if SENSORS_API_VERSION < 0x400
@@ -353,7 +348,7 @@ static int sensors_load_conf(void) {
   }   /* while sensors_get_detected_chips */
 /* #endif SENSORS_API_VERSION < 0x400 */
 
-#elif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500)
+#elif (SENSORS_API_VERSION >= 0x400)
   chip_num = 0;
   while ((chip = sensors_get_detected_chips(NULL, &chip_num)) != NULL) {
     const sensors_feature *feature;
@@ -367,6 +362,9 @@ static int sensors_load_conf(void) {
       if ((feature->type != SENSORS_FEATURE_IN) &&
           (feature->type != SENSORS_FEATURE_FAN) &&
           (feature->type != SENSORS_FEATURE_TEMP) &&
+#if SENSORS_API_VERSION >= 0x402
+          (feature->type != SENSORS_FEATURE_CURR) &&
+#endif
           (feature->type != SENSORS_FEATURE_POWER)) {
         DEBUG("sensors plugin: sensors_load_conf: "
               "Ignoring feature `%s', "
@@ -383,6 +381,9 @@ static int sensors_load_conf(void) {
         if ((subfeature->type != SENSORS_SUBFEATURE_IN_INPUT) &&
             (subfeature->type != SENSORS_SUBFEATURE_FAN_INPUT) &&
             (subfeature->type != SENSORS_SUBFEATURE_TEMP_INPUT) &&
+#if SENSORS_API_VERSION >= 0x402
+            (subfeature->type != SENSORS_SUBFEATURE_CURR_INPUT) &&
+#endif
             (subfeature->type != SENSORS_SUBFEATURE_POWER_INPUT))
           continue;
 
@@ -404,35 +405,34 @@ static int sensors_load_conf(void) {
       } /* while (subfeature) */
     }   /* while (feature) */
   }     /* while (chip) */
-#endif /* (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) */
+#endif /* (SENSORS_API_VERSION >= 0x400) */
 
   if (first_feature == NULL) {
     sensors_cleanup();
     INFO("sensors plugin: lm_sensors reports no "
          "features. Data will not be collected.");
-    return (-1);
+    return -1;
   }
 
-  return (0);
+  return 0;
 } /* int sensors_load_conf */
 
 static int sensors_shutdown(void) {
   sensors_free_features();
   ignorelist_free(sensor_list);
 
-  return (0);
+  return 0;
 } /* int sensors_shutdown */
 
 static void sensors_submit(const char *plugin_instance, const char *type,
-                           const char *type_instance, double val) {
+                           const char *type_instance, double value) {
   char match_key[1024];
   int status;
 
-  value_t values[1];
   value_list_t vl = VALUE_LIST_INIT;
 
-  status = ssnprintf(match_key, sizeof(match_key), "%s/%s-%s", plugin_instance,
-                     type, type_instance);
+  status = snprintf(match_key, sizeof(match_key), "%s/%s-%s", plugin_instance,
+                    type, type_instance);
   if (status < 1)
     return;
 
@@ -442,12 +442,9 @@ static void sensors_submit(const char *plugin_instance, const char *type,
       return;
   }
 
-  values[0].gauge = val;
-
-  vl.values = values;
+  vl.values = &(value_t){.gauge = value};
   vl.values_len = 1;
 
-  sstrncpy(vl.host, hostname_g, sizeof(vl.host));
   sstrncpy(vl.plugin, "sensors", sizeof(vl.plugin));
   sstrncpy(vl.plugin_instance, plugin_instance, sizeof(vl.plugin_instance));
   sstrncpy(vl.type, type, sizeof(vl.type));
@@ -458,7 +455,7 @@ static void sensors_submit(const char *plugin_instance, const char *type,
 
 static int sensors_read(void) {
   if (sensors_load_conf() != 0)
-    return (-1);
+    return -1;
 
 #if SENSORS_API_VERSION < 0x400
   for (featurelist_t *fl = first_feature; fl != NULL; fl = fl->next) {
@@ -483,7 +480,7 @@ static int sensors_read(void) {
   } /* for fl = first_feature .. NULL */
 /* #endif SENSORS_API_VERSION < 0x400 */
 
-#elif (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500)
+#elif (SENSORS_API_VERSION >= 0x400)
   for (featurelist_t *fl = first_feature; fl != NULL; fl = fl->next) {
     double value;
     int status;
@@ -517,14 +514,18 @@ static int sensors_read(void) {
       type = "temperature";
     else if (fl->feature->type == SENSORS_FEATURE_POWER)
       type = "power";
+#if SENSORS_API_VERSION >= 0x402
+    else if (fl->feature->type == SENSORS_FEATURE_CURR)
+      type = "current";
+#endif
     else
       continue;
 
     sensors_submit(plugin_instance, type, type_instance, value);
   } /* for fl = first_feature .. NULL */
-#endif /* (SENSORS_API_VERSION >= 0x400) && (SENSORS_API_VERSION < 0x500) */
+#endif /* (SENSORS_API_VERSION >= 0x400) */
 
-  return (0);
+  return 0;
 } /* int sensors_read */
 
 void module_register(void) {