[lm-sensors] 3.1.2 sensord duplicate RRD name problem
Jean Delvare
khali at linux-fr.org
Thu May 6 18:12:52 CEST 2010
On Thu, 6 May 2010 14:20:56 +0200, Jean Delvare wrote:
> I have a patch ready, I'll give it some testing to make sure I got it
> right, and then I'll post it here.
Andre, can you please comment on the patch below? Sergey, any chance
you could test it? It works for me on two different machines, but I may
not have covered all possible cases.
---
prog/sensord/rrd.c | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
--- lm-sensors.orig/prog/sensord/rrd.c 2009-11-05 10:18:11.000000000 +0100
+++ lm-sensors/prog/sensord/rrd.c 2010-05-06 17:54:06.000000000 +0200
@@ -137,9 +137,11 @@ static void rrdCheckLabel(const char *ra
}
}
+/* Returns the number of features processed, or -1 on error */
static int _applyToFeatures(FeatureFN fn, void *data,
const sensors_chip_name *chip,
- const ChipDescriptor *desc)
+ const ChipDescriptor *desc,
+ int labelOffset)
{
int i;
const FeatureDescriptor *features = desc->features;
@@ -147,7 +149,7 @@ static int _applyToFeatures(FeatureFN fn
const char *rawLabel;
char *label;
- for (i = 0; i < MAX_RRD_SENSORS && features[i].format; ++i) {
+ for (i = 0; labelOffset + i < MAX_RRD_SENSORS && features[i].format; ++i) {
feature = features + i;
rawLabel = feature->feature->name;
@@ -158,11 +160,11 @@ static int _applyToFeatures(FeatureFN fn
return -1;
}
- rrdCheckLabel(rawLabel, i);
- fn(data, rrdLabels[i], label, feature);
+ rrdCheckLabel(rawLabel, labelOffset + i);
+ fn(data, rrdLabels[labelOffset + i], label, feature);
free(label);
}
- return 0;
+ return i;
}
static ChipDescriptor *lookup_known_chips(const sensors_chip_name *chip)
@@ -184,7 +186,7 @@ static ChipDescriptor *lookup_known_chip
static int applyToFeatures(FeatureFN fn, void *data)
{
- int i, i_detected, ret;
+ int i, i_detected, ret, labelOffset = 0;
const sensors_chip_name *chip, *chip_arg;
ChipDescriptor *desc;
@@ -197,9 +199,10 @@ static int applyToFeatures(FeatureFN fn,
if (!desc)
continue;
- ret = _applyToFeatures(fn, data, chip, desc);
- if (ret)
+ ret = _applyToFeatures(fn, data, chip, desc, labelOffset);
+ if (ret < 0)
return ret;
+ labelOffset += ret;
}
}
return 0;
--
Jean Delvare
More information about the lm-sensors
mailing list