diff options
author | Jean Delvare <khali@linux-fr.org> | 2007-09-23 12:23:38 +0000 |
---|---|---|
committer | Jean Delvare <khali@linux-fr.org> | 2007-09-23 12:23:38 +0000 |
commit | e55b84392b3e61d15ab46ec3ffa4fa98663b89a9 (patch) | |
tree | d2dad2c7d601a329ad746b26f59bb04238759cd1 /lib/access.c | |
parent | 36f5b0dc4d2ddd3685918f6f8d61778b11dc0410 (diff) | |
download | lm-sensors-git-e55b84392b3e61d15ab46ec3ffa4fa98663b89a9.tar.gz |
Use sensors_lookup_chip() to speed up sensors_lookup_subfeature_name()
as well.
git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-3.0.0@4844 7894878c-1315-0410-8ee3-d5d059ff63e0
Diffstat (limited to 'lib/access.c')
-rw-r--r-- | lib/access.c | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/lib/access.c b/lib/access.c index eab42ca1..349775d4 100644 --- a/lib/access.c +++ b/lib/access.c @@ -28,7 +28,7 @@ #include "sysfs.h" #include "general.h" -static int sensors_eval_expr(const sensors_chip_name *name, +static int sensors_eval_expr(const sensors_chip_features *chip_features, const sensors_expr *expr, double val, double *result); @@ -126,23 +126,18 @@ sensors_lookup_feature_nr(const sensors_chip_features *chip, int feat_nr) return chip->feature + feat_nr; } -/* Look up a resource in the intern chip list, and return a pointer to it. +/* Look up a subfeature by name, and return a pointer to it. Do not modify the struct the return value points to! Returns NULL if not found.*/ static const sensors_subfeature * -sensors_lookup_subfeature_name(const sensors_chip_name *chip, +sensors_lookup_subfeature_name(const sensors_chip_features *chip, const char *name) { - int i, j; - const sensors_subfeature *subfeatures; + int j; - for (i = 0; i < sensors_proc_chips_count; i++) - if (sensors_match_chip(&sensors_proc_chips[i].chip, chip)) { - subfeatures = sensors_proc_chips[i].subfeature; - for (j = 0; j < sensors_proc_chips[i].subfeature_count; j++) - if (!strcmp(subfeatures[j].name, name)) - return subfeatures + j; - } + for (j = 0; j < chip->subfeature_count; j++) + if (!strcmp(chip->subfeature[j].name, name)) + return chip->subfeature + j; return NULL; } @@ -267,7 +262,7 @@ int sensors_get_value(const sensors_chip_name *name, int subfeat_nr, return -SENSORS_ERR_PROC; if (!expr) *result = val; - else if ((res = sensors_eval_expr(name, expr, val, result))) + else if ((res = sensors_eval_expr(chip_features, expr, val, result))) return res; return 0; } @@ -315,7 +310,8 @@ int sensors_set_value(const sensors_chip_name *name, int subfeat_nr, to_write = value; if (expr) - if ((res = sensors_eval_expr(name, expr, value, &to_write))) + if ((res = sensors_eval_expr(chip_features, expr, + value, &to_write))) return res; if (sensors_write_sysfs_attr(name, subfeature, to_write)) return -SENSORS_ERR_PROC; @@ -402,7 +398,7 @@ sensors_get_all_subfeatures(const sensors_chip_name *name, } /* Evaluate an expression */ -int sensors_eval_expr(const sensors_chip_name *name, +int sensors_eval_expr(const sensors_chip_features *chip_features, const sensors_expr *expr, double val, double *result) { @@ -419,18 +415,20 @@ int sensors_eval_expr(const sensors_chip_name *name, return 0; } if (expr->kind == sensors_kind_var) { - if (!(subfeature = sensors_lookup_subfeature_name(name, + if (!(subfeature = sensors_lookup_subfeature_name(chip_features, expr->data.var))) return SENSORS_ERR_NO_ENTRY; - if (!(res = sensors_get_value(name, subfeature->number, - result))) + if (!(res = sensors_get_value(&chip_features->chip, + subfeature->number, result))) return res; return 0; } - if ((res = sensors_eval_expr(name, expr->data.subexpr.sub1, val, &res1))) + if ((res = sensors_eval_expr(chip_features, expr->data.subexpr.sub1, + val, &res1))) return res; if (expr->data.subexpr.sub2 && - (res = sensors_eval_expr(name, expr->data.subexpr.sub2, val, &res2))) + (res = sensors_eval_expr(chip_features, expr->data.subexpr.sub2, + val, &res2))) return res; switch (expr->data.subexpr.op) { case sensors_add: @@ -467,15 +465,18 @@ int sensors_eval_expr(const sensors_chip_name *name, failure. */ static int sensors_do_this_chip_sets(const sensors_chip_name *name) { + const sensors_chip_features *chip_features; sensors_chip *chip; double value; int i; int err = 0, res; const sensors_subfeature *subfeature; + chip_features = sensors_lookup_chip(name); /* Can't fail */ + for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));) for (i = 0; i < chip->sets_count; i++) { - subfeature = sensors_lookup_subfeature_name(name, + subfeature = sensors_lookup_subfeature_name(chip_features, chip->sets[i].name); if (!subfeature) { sensors_parse_error("Unknown feature name", @@ -484,8 +485,9 @@ static int sensors_do_this_chip_sets(const sensors_chip_name *name) continue; } - res = sensors_eval_expr(name, chip->sets[i].value, 0, - &value); + res = sensors_eval_expr(chip_features, + chip->sets[i].value, 0, + &value); if (res) { sensors_parse_error("Error parsing expression", chip->sets[i].lineno); |