From 3a397f9f5b3920339a7316e09379bc25dd5195a0 Mon Sep 17 00:00:00 2001
From: gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>
Date: Tue, 29 Sep 2009 20:16:06 +0000
Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1194
 35acf78f-673a-0410-8e92-d51de3d6d3f4

---
 os/io/platforms/AT91SAM7X/mac_lld.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'os/io/platforms/AT91SAM7X')

diff --git a/os/io/platforms/AT91SAM7X/mac_lld.c b/os/io/platforms/AT91SAM7X/mac_lld.c
index 7ebee112d..d7a7a947f 100644
--- a/os/io/platforms/AT91SAM7X/mac_lld.c
+++ b/os/io/platforms/AT91SAM7X/mac_lld.c
@@ -388,9 +388,11 @@ size_t mac_lld_read_receive_descriptor(MACReceiveDescriptor *rdp,
     uint8_t *src = (uint8_t *)(rdp->rd_physdesc->w1 & W1_R_ADDRESS_MASK) +
                    rdp->rd_offset;
     uint8_t *limit = &rb[EMAC_RECEIVE_DESCRIPTORS * EMAC_RECEIVE_BUFFERS_SIZE];
+    if (src >= limit)
+      src -= EMAC_RECEIVE_DESCRIPTORS * EMAC_RECEIVE_BUFFERS_SIZE;
     if (src + size > limit ) {
       memcpy(buf, src, (size_t)(limit - src));
-      memcpy(buf, rb, (size_t)(src + size - limit));
+      memcpy(buf + (size_t)(limit - src), rb, size - (size_t)(limit - src));
     }
     else
       memcpy(buf, src, size);
-- 
cgit v1.2.3