Pass the structures by reference inside libsensors. Again a small

performance gain, and this makes the internal code consistent with the
public functions.


git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-3.0.0@4667 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Jean Delvare committed 2007-08-13 20:16:42 +00:00
1 parent 3bab00fff9
commit d9ec11a6c7
4 files changed
+90 -85

No files matched your search

+29 -28
View File
@@ -27,7 +27,7 @@
#include "sysfs.h"
#include "general.h"
static int sensors_eval_expr(sensors_chip_name chipname,
static int sensors_eval_expr(const sensors_chip_name *name,
const sensors_expr *expr,
double val, double *result);
@@ -74,7 +74,7 @@ int sensors_match_chip(const sensors_chip_name *chip1,
Note that this visits the list of chips from last to first. Usually,
you want the match that was latest in the config file. */
static sensors_chip *
sensors_for_all_config_chips(sensors_chip_name chip_name,
sensors_for_all_config_chips(const sensors_chip_name *name,
const sensors_chip *last)
{
int nr, i;
@@ -85,7 +85,7 @@ sensors_for_all_config_chips(sensors_chip_name chip_name,
chips = sensors_config_chips[nr].chips;
for (i = 0; i < chips.fits_count; i++) {
if (sensors_match_chip(&chips.fits[i], &chip_name))
if (sensors_match_chip(&chips.fits[i], name))
return sensors_config_chips + nr;
}
}
@@ -133,12 +133,12 @@ sensors_lookup_feature_name(const sensors_chip_name *chip, const char *feature)
/* Check whether the chip name is an 'absolute' name, which can only match
one chip, or whether it has wildcards. Returns 0 if it is absolute, 1
if there are wildcards. */
static int sensors_chip_name_has_wildcards(sensors_chip_name chip)
static int sensors_chip_name_has_wildcards(const sensors_chip_name *chip)
{
if ((chip.prefix == SENSORS_CHIP_NAME_PREFIX_ANY) ||
(chip.bus == SENSORS_CHIP_NAME_BUS_ANY) ||
(chip.bus == SENSORS_CHIP_NAME_BUS_ANY_I2C) ||
(chip.addr == SENSORS_CHIP_NAME_ADDR_ANY))
if ((chip->prefix == SENSORS_CHIP_NAME_PREFIX_ANY) ||
(chip->bus == SENSORS_CHIP_NAME_BUS_ANY) ||
(chip->bus == SENSORS_CHIP_NAME_BUS_ANY_I2C) ||
(chip->addr == SENSORS_CHIP_NAME_ADDR_ANY))
return 1;
else
return 0;
@@ -157,12 +157,12 @@ int sensors_get_label(const sensors_chip_name *name, int feature, char **result)
int i;
*result = NULL;
if (sensors_chip_name_has_wildcards(*name))
if (sensors_chip_name_has_wildcards(name))
return -SENSORS_ERR_WILDCARDS;
if (!(featureptr = sensors_lookup_feature_nr(name, feature)))
return -SENSORS_ERR_NO_ENTRY;
for (chip = NULL; (chip = sensors_for_all_config_chips(*name, chip));)
for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));)
for (i = 0; i < chip->labels_count; i++)
if (!strcasecmp(featureptr->data.name,chip->labels[i].name)){
*result = strdup(chip->labels[i].value);
@@ -210,7 +210,7 @@ static int sensors_get_ignored(const sensors_chip_name *name,
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 (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));)
for (i = 0; i < chip->ignores_count; i++)
if (!strcasecmp(feature->data.name, chip->ignores[i].name) ||
(main_feature_name &&
@@ -233,7 +233,7 @@ int sensors_get_feature(const sensors_chip_name *name, int feature,
int res, i;
int final_expr = 0;
if (sensors_chip_name_has_wildcards(*name))
if (sensors_chip_name_has_wildcards(name))
return -SENSORS_ERR_WILDCARDS;
if (!(main_feature = sensors_lookup_feature_nr(name, feature)))
return -SENSORS_ERR_NO_ENTRY;
@@ -245,7 +245,7 @@ int sensors_get_feature(const sensors_chip_name *name, int feature,
if (!(main_feature->data.mode & SENSORS_MODE_R))
return -SENSORS_ERR_ACCESS_R;
for (chip = NULL;
!expr && (chip = sensors_for_all_config_chips(*name, chip));)
!expr && (chip = sensors_for_all_config_chips(name, chip));)
for (i = 0; !final_expr && (i < chip->computes_count); i++) {
if (!strcasecmp(main_feature->data.name, chip->computes[i].name)) {
expr = chip->computes[i].from_proc;
@@ -255,11 +255,11 @@ int sensors_get_feature(const sensors_chip_name *name, int feature,
expr = chip->computes[i].from_proc;
}
}
if (sensors_read_sysfs_attr(*name, feature, &val))
if (sensors_read_sysfs_attr(name, feature, &val))
return -SENSORS_ERR_PROC;
if (!expr)
*result = val;
else if ((res = sensors_eval_expr(*name, expr, val, result)))
else if ((res = sensors_eval_expr(name, expr, val, result)))
return res;
return 0;
}
@@ -278,7 +278,7 @@ int sensors_set_feature(const sensors_chip_name *name, int feature,
int final_expr = 0;
double to_write;
if (sensors_chip_name_has_wildcards(*name))
if (sensors_chip_name_has_wildcards(name))
return -SENSORS_ERR_WILDCARDS;
if (!(main_feature = sensors_lookup_feature_nr(name, feature)))
return -SENSORS_ERR_NO_ENTRY;
@@ -290,7 +290,7 @@ int sensors_set_feature(const sensors_chip_name *name, int feature,
if (!(main_feature->data.mode & SENSORS_MODE_W))
return -SENSORS_ERR_ACCESS_W;
for (chip = NULL;
!expr && (chip = sensors_for_all_config_chips(*name, chip));)
!expr && (chip = sensors_for_all_config_chips(name, chip));)
for (i = 0; !final_expr && (i < chip->computes_count); i++)
if (!strcasecmp(main_feature->data.name, chip->computes[i].name)) {
expr = chip->computes->to_proc;
@@ -302,9 +302,9 @@ int sensors_set_feature(const sensors_chip_name *name, int feature,
to_write = value;
if (expr)
if ((res = sensors_eval_expr(*name, expr, value, &to_write)))
if ((res = sensors_eval_expr(name, expr, value, &to_write)))
return res;
if (sensors_write_sysfs_attr(*name, feature, to_write))
if (sensors_write_sysfs_attr(name, feature, to_write))
return -SENSORS_ERR_PROC;
return 0;
}
@@ -355,7 +355,8 @@ const sensors_feature_data *sensors_get_all_features(const sensors_chip_name *na
}
/* Evaluate an expression */
int sensors_eval_expr(sensors_chip_name chipname, const sensors_expr * expr,
int sensors_eval_expr(const sensors_chip_name *name,
const sensors_expr *expr,
double val, double *result)
{
double res1, res2;
@@ -371,17 +372,17 @@ int sensors_eval_expr(sensors_chip_name chipname, const sensors_expr * expr,
return 0;
}
if (expr->kind == sensors_kind_var) {
if (!(feature = sensors_lookup_feature_name(&chipname,
if (!(feature = sensors_lookup_feature_name(name,
expr->data.var)))
return SENSORS_ERR_NO_ENTRY;
if (!(res = sensors_get_feature(&chipname, feature->data.number, result)))
if (!(res = sensors_get_feature(name, feature->data.number, result)))
return res;
return 0;
}
if ((res = sensors_eval_expr(chipname, expr->data.subexpr.sub1, val, &res1)))
if ((res = sensors_eval_expr(name, expr->data.subexpr.sub1, val, &res1)))
return res;
if (expr->data.subexpr.sub2 &&
(res = sensors_eval_expr(chipname, expr->data.subexpr.sub2, val, &res2)))
(res = sensors_eval_expr(name, expr->data.subexpr.sub2, val, &res2)))
return res;
switch (expr->data.subexpr.op) {
case sensors_add:
@@ -416,7 +417,7 @@ int sensors_eval_expr(sensors_chip_name chipname, const sensors_expr * expr,
/* Execute all set statements for this particular chip. The chip may not
contain wildcards! This function will return 0 on success, and <0 on
failure. */
static int sensors_do_this_chip_sets(sensors_chip_name name)
static int sensors_do_this_chip_sets(const sensors_chip_name *name)
{
sensors_chip *chip;
double value;
@@ -430,7 +431,7 @@ static int sensors_do_this_chip_sets(sensors_chip_name name)
for (chip = NULL; (chip = sensors_for_all_config_chips(name, chip));)
for (i = 0; i < chip->sets_count; i++) {
feature = sensors_lookup_feature_name(&name,
feature = sensors_lookup_feature_name(name,
chip->sets[i].name);
if (!feature) {
sensors_parse_error("Unknown feature name",
@@ -458,7 +459,7 @@ static int sensors_do_this_chip_sets(sensors_chip_name name)
err = res;
continue;
}
if ((res = sensors_set_feature(&name, feature_nr, value))) {
if ((res = sensors_set_feature(name, feature_nr, value))) {
sensors_parse_error("Failed to set feature",
chip->sets[i].lineno);
err = res;
@@ -479,7 +480,7 @@ int sensors_do_chip_sets(const sensors_chip_name *name)
for (nr = 0; (found_name = sensors_get_detected_chips(&nr));)
if (sensors_match_chip(name, found_name)) {
this_res = sensors_do_this_chip_sets(*found_name);
this_res = sensors_do_this_chip_sets(found_name);
if (!res)
res = this_res;
}
+49 -49
View File
@@ -27,14 +27,14 @@
#include "sysfs.h"
#include "scanner.h"
static void free_chip_name(sensors_chip_name name);
static void free_chip_name(sensors_chip_name *name);
static void free_chip_features(sensors_chip_feature *features);
static void free_bus(sensors_bus bus);
static void free_chip(sensors_chip chip);
static void free_label(sensors_label label);
static void free_set(sensors_set set);
static void free_compute(sensors_compute compute);
static void free_ignore(sensors_ignore ignore);
static void free_bus(sensors_bus *bus);
static void free_chip(sensors_chip *chip);
static void free_label(sensors_label *label);
static void free_set(sensors_set *set);
static void free_compute(sensors_compute *compute);
static void free_ignore(sensors_ignore *ignore);
static void free_expr(sensors_expr *expr);
int sensors_init(FILE *input)
@@ -61,7 +61,7 @@ void sensors_cleanup(void)
sensors_scanner_exit();
for (i = 0; i < sensors_proc_chips_count; i++) {
free_chip_name(sensors_proc_chips[i].chip);
free_chip_name(&sensors_proc_chips[i].chip);
free_chip_features(sensors_proc_chips[i].feature);
}
free(sensors_proc_chips);
@@ -69,28 +69,28 @@ void sensors_cleanup(void)
sensors_proc_chips_count = sensors_proc_chips_max = 0;
for (i = 0; i < sensors_config_busses_count; i++)
free_bus(sensors_config_busses[i]);
free_bus(&sensors_config_busses[i]);
free(sensors_config_busses);
sensors_config_busses = NULL;
sensors_config_busses_count = sensors_config_busses_max = 0;
for (i = 0; i < sensors_config_chips_count; i++)
free_chip(sensors_config_chips[i]);
free_chip(&sensors_config_chips[i]);
free(sensors_config_chips);
sensors_config_chips = NULL;
sensors_config_chips_count = sensors_config_chips_max = 0;
for (i = 0; i < sensors_proc_bus_count; i++)
free_bus(sensors_proc_bus[i]);
free_bus(&sensors_proc_bus[i]);
free(sensors_proc_bus);
sensors_proc_bus = NULL;
sensors_proc_bus_count = sensors_proc_bus_max = 0;
}
void free_chip_name(sensors_chip_name name)
void free_chip_name(sensors_chip_name *name)
{
free(name.prefix);
free(name.busname);
free(name->prefix);
free(name->busname);
}
void free_chip_features(sensors_chip_feature *features)
@@ -102,63 +102,63 @@ void free_chip_features(sensors_chip_feature *features)
free(features);
}
void free_bus(sensors_bus bus)
void free_bus(sensors_bus *bus)
{
free(bus.adapter);
free(bus->adapter);
}
void free_chip(sensors_chip chip)
void free_chip(sensors_chip *chip)
{
int i;
for (i = 0; i < chip.chips.fits_count; i++)
free_chip_name(chip.chips.fits[i]);
free(chip.chips.fits);
chip.chips.fits_count = chip.chips.fits_max = 0;
for (i = 0; i < chip->chips.fits_count; i++)
free_chip_name(&chip->chips.fits[i]);
free(chip->chips.fits);
chip->chips.fits_count = chip->chips.fits_max = 0;
for (i = 0; i < chip.labels_count; i++)
free_label(chip.labels[i]);
free(chip.labels);
chip.labels_count = chip.labels_max = 0;
for (i = 0; i < chip->labels_count; i++)
free_label(&chip->labels[i]);
free(chip->labels);
chip->labels_count = chip->labels_max = 0;
for (i = 0; i < chip.sets_count; i++)
free_set(chip.sets[i]);
free(chip.sets);
chip.sets_count = chip.sets_max = 0;
for (i = 0; i < chip->sets_count; i++)
free_set(&chip->sets[i]);
free(chip->sets);
chip->sets_count = chip->sets_max = 0;
for (i = 0; i < chip.computes_count; i++)
free_compute(chip.computes[i]);
free(chip.computes);
chip.computes_count = chip.computes_max = 0;
for (i = 0; i < chip->computes_count; i++)
free_compute(&chip->computes[i]);
free(chip->computes);
chip->computes_count = chip->computes_max = 0;
for (i = 0; i < chip.ignores_count; i++)
free_ignore(chip.ignores[i]);
free(chip.ignores);
chip.ignores_count = chip.ignores_max = 0;
for (i = 0; i < chip->ignores_count; i++)
free_ignore(&chip->ignores[i]);
free(chip->ignores);
chip->ignores_count = chip->ignores_max = 0;
}
void free_label(sensors_label label)
void free_label(sensors_label *label)
{
free(label.name);
free(label.value);
free(label->name);
free(label->value);
}
void free_set(sensors_set set)
void free_set(sensors_set *set)
{
free(set.name);
free_expr(set.value);
free(set->name);
free_expr(set->value);
}
void free_compute(sensors_compute compute)
void free_compute(sensors_compute *compute)
{
free(compute.name);
free_expr(compute.from_proc);
free_expr(compute.to_proc);
free(compute->name);
free_expr(compute->from_proc);
free_expr(compute->to_proc);
}
void free_ignore(sensors_ignore ignore)
void free_ignore(sensors_ignore *ignore)
{
free(ignore.name);
free(ignore->name);
}
void free_expr(sensors_expr *expr)
+8 -6
View File
@@ -396,7 +396,8 @@ exit0:
return ret;
}
int sensors_read_sysfs_attr(sensors_chip_name name, int feature, double *value)
int sensors_read_sysfs_attr(const sensors_chip_name *name, int feature,
double *value)
{
const sensors_chip_feature *the_feature;
int mag;
@@ -406,7 +407,7 @@ int sensors_read_sysfs_attr(sensors_chip_name name, int feature, double *value)
char check;
const char *suffix = "";
if (!(the_feature = sensors_lookup_feature_nr(&name, feature)))
if (!(the_feature = sensors_lookup_feature_nr(name, feature)))
return -SENSORS_ERR_NO_ENTRY;
/* REVISIT: this is a ugly hack */
@@ -415,7 +416,7 @@ int sensors_read_sysfs_attr(sensors_chip_name name, int feature, double *value)
|| sscanf(the_feature->data.name, "temp%d%c", &dummy, &check) == 1)
suffix = "_input";
snprintf(n, NAME_MAX, "%s/%s%s", name.busname, the_feature->data.name,
snprintf(n, NAME_MAX, "%s/%s%s", name->busname, the_feature->data.name,
suffix);
if ((f = fopen(n, "r"))) {
int res = fscanf(f, "%lf", value);
@@ -430,7 +431,8 @@ int sensors_read_sysfs_attr(sensors_chip_name name, int feature, double *value)
return 0;
}
int sensors_write_sysfs_attr(sensors_chip_name name, int feature, double value)
int sensors_write_sysfs_attr(const sensors_chip_name *name, int feature,
double value)
{
const sensors_chip_feature *the_feature;
int mag;
@@ -440,7 +442,7 @@ int sensors_write_sysfs_attr(sensors_chip_name name, int feature, double value)
char check;
const char *suffix = "";
if (!(the_feature = sensors_lookup_feature_nr(&name, feature)))
if (!(the_feature = sensors_lookup_feature_nr(name, feature)))
return -SENSORS_ERR_NO_ENTRY;
/* REVISIT: this is a ugly hack */
@@ -449,7 +451,7 @@ int sensors_write_sysfs_attr(sensors_chip_name name, int feature, double value)
|| sscanf(the_feature->data.name, "temp%d%c", &dummy, &check) == 1)
suffix = "_input";
snprintf(n, NAME_MAX, "%s/%s%s", name.busname, the_feature->data.name,
snprintf(n, NAME_MAX, "%s/%s%s", name->busname, the_feature->data.name,
suffix);
if ((f = fopen(n, "w"))) {
for (mag = the_feature->scaling; mag > 0; mag --)
+4 -2
View File
@@ -29,9 +29,11 @@ extern int sensors_read_sysfs_chips(void);
extern int sensors_read_sysfs_bus(void);
/* Read a value out of a sysfs attribute file */
int sensors_read_sysfs_attr(sensors_chip_name name, int feature, double *value);
int sensors_read_sysfs_attr(const sensors_chip_name *name, int feature,
double *value);
/* Write a value to a sysfs attribute file */
int sensors_write_sysfs_attr(sensors_chip_name name, int feature, double value);
int sensors_write_sysfs_attr(const sensors_chip_name *name, int feature,
double value);
#endif /* !SENSORS_LIB_SYSFS_H */