Index: /lm-sensors/branches/lm-sensors-3.0.0/lib/access.c
===================================================================
--- /lm-sensors/branches/lm-sensors-3.0.0/lib/access.c	(revision 4838)
+++ /lm-sensors/branches/lm-sensors-3.0.0/lib/access.c	(revision 4839)
@@ -227,6 +227,4 @@
 {
 	const sensors_subfeature *subfeature;
-	const sensors_feature *feature;
-	const sensors_chip *chip;
 	const sensors_expr *expr = NULL;
 	double val;
@@ -237,21 +235,26 @@
 	if (!(subfeature = sensors_lookup_subfeature_nr(name, subfeat_nr)))
 		return -SENSORS_ERR_NO_ENTRY;
-
-	if (subfeature->flags & SENSORS_COMPUTE_MAPPING)
+	if (!(subfeature->flags & SENSORS_MODE_R))
+		return -SENSORS_ERR_ACCESS_R;
+
+	/* Apply compute statement if it exists */
+	if (subfeature->flags & SENSORS_COMPUTE_MAPPING) {
+		const sensors_feature *feature;
+		const sensors_chip *chip;
+
 		feature = sensors_lookup_feature_nr(name,
 					subfeature->mapping);
-	else
-		feature = NULL;
-
-	if (!(subfeature->flags & SENSORS_MODE_R))
-		return -SENSORS_ERR_ACCESS_R;
-	for (chip = NULL;
-	     !expr && (chip = sensors_for_all_config_chips(name, chip));)
-		for (i = 0; !expr && (i < chip->computes_count); i++) {
-			if (feature && !strcmp(feature->name,
-					       chip->computes[i].name)) {
-				expr = chip->computes[i].from_proc;
+
+		chip = NULL;
+		while ((chip = sensors_for_all_config_chips(name, chip)))
+			for (i = 0; i < chip->computes_count; i++) {
+				if (!strcmp(feature->name,
+					    chip->computes[i].name)) {
+					expr = chip->computes[i].from_proc;
+					break;
+				}
 			}
-		}
+	}
+
 	if (sensors_read_sysfs_attr(name, subfeat_nr, &val))
 		return -SENSORS_ERR_PROC;
@@ -270,6 +273,4 @@
 {
 	const sensors_subfeature *subfeature;
-	const sensors_feature *feature;
-	const sensors_chip *chip;
 	const sensors_expr *expr = NULL;
 	int i, res;
@@ -280,21 +281,25 @@
 	if (!(subfeature = sensors_lookup_subfeature_nr(name, subfeat_nr)))
 		return -SENSORS_ERR_NO_ENTRY;
-
-	if (subfeature->flags & SENSORS_COMPUTE_MAPPING)
+	if (!(subfeature->flags & SENSORS_MODE_W))
+		return -SENSORS_ERR_ACCESS_W;
+
+	/* Apply compute statement if it exists */
+	if (subfeature->flags & SENSORS_COMPUTE_MAPPING) {
+		const sensors_feature *feature;
+		const sensors_chip *chip;
+
 		feature = sensors_lookup_feature_nr(name,
 					subfeature->mapping);
-	else
-		feature = NULL;
-
-	if (!(subfeature->flags & SENSORS_MODE_W))
-		return -SENSORS_ERR_ACCESS_W;
-	for (chip = NULL;
-	     !expr && (chip = sensors_for_all_config_chips(name, chip));)
-		for (i = 0; !expr && (i < chip->computes_count); i++) {
-			if (feature && !strcmp(feature->name,
-					       chip->computes[i].name)) {
-				expr = chip->computes[i].to_proc;
+
+		chip = NULL;
+		while ((chip = sensors_for_all_config_chips(name, chip)))
+			for (i = 0; i < chip->computes_count; i++) {
+				if (!strcmp(feature->name,
+					    chip->computes[i].name)) {
+					expr = chip->computes[i].to_proc;
+					break;
+				}
 			}
-		}
+	}
 
 	to_write = value;
