From d9ec11a6c7656d2930d9b961bc951a7c6cd34b31 Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Mon, 13 Aug 2007 20:16:42 +0000 Subject: [PATCH] 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 --- lib/access.c | 57 +++++++++++++++--------------- lib/init.c | 98 ++++++++++++++++++++++++++-------------------------- lib/sysfs.c | 14 ++++---- lib/sysfs.h | 6 ++-- 4 files changed, 90 insertions(+), 85 deletions(-) diff --git a/lib/access.c b/lib/access.c index 59603af9..fa5544a3 100644 --- a/lib/access.c +++ b/lib/access.c @@ -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; } diff --git a/lib/init.c b/lib/init.c index 856ba232..ba0b46d5 100644 --- a/lib/init.c +++ b/lib/init.c @@ -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) diff --git a/lib/sysfs.c b/lib/sysfs.c index cf805bf8..285b671c 100644 --- a/lib/sysfs.c +++ b/lib/sysfs.c @@ -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 --) diff --git a/lib/sysfs.h b/lib/sysfs.h index d9660dc3..6aaa3508 100644 --- a/lib/sysfs.h +++ b/lib/sysfs.h @@ -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 */