Module Name: src Committed By: christos Date: Fri Oct 18 21:01:00 UTC 2013
Modified Files: src/sbin/route: route.c Log Message: avoid pointer gymnastics To generate a diff of this commit: cvs rdiff -u -r1.140 -r1.141 src/sbin/route/route.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/route/route.c diff -u src/sbin/route/route.c:1.140 src/sbin/route/route.c:1.141 --- src/sbin/route/route.c:1.140 Fri Mar 1 13:25:17 2013 +++ src/sbin/route/route.c Fri Oct 18 17:01:00 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: route.c,v 1.140 2013/03/01 18:25:17 joerg Exp $ */ +/* $NetBSD: route.c,v 1.141 2013/10/18 21:01:00 christos Exp $ */ /* * Copyright (c) 1983, 1989, 1991, 1993 @@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 19 #if 0 static char sccsid[] = "@(#)route.c 8.6 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: route.c,v 1.140 2013/03/01 18:25:17 joerg Exp $"); +__RCSID("$NetBSD: route.c,v 1.141 2013/10/18 21:01:00 christos Exp $"); #endif #endif /* not lint */ @@ -543,8 +543,10 @@ routename(const struct sockaddr *sa, str (IN6_IS_ADDR_LINKLOCAL(&sin6.sin6_addr) || IN6_IS_ADDR_MC_LINKLOCAL(&sin6.sin6_addr)) && sin6.sin6_scope_id == 0) { - sin6.sin6_scope_id = - ntohs(*(u_int16_t *)&sin6.sin6_addr.s6_addr[2]); + uint16_t scope; + memcpy(&scope, &sin6.sin6_addr.s6_addr[2], + sizeof(scope)); + sin6.sin6_scope_id = ntohs(scope); sin6.sin6_addr.s6_addr[2] = 0; sin6.sin6_addr.s6_addr[3] = 0; } @@ -710,8 +712,10 @@ netname(const struct sockaddr *sa, struc (IN6_IS_ADDR_LINKLOCAL(&sin6.sin6_addr) || IN6_IS_ADDR_MC_LINKLOCAL(&sin6.sin6_addr)) && sin6.sin6_scope_id == 0) { - sin6.sin6_scope_id = - ntohs(*(u_int16_t *)&sin6.sin6_addr.s6_addr[2]); + uint16_t scope; + memcpy(&scope, &sin6.sin6_addr.s6_addr[2], + sizeof(scope)); + sin6.sin6_scope_id = ntohs(scope); sin6.sin6_addr.s6_addr[2] = 0; sin6.sin6_addr.s6_addr[3] = 0; } @@ -1259,8 +1263,10 @@ getaddr(int which, const char *s, struct if ((IN6_IS_ADDR_LINKLOCAL(&su->sin6.sin6_addr) || IN6_IS_ADDR_MC_LINKLOCAL(&su->sin6.sin6_addr)) && su->sin6.sin6_scope_id) { - *(u_int16_t *)&su->sin6.sin6_addr.s6_addr[2] = - htons(su->sin6.sin6_scope_id); + uint16_t scope; + scope = htons(su->sin6.sin6_scope_id); + memcpy(&su->sin6.sin6_addr.s6_addr[2], &scope, + sizeof(scope)); su->sin6.sin6_scope_id = 0; } #endif