-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;
- int ok = 0;
-
- 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);
- ++ok;
- }
- }
-
- 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);
- ++ok;
- }
- }
-
- return ok ? 0 : -1;
+enum dev_type { TEMP = 0, COOLING_DEV };
+
+static void thermal_submit(const char *plugin_instance, enum dev_type dt,
+ value_t value) {
+ value_list_t vl = VALUE_LIST_INIT;
+
+ vl.values = &value;
+ vl.values_len = 1;
+
+ sstrncpy(vl.plugin, "thermal", sizeof(vl.plugin));
+ if (plugin_instance != NULL)
+ sstrncpy(vl.plugin_instance, plugin_instance, sizeof(vl.plugin_instance));
+ sstrncpy(vl.type, (dt == TEMP) ? "temperature" : "gauge", sizeof(vl.type));
+
+ plugin_dispatch_values(&vl);