mirror of
https://github.com/lm-sensors/lm-sensors
synced 2025-09-03 15:55:15 +00:00
sensord: Refactoring of applyToFeature()
This patch cleans up function applyToFeature(). Function applyToFeature() is nearly unreadable. There are some deep levels of indentation and cascades of loops makes code flow difficult to read. I split up this function into three smaller one. This reduces indentation levels and makes code flow clearer. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@5792 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
@@ -137,52 +137,72 @@ static void rrdCheckLabel(const char *rawLabel, int index0)
|
||||
}
|
||||
}
|
||||
|
||||
static int applyToFeatures(FeatureFN fn, void *data)
|
||||
static int _applyToFeatures(FeatureFN fn, void *data,
|
||||
const sensors_chip_name *chip,
|
||||
const ChipDescriptor *desc)
|
||||
{
|
||||
const sensors_chip_name *chip;
|
||||
int i, j, ret = 0, num = 0;
|
||||
int i, ret;
|
||||
const FeatureDescriptor *features = desc->features;
|
||||
const FeatureDescriptor *feature;
|
||||
const char *rawLabel;
|
||||
char *label;
|
||||
|
||||
for (j = 0; (ret == 0) && (j < sensord_args.numChipNames); ++ j) {
|
||||
i = 0;
|
||||
while ((ret == 0) && ((chip = sensors_get_detected_chips(&sensord_args.chipNames[j], &i)) != NULL)) {
|
||||
int index0, chipindex = -1;
|
||||
for (i = 0; i < MAX_RRD_SENSORS && features[i].format; ++i) {
|
||||
feature = features + i;
|
||||
rawLabel = feature->feature->name;
|
||||
|
||||
label = sensors_get_label(chip, feature->feature);
|
||||
if (!label) {
|
||||
sensorLog(LOG_ERR, "Error getting sensor label: %s/%s",
|
||||
chip->prefix, rawLabel);
|
||||
return -1;
|
||||
}
|
||||
|
||||
rrdCheckLabel(rawLabel, i);
|
||||
ret = fn(data, rrdLabels[i], label, feature);
|
||||
free(label);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ChipDescriptor *lookup_known_chips(const sensors_chip_name *chip)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Trick: we compare addresses here. We know it works
|
||||
* because both pointers were returned by
|
||||
* sensors_get_detected_chips(), so they refer to
|
||||
* libsensors internal structures, which do not move.
|
||||
*/
|
||||
for (index0 = 0; knownChips[index0].features; ++index0)
|
||||
if (knownChips[index0].name == chip) {
|
||||
chipindex = index0;
|
||||
break;
|
||||
for (i = 0; knownChips[i].features; i++) {
|
||||
if (knownChips[i].name == chip) {
|
||||
return &knownChips[i];
|
||||
}
|
||||
if (chipindex >= 0) {
|
||||
const ChipDescriptor *descriptor = &knownChips[chipindex];
|
||||
const FeatureDescriptor *features = descriptor->features;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (index0 = 0; (ret == 0) && (num < MAX_RRD_SENSORS) && features[index0].format; ++index0) {
|
||||
const FeatureDescriptor *feature = features + index0;
|
||||
const char *rawLabel = feature->feature->name;
|
||||
char *label = NULL;
|
||||
static int applyToFeatures(FeatureFN fn, void *data)
|
||||
{
|
||||
int i, i_detected, ret;
|
||||
const sensors_chip_name *chip, *chip_arg;
|
||||
ChipDescriptor *desc;
|
||||
|
||||
if (!(label = sensors_get_label(chip, feature->feature))) {
|
||||
sensorLog(LOG_ERR, "Error getting sensor label: %s/%s", chip->prefix, rawLabel);
|
||||
ret = -1;
|
||||
} else {
|
||||
rrdCheckLabel(rawLabel, num);
|
||||
ret = fn(data,
|
||||
rrdLabels[num],
|
||||
label, feature);
|
||||
++ num;
|
||||
}
|
||||
if (label)
|
||||
free(label);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i = 0; i < sensord_args.numChipNames; i++) {
|
||||
chip_arg = &sensord_args.chipNames[i];
|
||||
i_detected = 0;
|
||||
while ((chip = sensors_get_detected_chips(chip_arg,
|
||||
&i_detected))) {
|
||||
desc = lookup_known_chips(chip);
|
||||
if (!desc)
|
||||
continue;
|
||||
|
||||
ret = _applyToFeatures(fn, data, chip, desc);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct ds {
|
||||
|
Reference in New Issue
Block a user