Module Name:    src
Committed By:   tsutsui
Date:           Sat Aug 14 09:02:17 UTC 2010

Modified Files:
        src/sys/dev/usb: if_axe.c

Log Message:
Make pointer arithmetics of RX buf in axe_rxeof() more readable
to avoid further confusion.


To generate a diff of this commit:
cvs rdiff -u -r1.41 -r1.42 src/sys/dev/usb/if_axe.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/if_axe.c
diff -u src/sys/dev/usb/if_axe.c:1.41 src/sys/dev/usb/if_axe.c:1.42
--- src/sys/dev/usb/if_axe.c:1.41	Sat Aug 14 08:42:15 2010
+++ src/sys/dev/usb/if_axe.c	Sat Aug 14 09:02:17 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_axe.c,v 1.41 2010/08/14 08:42:15 tsutsui Exp $	*/
+/*	$NetBSD: if_axe.c,v 1.42 2010/08/14 09:02:17 tsutsui Exp $	*/
 /*	$OpenBSD: if_axe.c,v 1.96 2010/01/09 05:33:08 jsg Exp $ */
 
 /*
@@ -89,7 +89,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.41 2010/08/14 08:42:15 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.42 2010/08/14 09:02:17 tsutsui Exp $");
 
 #if defined(__NetBSD__)
 #include "opt_inet.h"
@@ -926,7 +926,7 @@
 	struct ifnet *ifp;
 	uint8_t *buf;
 	uint32_t total_len;
-	uint16_t pktlen = 0;
+	u_int rxlen, pktlen;
 	struct mbuf *m;
 	struct axe_sframe_hdr hdr;
 	int s;
@@ -963,31 +963,28 @@
 				ifp->if_ierrors++;
 				goto done;
 			}
-			buf += pktlen;
 
 			memcpy(&hdr, buf, sizeof(hdr));
 			total_len -= sizeof(hdr);
+			buf += sizeof(hdr);
 
 			if ((hdr.len ^ hdr.ilen) != 0xffff) {
 				ifp->if_ierrors++;
 				goto done;
 			}
-			pktlen = le16toh(hdr.len);
-			if (pktlen > total_len) {
-				ifp->if_ierrors++;
-				goto done;
-			}
-
-			buf += sizeof(hdr);
-
-			pktlen = roundup2(pktlen, 2);
 
-			if (total_len < pktlen)
+			rxlen = le16toh(hdr.len);
+			if (total_len < rxlen) {
+				pktlen = total_len;
 				total_len = 0;
-			else
-				total_len -= pktlen;
+			} else {
+				total_len -= rxlen;
+				pktlen = rxlen;
+			}
+			rxlen = roundup2(rxlen, 2);
+
 		} else { /* AX172 */
-			pktlen = total_len;
+			pktlen = rxlen = total_len;
 			total_len = 0;
 		}
 
@@ -1004,6 +1001,7 @@
 		m->m_pkthdr.len = m->m_len = pktlen;
 
 		memcpy(mtod(m, char *), buf, pktlen);
+		buf += rxlen;
 
 		s = splnet();
 

Reply via email to