funkey
Level-2
- Beiträge
- 361
- Reaktionspunkte
- 109
-> Hier kostenlos registrieren
Hallo. Ich habe eine Frage bezüglich Libnodave und zwar verwende ich die Funktion daveWriteS5Bytes() und frage mich ob das ein Bug ist.
Hier der betreffende Code:
Wie man sehen kann wird die daveS5AreaInfo-Struktur 'ai' nur gefüllt, wenn der Bereich ein Datenbaustein ist. Weiter unten wird aber 'ai.len' zur Überprüfung des Bereiches verwendet, wo dann die Meldung 'Requested data is out-of-range' kommt. Hat da jemand schon einen Fix dafür?
Gruß
funkey
Hier der betreffende Code:
Code:
int DECL2 daveWriteS5Bytes(daveConnection * dc, uc area, uc BlockN, int offset, int count, void * buf)
{
int res,datastart;
daveS5AreaInfo ai;
uc b1[daveMaxRawLen];
// if (_daveIsS5DBlockArea(area)==0) {
if (area==daveDB) {
// LOG1("_daveIsS5DBlockArea\n");
res=_daveReadS5BlockAddress(dc,area,BlockN,&ai);
if (res<0) {
LOG2("%s *** Error in WriteS5Bytes.BlockAddr request.\n", dc->iface->name);
return res-50;
}
datastart=ai.address;
} else {
switch (area) {
case daveRawMemoryS5: datastart=0; break;
case daveInputs: datastart=dc->cache->PAE; break;
case daveOutputs: datastart=dc->cache->PAA; break;
case daveFlags: datastart=dc->cache->flags; break;
case daveTimer: datastart=dc->cache->timers; break;
case daveCounter: datastart=dc->cache->counters; break;
case daveSysDataS5: datastart=dc->cache->systemData; break;
default:
LOG2("%s *** Unknown area in WriteS5Bytes request.\n", dc->iface->name);
return -1;
}
}
if ((count>daveMaxRawLen)||(offset+count>ai.len)) {
LOG2("%s writeS5Bytes *** Requested data is out-of-range.\n", dc->iface->name);
return -1;
}
....
}
Wie man sehen kann wird die daveS5AreaInfo-Struktur 'ai' nur gefüllt, wenn der Bereich ein Datenbaustein ist. Weiter unten wird aber 'ai.len' zur Überprüfung des Bereiches verwendet, wo dann die Meldung 'Requested data is out-of-range' kommt. Hat da jemand schon einen Fix dafür?
Gruß
funkey