Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/usb Make pointer arithmetics of RX buf in axe_rxeof(...



details:   https://anonhg.NetBSD.org/src/rev/f98e171a9583
branches:  trunk
changeset: 757084:f98e171a9583
user:      tsutsui <tsutsui%NetBSD.org@localhost>
date:      Sat Aug 14 09:02:17 2010 +0000

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

diffstat:

 sys/dev/usb/if_axe.c |  32 +++++++++++++++-----------------
 1 files changed, 15 insertions(+), 17 deletions(-)

diffs (78 lines):

diff -r f57ba4ca0061 -r f98e171a9583 sys/dev/usb/if_axe.c
--- a/sys/dev/usb/if_axe.c      Sat Aug 14 08:51:32 2010 +0000
+++ b/sys/dev/usb/if_axe.c      Sat Aug 14 09:02:17 2010 +0000
@@ -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();
 



Home | Main Index | Thread Index | Old Index