]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Constify and fix alignment.
authorRoy Marples <roy@marples.name>
Mon, 23 May 2016 15:41:48 +0000 (15:41 +0000)
committerRoy Marples <roy@marples.name>
Mon, 23 May 2016 15:41:48 +0000 (15:41 +0000)
if-bsd.c

index 29513dd5fd487fbd501239e249eb5559922408c6..d1b21955abffd7da1a80c713f8fdc42daca8caaf 100644 (file)
--- a/if-bsd.c
+++ b/if-bsd.c
 
 #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;
 }