fixed coredump when there are no sensors
[psensor.git] / src / lib / psensor.c
index d019886..f8c0a83 100644 (file)
@@ -42,8 +42,16 @@ struct psensor *psensor_create(char *id,
        psensor->id = id;
        psensor->name = name;
        psensor->chip = chip;
-       psensor->min = UNKNOWN_DBL_VALUE;
-       psensor->max = UNKNOWN_DBL_VALUE;
+       psensor->sess_lowest = UNKNOWN_DBL_VALUE;
+       psensor->sess_highest = UNKNOWN_DBL_VALUE;
+
+       if (type & SENSOR_TYPE_PERCENT) {
+               psensor->min = 0;
+               psensor->max = 100;
+       } else {
+               psensor->min = UNKNOWN_DBL_VALUE;
+               psensor->max = UNKNOWN_DBL_VALUE;
+       }
 
        psensor->type = type;
 
@@ -57,8 +65,6 @@ struct psensor *psensor_create(char *id,
        psensor->cb_alarm_raised_data = NULL;
        psensor->alarm_raised = 0;
 
-       psensor->color = NULL;
-
        psensor->provider_data = NULL;
        psensor->provider_data_free_fct = &free;
 
@@ -101,9 +107,6 @@ void psensor_free(struct psensor *s)
        if (s->chip)
                free(s->chip);
 
-       if (s->color)
-               free(s->color);
-
        measures_free(s->measures);
 
        if (s->provider_data && s->provider_data_free_fct)
@@ -252,11 +255,11 @@ void psensor_set_current_measure(struct psensor *s, double v, struct timeval tv)
        s->measures[s->values_max_length - 1].value = v;
        s->measures[s->values_max_length - 1].time = tv;
 
-       if (s->min == UNKNOWN_DBL_VALUE || v < s->min)
-               s->min = v;
+       if (s->sess_lowest == UNKNOWN_DBL_VALUE || v < s->sess_lowest)
+               s->sess_lowest = v;
 
-       if (s->max == UNKNOWN_DBL_VALUE || v > s->max)
-               s->max = v;
+       if (s->sess_highest == UNKNOWN_DBL_VALUE || v > s->sess_highest)
+               s->sess_highest = v;
 
        if (v > s->alarm_high_threshold || v < s->alarm_low_threshold) {
                if (!s->alarm_raised && s->cb_alarm_raised) {
@@ -279,8 +282,8 @@ struct measure *psensor_get_current_measure(struct psensor *sensor)
 }
 
 /*
-  Returns the minimal value of a given 'type' (SENSOR_TYPE_TEMP or
-  SENSOR_TYPE_FAN)
* Returns the minimal value of a given 'type' (SENSOR_TYPE_TEMP or
* SENSOR_TYPE_FAN)
  */
 static double get_min_value(struct psensor **sensors, int type)
 {
@@ -311,8 +314,8 @@ static double get_min_value(struct psensor **sensors, int type)
 }
 
 /*
-  Returns the maximal value of a given 'type' (SENSOR_TYPE_TEMP or
-  SENSOR_TYPE_FAN)
* Returns the maximal value of a given 'type' (SENSOR_TYPE_TEMP or
* SENSOR_TYPE_FAN)
  */
 double get_max_value(struct psensor **sensors, int type)
 {
@@ -429,7 +432,10 @@ const char *psensor_type_to_unit_str(unsigned int type, int use_celsius)
 
 void psensor_log_measures(struct psensor **sensors)
 {
-       if (log_level == LOG_DEBUG)
+       if (log_level == LOG_DEBUG) {
+               if (!sensors)
+                       return;
+
                while (*sensors) {
                        log_debug("Measure: %s %.2f",
                                   (*sensors)->name,
@@ -437,6 +443,7 @@ void psensor_log_measures(struct psensor **sensors)
 
                        sensors++;
                }
+       }
 }
 
 struct psensor **psensor_list_copy(struct psensor **sensors)