--- src/cpufreqd_sensors.c.orig	2009-03-21 12:17:15.000000000 +0100
+++ src/cpufreqd_sensors.c	2009-08-14 14:39:52.894513594 +0200
@@ -23,10 +23,22 @@
 #include <string.h>
 #include "cpufreqd_plugin.h"
 
+#if !defined __GNUC__ || __GNUC__ < 3
+#define __attribute__(x)
+#endif
+
+#if SENSORS_API_VERSION < 0x400
+typedef sensors_feature_data sensors_feature;
+#endif
+
 /* to hold monitored feature list and avoid reading all sensors */
 struct sensors_monitor {
 	const sensors_chip_name *chip;
-	const sensors_feature_data *feat;
+	char chip_string[MAX_STRING_LEN];
+	const sensors_feature *feat;
+#if SENSORS_API_VERSION >= 0x400
+	const sensors_subfeature *sub_feat;
+#endif
 	double value;
 	struct sensors_monitor *next;
 };
@@ -133,27 +145,74 @@
 	struct sensors_monitor *list = monitor_list;
 
 	while (list) {
-		sensors_get_feature(*(list->chip), list->feat->number, &list->value);
-		clog(LOG_INFO, "%s: %.3f\n", list->feat->name, list->value);
+#if SENSORS_API_VERSION >= 0x400
+		if(sensors_get_value(list->chip, list->sub_feat->number, &list->value) < 0) {
+#else
+		if(sensors_get_feature(*(list->chip), list->feat->number, &list->value) < 0) {
+#endif
+			clog(LOG_ERR,"could not read value for %s\n",list->feat->name);
+			return -1;
+		}
+		clog(LOG_INFO, "%s:%s: %.3f\n", list->chip_string, list->feat->name, list->value);
 		list = list->next;
 	}
 	
 	return 0;
 }
 
+
+#if SENSORS_API_VERSION < 0x400
+/* Adapted from lm-sensors 2.10.8 prog/sensors/main.c */
+static int sensors_snprintf_chip_name(char *str, size_t size,
+			       const sensors_chip_name *chip)
+{
+	switch(chip->bus) {
+  case SENSORS_CHIP_NAME_BUS_ISA:
+    return snprintf(str,size,"%s-isa-%04x",chip->prefix,chip->addr);
+  case SENSORS_CHIP_NAME_BUS_PCI:
+    return snprintf(str,size,"%s-pci-%04x",chip->prefix,chip->addr);
+  case SENSORS_CHIP_NAME_BUS_DUMMY:
+    return snprintf(str,size,"%s-%s-%04x",chip->prefix,chip->busname,chip->addr);
+  default:
+    return snprintf(str,size,"%s-i2c-%d-%02x",chip->prefix,chip->bus,chip->addr);
+	}
+}
+#endif
+
+__attribute__((unused)) static const char* sensors_get_chip_name(const sensors_chip_name *chip);
+static const char* sensors_get_chip_name(const sensors_chip_name *chip) {
+	static char name[MAX_STRING_LEN];
+	sensors_snprintf_chip_name(name, MAX_STRING_LEN, chip);
+	return name;
+}
+
 /* this function can be pretty expensive (CPU time)?? */
 static struct sensors_monitor * validate_feature_name(const char *name) {
 
 	/* get all sensors from first chip */
 	const sensors_chip_name *chip;
-	const sensors_feature_data *feat;
-	int nr = 0, nr1 = 0, nr2 = 0;
+	const sensors_feature *feat;
+	int nr = 0;
+#if SENSORS_API_VERSION >= 0x400
+	const sensors_subfeature *sub_feat;
+#else
+	int nr1 = 0, nr2 = 0;
+#endif
 	struct sensors_monitor *list = monitor_list;
 	struct sensors_monitor *ret = NULL;
 
 	/* scan the full thing */
+#if SENSORS_API_VERSION >= 0x400
+	while ( (chip = sensors_get_detected_chips(NULL, &nr)) != NULL) {
+		while ((feat = sensors_get_features(chip, &nr)) != NULL) {
+			/* sensor input? */
+			if((sub_feat = sensors_get_subfeature(chip, feat, feat->type << 8)) == NULL) {
+				clog(LOG_DEBUG, "Input subfeature not found for %s, skipping\n", feat->name);
+				continue;
+			}
+#else
 	while ( (chip = sensors_get_detected_chips(&nr)) != NULL) {
-		nr1 = nr2 = 0;
+	  nr1 = nr2 = 0;
 		char *label = NULL;
 		clog(LOG_DEBUG, "Examining chip %s(%d)\n", chip->prefix, nr);
 		while ((feat = sensors_get_all_features(*chip, &nr1, &nr2)) != NULL) {
@@ -164,22 +223,33 @@
 			if (sensors_get_label(*chip, feat->number, &label) != 0)
 				clog(LOG_DEBUG, "Couldn't get label for %s (%s)\n",
 						feat->name, strerror(errno));
+		}
+#endif
 
 			/* is it the one we are looking for? */
-			if (strncmp(feat->name, name, MAX_STRING_LEN) != 0 &&
-					(label && strncmp(label, name, MAX_STRING_LEN) != 0)) {
-				free(label);
+			if (strncmp(feat->name, name, MAX_STRING_LEN) != 0) {
+				continue;
+
+/* libsensors4 does this in sensors_get_features() */
+#if SENSORS_API_VERSION < 0x400
+			/* not ignored? */
+			} else if(sensors_get_ignored(*chip, feat->number) == 0) {
+				clog(LOG_INFO, "feature %s on chip %s set to ignore in %s, skipping\n",
+						feat->name, sensors_get_chip_name(chip), sensors_conffile);
 				continue;
+#endif
 
 			/* cache it */
 			} else if ((ret = calloc(1, sizeof(struct sensors_monitor))) != NULL) {
-				clog(LOG_DEBUG, "Creating new sensors_monitor for %s (%s)\n",
-						label, feat->name);
+				sensors_snprintf_chip_name(ret->chip_string, MAX_STRING_LEN, chip);
+				clog(LOG_DEBUG, "Creating new sensors_monitor for %s on chip %s\n",
+						name, ret->chip_string);
 				ret->chip = chip;
 				ret->feat = feat;
+#if SENSORS_API_VERSION >= 0x400
+				ret->sub_feat = sub_feat;
+#endif
 				ret->next = NULL;
-				/* free the label here, we are not using it anymore */
-				free(label);
 				/* append monitor to the cache list */
 				list = monitor_list;
 				if (list != NULL) {
@@ -214,7 +284,7 @@
 	clog(LOG_DEBUG, "called with %s\n", ev);
 
 	/* try to parse the %[a-zA-Z0-9]:%d-%d format first */
-	if (sscanf(ev, "%32[^:]:%lf-%lf", ret->name, &ret->min, &ret->max) == 3) {
+	if (sscanf(ev, "%32[a-zA-Z0-9]:%lf-%lf", ret->name, &ret->min, &ret->max) == 3) {
 		/* validate feature name */
 		if ((ret->monitor = validate_feature_name(ret->name)) != NULL) {
 			clog(LOG_INFO, "parsed %s %.3f-%.3f\n", ret->name, ret->min, ret->max);
