X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fthermal.c;h=aa95dac334fa721cea9a1acfc258b3524fb3228e;hb=e1bfa71aca1f37c2f293dc9adb44065c6e7a9ad9;hp=603f85bbf6a96595ee04891127f37006d90730aa;hpb=443afcad2cbacaca9bb1fd7d9ea790cbeb6ff015;p=collectd.git diff --git a/src/thermal.c b/src/thermal.c index 603f85bb..aa95dac3 100644 --- a/src/thermal.c +++ b/src/thermal.c @@ -20,9 +20,9 @@ **/ #include "collectd.h" + #include "common.h" #include "plugin.h" -#include "configfile.h" #include "utils_ignorelist.h" #if !KERNEL_LINUX @@ -35,8 +35,8 @@ static const char *config_keys[] = { "ForceUseProcfs" }; -const char *const dirname_sysfs = "/sys/class/thermal"; -const char *const dirname_procfs = "/proc/acpi/thermal_zone"; +static const char *const dirname_sysfs = "/sys/class/thermal"; +static const char *const dirname_procfs = "/proc/acpi/thermal_zone"; static _Bool force_procfs = 0; static ignorelist_t *device_list; @@ -47,14 +47,11 @@ enum dev_type { }; static void thermal_submit (const char *plugin_instance, enum dev_type dt, - gauge_t value) + value_t value) { value_list_t vl = VALUE_LIST_INIT; - value_t v; - - v.gauge = value; - vl.values = &v; + vl.values = &value; vl.values_len = 1; sstrncpy (vl.host, hostname_g, sizeof (vl.host)); @@ -72,52 +69,26 @@ static void thermal_submit (const char *plugin_instance, enum dev_type dt, static int thermal_sysfs_device_read (const char __attribute__((unused)) *dir, const char *name, void __attribute__((unused)) *user_data) { - char filename[256]; - char data[1024]; - int len; + char filename[PATH_MAX]; _Bool success = 0; + value_t value; if (device_list && ignorelist_match (device_list, name)) return -1; - len = snprintf (filename, sizeof (filename), - "%s/%s/temp", dirname_sysfs, name); - if ((len < 0) || ((size_t) len >= sizeof (filename))) - return -1; - - len = read_file_contents (filename, data, sizeof(data)); - if (len > 1 && data[--len] == '\n') { - char *endptr = NULL; - double temp; - - data[len] = 0; - errno = 0; - temp = strtod (data, &endptr) / 1000.0; - - if (endptr == data + len && errno == 0) { - thermal_submit(name, TEMP, temp); - success = 1; - } + ssnprintf (filename, sizeof (filename), "%s/%s/temp", dirname_sysfs, name); + if (parse_value_file (filename, &value, DS_TYPE_GAUGE) == 0) + { + value.gauge /= 1000.0; + thermal_submit(name, TEMP, value); + success = 1; } - len = snprintf (filename, sizeof (filename), - "%s/%s/cur_state", dirname_sysfs, name); - if ((len < 0) || ((size_t) len >= sizeof (filename))) - return -1; - - len = read_file_contents (filename, data, sizeof(data)); - if (len > 1 && data[--len] == '\n') { - char *endptr = NULL; - double state; - - data[len] = 0; - errno = 0; - state = strtod (data, &endptr); - - if (endptr == data + len && errno == 0) { - thermal_submit(name, COOLING_DEV, state); - success = 1; - } + ssnprintf (filename, sizeof (filename), "%s/%s/cur_state", dirname_sysfs, name); + if (parse_value_file (filename, &value, DS_TYPE_GAUGE) == 0) + { + thermal_submit(name, COOLING_DEV, value); + success = 1; } return (success ? 0 : -1); @@ -139,12 +110,12 @@ static int thermal_procfs_device_read (const char __attribute__((unused)) *dir, * temperature: 55 C */ - len = snprintf (filename, sizeof (filename), + len = ssnprintf (filename, sizeof (filename), "%s/%s/temperature", dirname_procfs, name); if ((len < 0) || ((size_t) len >= sizeof (filename))) return -1; - len = read_file_contents (filename, data, sizeof(data)); + len = (ssize_t) read_file_contents (filename, data, sizeof(data)); if ((len > 0) && ((size_t) len > sizeof(str_temp)) && (data[--len] == '\n') && (! strncmp(data, str_temp, sizeof(str_temp)-1))) { @@ -176,7 +147,7 @@ static int thermal_procfs_device_read (const char __attribute__((unused)) *dir, temp = (strtod (data + len, &endptr) + add) * factor; if (endptr != data + len && errno == 0) { - thermal_submit(name, TEMP, temp); + thermal_submit(name, TEMP, (value_t) { .gauge = temp }); return 0; } }