2
0
mirror of https://github.com/lm-sensors/lm-sensors synced 2025-09-02 15:25:38 +00:00

Add a parameter to sensors_get_detected_chips(), to optionally let the

caller select which subset of chips it wants. This is slightly better
size-wise than letting all applications do the filtering by themselves.

This will change the way the command line parameters of "sensors" are
interpreted. Beforehand, the chips were always returned in the order
in which they were listed by the library. Also, each chip could be listed
only once. From now on, the chips will be listed in the order in which
they are passed on the command line, which I think makes more sense. A
side effect is that chips can be listed more than once, if that's what
the user asks for. Not very useful though.

This change makes it possible to make sensors_match_chip() internal
to the library. Filtering the list of chips returned by
sensors_get_detected_chips() was the last known external use for this
function.

This patch looks much bigger than it really is, but the largest part is
really only code reindentation.


git-svn-id: http://lm-sensors.org/svn/lm-sensors/branches/lm-sensors-3.0.0@4701 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Jean Delvare
2007-08-26 08:26:20 +00:00
parent ff4cfd53d5
commit 4d6bec8bb2
6 changed files with 76 additions and 70 deletions

View File

@@ -303,13 +303,17 @@ int sensors_set_value(const sensors_chip_name *name, int feature,
return 0; return 0;
} }
const sensors_chip_name *sensors_get_detected_chips(int *nr) const sensors_chip_name *sensors_get_detected_chips(const sensors_chip_name
*match, int *nr)
{ {
const sensors_chip_name *res; const sensors_chip_name *res;
res = (*nr >= sensors_proc_chips_count ?
NULL : &sensors_proc_chips[*nr].chip); while (*nr < sensors_proc_chips_count) {
(*nr)++; res = &sensors_proc_chips[(*nr)++].chip;
if (!match || sensors_match_chip(res, match))
return res; return res;
}
return NULL;
} }
const char *sensors_get_adapter_name(const sensors_bus_id *bus) const char *sensors_get_adapter_name(const sensors_bus_id *bus)
@@ -480,10 +484,9 @@ int sensors_do_chip_sets(const sensors_chip_name *name)
const sensors_chip_name *found_name; const sensors_chip_name *found_name;
int res = 0; int res = 0;
for (nr = 0; (found_name = sensors_get_detected_chips(&nr));) for (nr = 0; (found_name = sensors_get_detected_chips(name, &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) if (this_res)
res = this_res; res = this_res;
} }
return res; return res;

View File

@@ -44,7 +44,8 @@ libsensors \- publicly accessible functions provided by the sensors library
.B int sensors_set_value(const sensors_chip_name *name, int feature, .B int sensors_set_value(const sensors_chip_name *name, int feature,
\fBdouble value);\fP \fBdouble value);\fP
.B int sensors_do_chip_sets(const sensors_chip_name *name); .B int sensors_do_chip_sets(const sensors_chip_name *name);
.B const sensors_chip_name *sensors_get_detected_chips(int *nr); .B const sensors_chip_name *sensors_get_detected_chips(const sensors_chip_name
\fB*match, int *nr);\fP
.B const sensors_feature_data *sensors_get_all_features .B const sensors_feature_data *sensors_get_all_features
\fB(const sensors_chip_name *name, int *nr);\fP \fB(const sensors_chip_name *name, int *nr);\fP
.B const char *libsensors_version; .B const char *libsensors_version;
@@ -98,10 +99,14 @@ Set the value of a feature of a certain chip. Note that chip should not contain
.br .br
Execute all set statements for this particular chip. The chip may contain wildcards! This function will return 0 on success, and <0 on failure. Execute all set statements for this particular chip. The chip may contain wildcards! This function will return 0 on success, and <0 on failure.
\fBconst sensors_chip_name *sensors_get_detected_chips \fBconst sensors_chip_name *sensors_get_detected_chips(const sensors_chip_name
(int *nr);\fP *match, int *nr);\fP
.br .br
This function returns all detected chips, one by one. To start at the beginning of the list, use 0 for nr; NULL is returned if we are at the end of the list. Do not try to change these chip names, as they point to internal structures! Do not use nr for anything else. This function returns all detected chips that match a given chip name,
one by one. If no chip name is provided, all detected chips are returned.
To start at the beginning of the list, use 0 for nr; NULL is returned if
we are at the end of the list. Do not try to change these chip names, as
they point to internal structures!
This structure is used when you want to get all features of a specific chip. This structure is used when you want to get all features of a specific chip.
.br .br

View File

@@ -109,11 +109,13 @@ int sensors_set_value(const sensors_chip_name *name, int feature,
wildcards! This function will return 0 on success, and <0 on failure. */ wildcards! This function will return 0 on success, and <0 on failure. */
int sensors_do_chip_sets(const sensors_chip_name *name); int sensors_do_chip_sets(const sensors_chip_name *name);
/* This function returns all detected chips, one by one. To start at the /* This function returns all detected chips that match a given chip name,
beginning of the list, use 0 for nr; NULL is returned if we are one by one. If no chip name is provided, all detected chips are returned.
at the end of the list. Do not try to change these chip names, as To start at the beginning of the list, use 0 for nr; NULL is returned if
they point to internal structures! Do not use nr for anything else. */ we are at the end of the list. Do not try to change these chip names, as
const sensors_chip_name *sensors_get_detected_chips(int *nr); they point to internal structures! */
const sensors_chip_name *sensors_get_detected_chips(const sensors_chip_name
*match, int *nr);
/* These defines are used in the mode field of sensors_feature_data */ /* These defines are used in the mode field of sensors_feature_data */
#define SENSORS_MODE_R 1 #define SENSORS_MODE_R 1

View File

@@ -139,9 +139,8 @@ applyToFeatures
const sensors_chip_name *chip; const sensors_chip_name *chip;
int i = 0, j, ret = 0, num = 0; int i = 0, j, ret = 0, num = 0;
while ((ret == 0) && ((chip = sensors_get_detected_chips (&i)) != NULL)) {
for (j = 0; (ret == 0) && (j < numChipNames); ++ j) { for (j = 0; (ret == 0) && (j < numChipNames); ++ j) {
if (sensors_match_chip (chip, &chipNames[j])) { while ((ret == 0) && ((chip = sensors_get_detected_chips (&chipNames[j], &i)) != NULL)) {
int index0, subindex, chipindex = -1; int index0, subindex, chipindex = -1;
for (index0 = 0; knownChips[index0]; ++ index0) for (index0 = 0; knownChips[index0]; ++ index0)
for (subindex = 0; knownChips[index0]->names[subindex]; ++ subindex) for (subindex = 0; knownChips[index0]->names[subindex]; ++ subindex)
@@ -177,7 +176,6 @@ applyToFeatures
} }
} }
} }
}
return ret; return ret;
} }

View File

@@ -238,13 +238,11 @@ doChips
const sensors_chip_name *chip; const sensors_chip_name *chip;
int i = 0, j, ret = 0; int i = 0, j, ret = 0;
while ((ret == 0) && ((chip = sensors_get_detected_chips (&i)) != NULL)) {
for (j = 0; (ret == 0) && (j < numChipNames); ++ j) { for (j = 0; (ret == 0) && (j < numChipNames); ++ j) {
if (sensors_match_chip (chip, &chipNames[j])) { while ((ret == 0) && ((chip = sensors_get_detected_chips (&chipNames[j], &i)) != NULL)) {
ret = doChip (chip, action); ret = doChip (chip, action);
} }
} }
}
return ret; return ret;
} }

View File

@@ -251,18 +251,18 @@ int do_the_real_work(int *error)
int cnt = 0; int cnt = 0;
*error = 0; *error = 0;
for (chip_nr = 0; (chip = sensors_get_detected_chips(&chip_nr));) for (i = 0; i < chips_count; i++) {
for(i = 0; i < chips_count; i++) chip_nr = 0;
if (sensors_match_chip(chip, &chips[i])) { while ((chip = sensors_get_detected_chips(&chips[i], &chip_nr))) {
if(do_sets) { if (do_sets) {
if (do_a_set(chip)) if (do_a_set(chip))
*error = 1; *error = 1;
} else } else
do_a_print(chip); do_a_print(chip);
i = chips_count;
cnt++; cnt++;
} }
return(cnt); }
return cnt;
} }
/* returns 1 on error */ /* returns 1 on error */