X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fhdd_hddtemp.c;h=68797e19dc4a698b154ad24fdd6bddc78777dff7;hb=c1e20f2631a1249720e9c75d753eacfcb0f6c7b9;hp=7d70b4a4d57b82be1f137ecde908a3bb83205c79;hpb=b559107e1ca113d36c117b7b54c34246bbce83f8;p=psensor.git diff --git a/src/lib/hdd_hddtemp.c b/src/lib/hdd_hddtemp.c index 7d70b4a..68797e1 100644 --- a/src/lib/hdd_hddtemp.c +++ b/src/lib/hdd_hddtemp.c @@ -48,15 +48,15 @@ struct hdd_info { int temp; }; -static char *fetch() +static char *fetch(void) { - int sockfd; + int sockfd, output_length; ssize_t n = 1; - int output_length = 0; - char *pc; - char *buffer; + char *pc, *buffer; struct sockaddr_in address; + output_length = 0; + sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { log_err(_("%s: failed to open socket."), PROVIDER_NAME); @@ -177,8 +177,9 @@ static char *next_hdd_info(char *string, struct hdd_info *info) void hddtemp_psensor_list_append(struct psensor ***sensors, int values_max_length) { - char *hddtemp_output, *c; + char *hddtemp_output, *c, *id; struct hdd_info info; + struct psensor *sensor; hddtemp_output = fetch(); @@ -198,9 +199,6 @@ hddtemp_psensor_list_append(struct psensor ***sensors, int values_max_length) c = hddtemp_output; while (c && (c = next_hdd_info(c, &info))) { - struct psensor *sensor; - char *id; - id = malloc(strlen(PROVIDER_NAME) + 1 + strlen(info.name) + 1); sprintf(id, "%s %s", PROVIDER_NAME, info.name); @@ -214,23 +212,42 @@ hddtemp_psensor_list_append(struct psensor ***sensors, int values_max_length) static void update(struct psensor **sensors, struct hdd_info *info) { - struct psensor **sensor_cur = sensors; - - while (*sensor_cur) { - if (!((*sensor_cur)->type & SENSOR_TYPE_REMOTE) - && (*sensor_cur)->type & SENSOR_TYPE_HDDTEMP - && !strcmp((*sensor_cur)->id + 8, info->name)) - psensor_set_current_value(*sensor_cur, + while (*sensors) { + if (!((*sensors)->type & SENSOR_TYPE_REMOTE) + && (*sensors)->type & SENSOR_TYPE_HDDTEMP + && !strcmp((*sensors)->id + 8, info->name)) + psensor_set_current_value(*sensors, (double)info->temp); - sensor_cur++; + sensors++; + } +} + +static bool contains_hddtemp_sensor(struct psensor **sensors) +{ + struct psensor *s; + + if (!sensors) + return false; + + while (*sensors) { + s = *sensors; + if (!(s->type & SENSOR_TYPE_REMOTE) + && (s->type & SENSOR_TYPE_HDDTEMP)) + return true; + sensors++; } + + return false; } void hddtemp_psensor_list_update(struct psensor **sensors) { char *hddtemp_output; + if (!contains_hddtemp_sensor(sensors)) + return; + hddtemp_output = fetch(); if (!hddtemp_output)