#include <errno.h>
#include <fcntl.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
return strlen(p) == 8 && !strncmp(p, "/dev/sd", 7);
}
+static void provider_data_free(void *data)
+{
+ sk_disk_free((SkDisk *)data);
+}
+
+static SkDisk *get_disk(struct psensor *s)
+{
+ return (SkDisk *)s->provider_data;
+}
+
static struct psensor *
create_sensor(char *id, char *name, SkDisk *disk, int values_max_length)
{
t,
values_max_length);
- s->disk = disk;
+ s->provider_data = disk;
+ s->provider_data_free_fct = &provider_data_free;
return s;
}
close(f);
}
-struct psensor **hdd_psensor_list_add(struct psensor **sensors,
- int values_max_length)
+void
+atasmart_psensor_list_append(struct psensor ***sensors, int values_max_length)
{
char **paths, **tmp, *id;
SkDisk *disk;
- struct psensor *sensor, **tmp_sensors, **result;
+ struct psensor *sensor;
log_fct_enter();
paths = dir_list("/dev", filter_sd);
- result = sensors;
tmp = paths;
while (*tmp) {
log_fct("Open %s", *tmp);
disk,
values_max_length);
- tmp_sensors = psensor_list_add(result, sensor);
-
- if (result != sensors)
- free(result);
-
- result = tmp_sensors;
+ psensor_list_append(sensors, sensor);
} else {
log_err(_("%s: sk_disk_open() failure: %s."),
PROVIDER_NAME,
paths_free(paths);
log_fct_exit();
-
- return result;
}
-void hdd_psensor_list_update(struct psensor **sensors)
+void atasmart_psensor_list_update(struct psensor **sensors)
{
struct psensor **cur, *s;
uint64_t kelvin;
int ret;
double c;
+ SkDisk *disk;
+
+ if (!sensors)
+ return;
cur = sensors;
while (*cur) {
s = *cur;
if (!(s->type & SENSOR_TYPE_REMOTE)
&& s->type & SENSOR_TYPE_ATASMART) {
- ret = sk_disk_smart_read_data(s->disk);
+ disk = get_disk(s);
+
+ ret = sk_disk_smart_read_data(disk);
if (!ret) {
- ret = sk_disk_smart_get_temperature(s->disk,
+ ret = sk_disk_smart_get_temperature(disk,
&kelvin);
if (!ret) {