]> The Tcpdump Group git mirrors - tcpdump/commitdiff
memcpy() can be optimized in wacky way by compilers (is NOT a normal function),
authoritojun <itojun>
Sun, 24 Jun 2001 21:35:53 +0000 (21:35 +0000)
committeritojun <itojun>
Sun, 24 Jun 2001 21:35:53 +0000 (21:35 +0000)
and can raise alignment issues.

addrtoname.c

index 4af2a2ce6fb3d22341d69709a6c14ed99b5ccfd1..6ca589a1ca13cab4bf8b9665baf4493848ec6f8b 100644 (file)
@@ -23,7 +23,7 @@
  */
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/addrtoname.c,v 1.76 2001-06-18 09:12:27 itojun Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/addrtoname.c,v 1.77 2001-06-24 21:35:53 itojun Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -177,11 +177,9 @@ getname(const u_char *ap)
        u_int32_t addr;
        static struct hnamemem *p;              /* static for longjmp() */
 
-#ifndef LBL_ALIGN
-       addr = *(const u_int32_t *)ap;
-#else
-       memcpy(&addr, ap, sizeof(addr));
-#endif
+       addr = (u_int32_t)ap[0] << 24 | (u_int32_t)ap[1] << 16 |
+           (u_int32_t)ap[2] << 8 | (u_int32_t)ap[3] << 0;
+
        p = &hnametable[addr & (HASHNAMESIZE-1)];
        for (; p->nxt; p = p->nxt) {
                if (p->addr == addr)
@@ -239,8 +237,10 @@ getname6(const u_char *ap)
        static struct h6namemem *p;             /* static for longjmp() */
        register char *cp;
        char ntop_buf[INET6_ADDRSTRLEN];
+       int i;
 
-       memcpy(&addr, ap, sizeof(addr));
+       for (i = 0; i < sizeof(addr); i++)
+               addr.s6_addr[i] = ap[i];
        p = &h6nametable[*(u_int16_t *)&addr.s6_addr[14] & (HASHNAMESIZE-1)];
        for (; p->nxt; p = p->nxt) {
                if (memcmp(&p->addr, &addr, sizeof(addr)) == 0)