drivers/ec_device.c
changeset 19 a51289e6cb2d
parent 17 1b5aea4d5147
child 22 e8c2cd004e0b
--- 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;
 }
 
 /***************************************************************/