SOURCES: gnome-sensors-lm_sensors_3.patch (NEW) - fix to allow bui...
hawk
hawk at pld-linux.org
Sun May 4 00:26:57 CEST 2008
Author: hawk Date: Sat May 3 22:26:57 2008 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- fix to allow building with lm_sensors 3.x
---- Files affected:
SOURCES:
gnome-sensors-lm_sensors_3.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/gnome-sensors-lm_sensors_3.patch
diff -u /dev/null SOURCES/gnome-sensors-lm_sensors_3.patch:1.1
--- /dev/null Sun May 4 00:26:57 2008
+++ SOURCES/gnome-sensors-lm_sensors_3.patch Sun May 4 00:26:52 2008
@@ -0,0 +1,294 @@
+diff -ur sensors-applet-1.8.1.orig/src/libsensors-sensors-interface.c sensors-applet-1.8.1/src/libsensors-sensors-interface.c
+--- sensors-applet-1.8.1.orig/src/libsensors-sensors-interface.c 2007-07-02 15:36:08.000000000 +0200
++++ sensors-applet-1.8.1/src/libsensors-sensors-interface.c 2007-11-12 16:25:04.000000000 +0100
+@@ -42,6 +42,8 @@
+
+ #include "libsensors-sensors-interface.h"
+
++#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
++
+ #define LIBSENSORS_CONFIG_FILE "/etc/sensors.conf"
+ #define LIBSENSORS_ALTERNATIVE_CONFIG_FILE "/usr/local/etc/sensors.conf"
+
+@@ -81,6 +83,8 @@
+ };
+ static regex_t temp_exps_comp[TEMP_EXPS_LENGTH];
+
++#endif /* libsensors3 only code */
++
+ static regex_t uri_re;
+
+ /* for error handling */
+@@ -107,6 +111,7 @@
+ return quark;
+ }
+
++#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
+ static char *get_chip_name (const sensors_chip_name *chip) {
+ char *name;
+
+@@ -152,6 +157,7 @@
+
+ return CURRENT_SENSOR; /* default :) */
+ }
++#endif /* libsensors3 code */
+
+ static IconType get_sensor_icon (SensorType type) {
+ switch (type) {
+@@ -164,6 +170,7 @@
+ }
+ }
+
++#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
+ /* If a sensor is 'interesting' to us then return its label, otherwise NULL. */
+ static char *get_sensor_interesting_label (sensors_chip_name chip, int feature) {
+ char *label;
+@@ -181,6 +188,26 @@
+ return NULL;
+ }
+
++static void get_sensor_min_max(const sensors_chip_name *chip, int n1, int n2,
++ int number, gdouble *low_value,
++ gdouble *high_value) {
++ const sensors_feature_data *data;
++ double value;
++
++ /* The sub features are returned directly after the main feature by
++ sensors_get_all_features(), so no need to iterate over all features */
++ while ((data = sensors_get_all_features (*chip, &n1, &n2)) != NULL &&
++ data->mapping == number) {
++ if ((data->mode & SENSORS_MODE_R) &&
++ (sensors_get_feature(*chip, data->number, &value) == 0)) {
++ if (!strcmp(data->name + strlen(data->name) - 4, "_min"))
++ *low_value = value;
++ if (!strcmp(data->name + strlen(data->name) - 4, "_max"))
++ *high_value = value;
++ }
++ }
++}
++
+ static void libsensors_sensors_interface_get_sensors(SensorsApplet *sensors_applet) {
+ FILE *file;
+ const sensors_chip_name *chip;
+@@ -251,6 +288,153 @@
+ }
+ }
+
++#else /* libsensors 4 code */
++
++static void libsensors_sensors_interface_get_sensors(SensorsApplet *sensors_applet) {
++ const sensors_chip_name *chip;
++ int i;
++
++ if (sensors_init(NULL) != 0)
++ return;
++
++ /* libsensors exposes a number of chips - ... */
++ i = 0;
++ while ((chip = sensors_get_detected_chips (NULL, &i)) != NULL) {
++ char chip_name[512];
++ const sensors_feature *feature;
++ const sensors_subfeature *sub_feature;
++ int feature_nr, n1 = 0;
++ sensors_snprintf_chip_name(chip_name, sizeof(chip_name), chip);
++
++ /* ... each of which has one or more 'features' ... */
++ while ((feature = sensors_get_features (chip, &n1)) != NULL) {
++ char *label;
++ SensorType type;
++ gboolean visible;
++ IconType icon;
++ gdouble low_value, high_value;
++ double value;
++ gchar *url;
++
++ switch (feature->type) {
++ case SENSORS_FEATURE_IN:
++ type = VOLTAGE_SENSOR;
++ sub_feature = sensors_get_subfeature(chip,
++ feature,
++ SENSORS_SUBFEATURE_IN_INPUT);
++ if (!sub_feature)
++ continue;
++ feature_nr = sub_feature->number;
++ break;
++ case SENSORS_FEATURE_FAN:
++ type = FAN_SENSOR;
++ sub_feature = sensors_get_subfeature(chip,
++ feature,
++ SENSORS_SUBFEATURE_FAN_INPUT);
++ if (!sub_feature)
++ continue;
++ feature_nr = sub_feature->number;
++ break;
++ case SENSORS_FEATURE_TEMP:
++ type = TEMP_SENSOR;
++ sub_feature = sensors_get_subfeature(chip,
++ feature,
++ SENSORS_SUBFEATURE_TEMP_INPUT);
++ if (!sub_feature)
++ continue;
++ feature_nr = sub_feature->number;
++ break;
++ default:
++ continue;
++ }
++
++ visible = (type == TEMP_SENSOR ? TRUE : FALSE);
++ icon = get_sensor_icon(type);
++
++ // the 'path' contains all the information we need to
++ // identify this sensor later
++ url = g_strdup_printf ("sensor://%s/%d", chip_name,
++ feature_nr);
++
++ // get low and high values
++ sensors_applet_get_default_limits(type, &low_value,
++ &high_value);
++ switch (feature->type) {
++ case SENSORS_FEATURE_IN:
++ if ((sub_feature = sensors_get_subfeature(
++ chip, feature,
++ SENSORS_SUBFEATURE_IN_MIN)) &&
++ !sensors_get_value(chip,
++ sub_feature->number, &value))
++ {
++ low_value = value;
++ }
++
++ if ((sub_feature = sensors_get_subfeature(
++ chip, feature,
++ SENSORS_SUBFEATURE_IN_MAX)) &&
++ !sensors_get_value(chip,
++ sub_feature->number, &value))
++ {
++ high_value = value;
++ }
++ break;
++ case SENSORS_FEATURE_FAN:
++ if ((sub_feature = sensors_get_subfeature(
++ chip, feature,
++ SENSORS_SUBFEATURE_FAN_MIN)) &&
++ !sensors_get_value(chip,
++ sub_feature->number, &value))
++ {
++ low_value = value;
++ }
++ break;
++ case SENSORS_FEATURE_TEMP:
++ if ((sub_feature = sensors_get_subfeature(
++ chip, feature,
++ SENSORS_SUBFEATURE_TEMP_MIN)) &&
++ !sensors_get_value(chip,
++ sub_feature->number, &value))
++ {
++ low_value = value;
++ }
++
++ if (((sub_feature = sensors_get_subfeature(
++ chip, feature,
++ SENSORS_SUBFEATURE_TEMP_MAX)) ||
++ (sub_feature = sensors_get_subfeature(
++ chip, feature,
++ SENSORS_SUBFEATURE_TEMP_CRIT))) &&
++ !sensors_get_value(chip,
++ sub_feature->number, &value))
++ {
++ high_value = value;
++ }
++ }
++
++ label = sensors_get_label(chip, feature);
++ if (!label)
++ label = feature->name;
++
++ // the id identifies a particular sensor for the user;
++ // we default to the label returned by libsensors
++ sensors_applet_add_sensor_full_details(
++ sensors_applet, url, label, label,
++ LIBSENSORS, type, visible,
++ low_value, high_value, FALSE,
++ "", "", 0, 1.0, 0.0, icon,
++ DEFAULT_GRAPH_COLOR);
++
++ if (label != feature->name)
++ free(label);
++
++ g_free (url);
++ }
++ }
++}
++
++#endif /* libsensor3 / libsensors4 code */
++
+ gdouble libsensors_sensors_interface_get_sensor_value(const gchar *path,
+ const gchar *id,
+ SensorType type,
+@@ -263,6 +447,7 @@
+ char *desired_chip_s;
+ sensors_chip_name desired_chip;
+ int feature;
++ double value;
+
+ int i;
+ const sensors_chip_name *found_chip;
+@@ -272,10 +457,10 @@
+ g_set_error (error, LIBSENSORS_ERROR, LIBSENSORS_CHIP_PARSE_ERROR, "Error parsing chip name");
+ else {
+ feature = atoi(path + m[2].rm_so);
++#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
+ /* search for the correct chip */
+ for (i = 0; (found_chip = sensors_get_detected_chips (&i)); ) {
+ if (sensors_match_chip (desired_chip, *found_chip)) {
+- double value;
+ /* retrieve the value of the feature */
+ if (sensors_get_feature (*found_chip, feature, &value) == 0)
+ result = value;
+@@ -285,6 +470,17 @@
+ break;
+ }
+ }
++#else
++ /* retrieve the value of the feature */
++ i = 0;
++ found_chip = sensors_get_detected_chips(&desired_chip, &i);
++ if (found_chip) {
++ if (sensors_get_value (found_chip, feature, &value) == 0)
++ result = value;
++ else
++ g_set_error (error, LIBSENSORS_ERROR, LIBSENSORS_MISSING_FEATURE_ERROR, "Error retrieving sensor value");
++ }
++#endif
+ if (found_chip == NULL)
+ g_set_error (error, LIBSENSORS_ERROR, LIBSENSORS_CHIP_NOT_FOUND_ERROR, "Chip not found");
+ }
+@@ -306,6 +502,7 @@
+ return;
+ }
+
++#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
+ for (i = 0; i < VOLTAGE_EXPS_LENGTH; ++i) {
+ if (regcomp (&volt_exps_comp[i], volt_exps[i], REG_ICASE) != 0) {
+ g_debug("Error compiling regexp...not initing libsensors sensors interface");
+@@ -326,18 +523,21 @@
+ return;
+ }
+ }
++#endif
+
+ sensors_applet_register_sensors_interface(sensors_applet,
+ LIBSENSORS,
+ libsensors_sensors_interface_get_sensor_value);
+ libsensors_sensors_interface_get_sensors(sensors_applet);
+
++#if SENSORS_API_VERSION < 0x400 /* libsensor 3 code */
+ for (i = 0; i < VOLTAGE_EXPS_LENGTH; ++i)
+ regfree (&volt_exps_comp[i]);
+ for (i = 0; i < FAN_EXPS_LENGTH; ++i)
+ regfree (&fan_exps_comp[i]);
+ for (i = 0; i < TEMP_EXPS_LENGTH; ++i)
+ regfree (&temp_exps_comp[i]);
++#endif
+
+ }
+
================================================================
More information about the pld-cvs-commit
mailing list