From: Roy Marples Date: Mon, 23 May 2016 15:41:48 +0000 (+0000) Subject: Constify and fix alignment. X-Git-Tag: v6.11.1~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=038cd1c81dac500ea7e2237809222b0e42ee20c1;p=thirdparty%2Fdhcpcd.git Constify and fix alignment. --- diff --git a/if-bsd.c b/if-bsd.c index 29513dd5..d1b21955 100644 --- a/if-bsd.c +++ b/if-bsd.c @@ -93,12 +93,14 @@ #define COPYOUT(sin, sa) do { \ if ((sa) && ((sa)->sa_family == AF_INET || (sa)->sa_family == 255)) \ - (sin) = ((struct sockaddr_in *)(void *)(sa))->sin_addr; \ + (sin) = ((const struct sockaddr_in *)(const void *) \ + (sa))->sin_addr; \ } while (0) #define COPYOUT6(sin, sa) do { \ if ((sa) && ((sa)->sa_family == AF_INET6 || (sa)->sa_family == 255)) \ - (sin) = ((struct sockaddr_in6 *)(void *)(sa))->sin6_addr; \ + (sin) = ((const struct sockaddr_in6 *)(const void *) \ + (sa))->sin6_addr; \ } while (0) #ifndef CLLADDR @@ -263,13 +265,15 @@ if_vimaster(const struct dhcpcd_ctx *ctx, const char *ifname) } static void -get_addrs(int type, void *cp, struct sockaddr **sa) +get_addrs(int type, const void *data, const struct sockaddr **sa) { + const char *cp; int i; + cp = data; for (i = 0; i < RTAX_MAX; i++) { if (type & (1 << i)) { - sa[i] = (struct sockaddr *)cp; + sa[i] = (const struct sockaddr *)cp; RT_ADVANCE(cp, sa[i]); } else sa[i] = NULL; @@ -556,13 +560,11 @@ if_address(unsigned char cmd, const struct ipv4_addr *ia) } static int -if_copyrt(struct dhcpcd_ctx *ctx, struct rt *rt, struct rt_msghdr *rtm) +if_copyrt(struct dhcpcd_ctx *ctx, struct rt *rt, const struct rt_msghdr *rtm) { - uint8_t *ap; - struct sockaddr *sa, *rti_info[RTAX_MAX]; + const struct sockaddr *sa, *rti_info[RTAX_MAX]; - ap = (void *)(rtm + 1); - sa = (void *)ap; + sa = (const void *)(rtm + 1); if (sa->sa_family != AF_INET) return -1; if (~rtm->rtm_addrs & (RTA_DST | RTA_GATEWAY)) @@ -580,7 +582,7 @@ if_copyrt(struct dhcpcd_ctx *ctx, struct rt *rt, struct rt_msghdr *rtm) return -1; #endif - get_addrs(rtm->rtm_addrs, ap, rti_info); + get_addrs(rtm->rtm_addrs, sa, rti_info); memset(rt, 0, sizeof(*rt)); rt->flags = (unsigned int)rtm->rtm_flags; COPYOUT(rt->dest, rti_info[RTAX_DST]); @@ -907,13 +909,11 @@ if_address6(unsigned char cmd, const struct ipv6_addr *ia) } static int -if_copyrt6(struct dhcpcd_ctx *ctx, struct rt6 *rt, struct rt_msghdr *rtm) +if_copyrt6(struct dhcpcd_ctx *ctx, struct rt6 *rt, const struct rt_msghdr *rtm) { - uint8_t *ap; - struct sockaddr *sa, *rti_info[RTAX_MAX]; + const struct sockaddr *sa, *rti_info[RTAX_MAX]; - ap = (void *)(rtm + 1); - sa = (void *)ap; + sa = (const void *)(rtm + 1); if (sa->sa_family != AF_INET6) return -1; if (~rtm->rtm_addrs & (RTA_DST | RTA_GATEWAY)) @@ -930,7 +930,7 @@ if_copyrt6(struct dhcpcd_ctx *ctx, struct rt6 *rt, struct rt_msghdr *rtm) return -1; #endif - get_addrs(rtm->rtm_addrs, ap, rti_info); + get_addrs(rtm->rtm_addrs, sa, rti_info); memset(rt, 0, sizeof(*rt)); rt->flags = (unsigned int)rtm->rtm_flags; COPYOUT6(rt->dest, rti_info[RTAX_DST]); @@ -943,11 +943,11 @@ if_copyrt6(struct dhcpcd_ctx *ctx, struct rt6 *rt, struct rt_msghdr *rtm) * a kernel bug or actually used for something. * Either way it needs to be zeroed out. */ - struct sockaddr_in6 *sin6; + const struct sockaddr_in6 *sin6; size_t e, i, final = 0, illegal = 0; const unsigned char *p; - sin6 = (void *)rti_info[RTAX_NETMASK]; + sin6 = (const void *)rti_info[RTAX_NETMASK]; rt->mask = sin6->sin6_addr; e = sin6->sin6_len - offsetof(struct sockaddr_in6, sin6_addr); if (e > sizeof(struct in6_addr)) @@ -1226,7 +1226,7 @@ if_getlifetime6(struct ipv6_addr *ia) #endif static void -if_announce(struct dhcpcd_ctx *ctx, struct if_announcemsghdr *ifan) +if_announce(struct dhcpcd_ctx *ctx, const struct if_announcemsghdr *ifan) { switch(ifan->ifan_what) { @@ -1240,7 +1240,7 @@ if_announce(struct dhcpcd_ctx *ctx, struct if_announcemsghdr *ifan) } static void -if_ifinfo(struct dhcpcd_ctx *ctx, struct if_msghdr *ifm) +if_ifinfo(struct dhcpcd_ctx *ctx, const struct if_msghdr *ifm) { struct interface *ifp; int state; @@ -1267,9 +1267,9 @@ if_ifinfo(struct dhcpcd_ctx *ctx, struct if_msghdr *ifm) } static void -if_rtm(struct dhcpcd_ctx *ctx, struct rt_msghdr *rtm) +if_rtm(struct dhcpcd_ctx *ctx, const struct rt_msghdr *rtm) { - struct sockaddr *sa; + const struct sockaddr *sa; /* Ignore messages generated by us */ if (rtm->rtm_pid == getpid()) { @@ -1292,7 +1292,7 @@ if_rtm(struct dhcpcd_ctx *ctx, struct rt_msghdr *rtm) return; } - sa = (void *)(rtm + 1); + sa = (const void *)(rtm + 1); switch (sa->sa_family) { #ifdef INET case AF_INET: @@ -1317,13 +1317,11 @@ if_rtm(struct dhcpcd_ctx *ctx, struct rt_msghdr *rtm) * existance with a hardware address. */ if (rtm->rtm_flags & (RTF_HOST)) { - uint8_t *ap; - struct sockaddr *rti_info[RTAX_MAX]; + const struct sockaddr *rti_info[RTAX_MAX]; struct in6_addr dst6; struct sockaddr_dl sdl; - ap = (void *)(rtm + 1); - get_addrs(rtm->rtm_addrs, ap, rti_info); + get_addrs(rtm->rtm_addrs, rtm + 1, rti_info); COPYOUT6(dst6, rti_info[RTAX_DST]); DESCOPE(&dst6); if (rti_info[RTAX_GATEWAY]->sa_family == AF_LINK) @@ -1346,10 +1344,10 @@ if_rtm(struct dhcpcd_ctx *ctx, struct rt_msghdr *rtm) } static void -if_ifa(struct dhcpcd_ctx *ctx, struct ifa_msghdr *ifam) +if_ifa(struct dhcpcd_ctx *ctx, const struct ifa_msghdr *ifam) { struct interface *ifp; - struct sockaddr *rti_info[RTAX_MAX]; + const struct sockaddr *rti_info[RTAX_MAX]; /* XXX We have no way of knowing who generated these * messages wich truely sucks because we want to @@ -1399,13 +1397,13 @@ if_ifa(struct dhcpcd_ctx *ctx, struct ifa_msghdr *ifam) case AF_INET6: { struct in6_addr addr6, mask6; - struct sockaddr_in6 *sin6; + const struct sockaddr_in6 *sin6; int flags; - sin6 = (void *)rti_info[RTAX_IFA]; + sin6 = (const void *)rti_info[RTAX_IFA]; addr6 = sin6->sin6_addr; DESCOPE(&addr6); - sin6 = (void *)rti_info[RTAX_NETMASK]; + sin6 = (const void *)rti_info[RTAX_NETMASK]; mask6 = sin6->sin6_addr; DESCOPE(&mask6); if (ifam->ifam_type == RTM_NEWADDR) { @@ -1422,29 +1420,29 @@ if_ifa(struct dhcpcd_ctx *ctx, struct ifa_msghdr *ifam) } static void -if_dispatch(struct dhcpcd_ctx *ctx, struct rt_msghdr *rtm) +if_dispatch(struct dhcpcd_ctx *ctx, const struct rt_msghdr *rtm) { switch(rtm->rtm_type) { #ifdef RTM_IFANNOUNCE case RTM_IFANNOUNCE: - if_announce(ctx, (void *)rtm); + if_announce(ctx, (const void *)rtm); break; #endif case RTM_IFINFO: - if_ifinfo(ctx, (void *)rtm); + if_ifinfo(ctx, (const void *)rtm); break; case RTM_ADD: /* FALLTHROUGH */ case RTM_CHANGE: /* FALLTHROUGH */ case RTM_DELETE: - if_rtm(ctx, (void *)rtm); + if_rtm(ctx, (const void *)rtm); break; #ifdef RTM_CHGADDR case RTM_CHGADDR: /* FALLTHROUGH */ #endif case RTM_DELADDR: /* FALLTHROUGH */ case RTM_NEWADDR: - if_ifa(ctx, (void *)rtm); + if_ifa(ctx, (const void *)rtm); break; } } @@ -1453,16 +1451,19 @@ int if_handlelink(struct dhcpcd_ctx *ctx) { /* route and ifwatchd like a msg buf size of 2048 */ - char buf[2048], *p, *e; + char buf[2048]; + const char *p, *e; size_t msglen; ssize_t bytes; + const struct rt_msghdr *rtm; if ((bytes = read(ctx->link_fd, buf, sizeof(buf))) == -1) return -1; e = buf + bytes; for (p = buf; p < e; p += msglen) { - msglen = ((struct rt_msghdr *)p)->rtm_msglen; - if_dispatch(ctx, (struct rt_msghdr *)p); + rtm = (const void *)p; + msglen = rtm->rtm_msglen; + if_dispatch(ctx, rtm); } return 0; }