[PATCh 4/4] Speed up sensors_get_ignored()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Now that sensors_get_ignored() is an internal function, we can change
its prototype to suit our needs better.

* Pass the chip name by address.
* Pass the feature directly rather than its number.
* Switch to a sane convention for the returned value.
* Don't check for errors that can't happen.

---
 lib/access.c |   41 ++++++++++++++++++-----------------------
 1 file changed, 18 insertions(+), 23 deletions(-)

--- lm-sensors-3.orig/lib/access.c	2007-07-22 14:53:41.000000000 +0200
+++ lm-sensors-3/lib/access.c	2007-07-22 15:08:41.000000000 +0200
@@ -193,34 +193,29 @@ sensors_get_label_exit:
 	return 0;
 }
 
-/* Looks up whether a feature should be ignored. Returns <0 on failure,
-   0 if it should be ignored, 1 if it is valid. This function takes
+/* Looks up whether a feature should be ignored. Returns
+   1 if it should be ignored, 0 if not. This function takes
    logical mappings into account. */
-static int sensors_get_ignored(sensors_chip_name name, int feature)
+static int sensors_get_ignored(const sensors_chip_name *name,
+			       const sensors_chip_feature *feature)
 {
 	const sensors_chip *chip;
-	const sensors_chip_feature *featureptr;
-	const sensors_chip_feature *alt_featureptr;
+	const char *main_feature_name;
 	int i;
 
-	if (sensors_chip_name_has_wildcards(name))
-		return -SENSORS_ERR_WILDCARDS;
-	if (!(featureptr = sensors_lookup_feature_nr(&name, feature)))
-		return -SENSORS_ERR_NO_ENTRY;
-	if (featureptr->data.mapping == SENSORS_NO_MAPPING)
-		alt_featureptr = NULL;
-	else if (!(alt_featureptr =
-		   sensors_lookup_feature_nr(&name,
-					     featureptr->data.mapping)))
-		return -SENSORS_ERR_NO_ENTRY;
-	for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));)
+	if (feature->data.mapping == SENSORS_NO_MAPPING)
+		main_feature_name = NULL;
+	else
+		main_feature_name = sensors_lookup_feature_nr(name,
+					feature->data.mapping)->data.name;
+
+	for (chip = NULL; (chip = sensors_for_all_config_chips(*name, chip));)
 		for (i = 0; i < chip->ignores_count; i++)
-			if (!strcasecmp(featureptr->data.name, chip->ignores[i].name) ||
-			    (alt_featureptr &&
-			     !strcasecmp(alt_featureptr->data.name, chip->ignores[i].name)))
-				return 0;
-	/* valid */
-	return 1;
+			if (!strcasecmp(feature->data.name, chip->ignores[i].name) ||
+			    (main_feature_name &&
+			     !strcasecmp(main_feature_name, chip->ignores[i].name)))
+				return 1;
+	return 0;
 }
 
 /* Read the value of a feature of a certain chip. Note that chip should not
@@ -347,7 +342,7 @@ const sensors_feature_data *sensors_get_
 		if (sensors_match_chip(sensors_proc_chips[i].chip, name)) {
 			feature_list = sensors_proc_chips[i].feature;
 			while (feature_list[*nr].data.name
-			    && sensors_get_ignored(name, feature_list[*nr].data.number) != 1)
+			    && sensors_get_ignored(&name, &feature_list[*nr]))
 				(*nr)++;
 			if (!feature_list[*nr].data.name)
 				return NULL;


-- 
Jean Delvare




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux