--- a/drivers/ec_device.c Fri Nov 18 10:30:01 2005 +0000
+++ b/drivers/ec_device.c Fri Nov 18 11:46:20 2005 +0000
@@ -253,28 +253,30 @@
@param ecd EtherCAT-Gerät
@param data Zeiger auf den Speicherbereich, in den die
- empfangenen Daten kopiert werden sollen
- @param size Größe des angegebenen Speicherbereichs
+ empfangenen Daten kopiert werden sollen
@return Anzahl der kopierten Bytes bei Erfolg, sonst < 0
*/
int EtherCAT_device_receive(EtherCAT_device_t *ecd,
- unsigned char *data,
- unsigned int size)
-{
- int cnt;
-
+ unsigned char *data)
+{
if (ecd->state != ECAT_DS_RECEIVED)
{
EC_DBG(KERN_ERR "EtherCAT: receive - Nothing received!\n");
return -1;
}
- cnt = min(ecd->rx_data_length, size);
- memcpy(data,ecd->rx_data, cnt);
-
- return cnt;
+ if (ecd->rx_data_length > ECAT_FRAME_BUFFER_SIZE)
+ {
+ EC_DBG(KERN_ERR "EtherCAT: receive - Reveived frame too long (%i Bytes)!\n",
+ ecd->rx_data_length);
+ return -1;
+ }
+
+ memcpy(data, ecd->rx_data, ecd->rx_data_length);
+
+ return ecd->rx_data_length;
}
/***************************************************************/