]> git.ipfire.org Git - thirdparty/ipset.git/commitdiff
Use cast to void * instead of memcpy as Sparc workaround at sockaddr_XXX.
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Thu, 23 Dec 2010 13:44:44 +0000 (14:44 +0100)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Thu, 23 Dec 2010 13:44:44 +0000 (14:44 +0100)
Direct cast results "cast increases required alignment of target type" on
Sparc: use indirect cast to void * instead of memcpy, as Jan Engelhardt
suggested.

lib/parse.c

index 169d2e01f07e942f816af306f7a1e43512455002..c4d9c75100134e0813f234a2592a4b08c2658ef3 100644 (file)
@@ -634,15 +634,13 @@ get_addrinfo(struct ipset_session *session,
                        continue;
                if (found == 0) {
                        if (family == AF_INET) {
-                               /* Workaround: cast increases required alignment on Sparc */
-                               struct sockaddr_in saddr;
-                               memcpy(&saddr, i->ai_addr, sizeof(saddr));
-                               err = ipset_session_data_set(session, opt, &saddr.sin_addr);
+                               /* Workaround: direct cast increases required alignment on Sparc */
+                               const struct sockaddr_in *saddr = (void *)i->ai_addr;
+                               err = ipset_session_data_set(session, opt, &saddr->sin_addr);
                        } else {
-                               /* Workaround: cast increases required alignment on Sparc */
-                               struct sockaddr_in6 saddr;
-                               memcpy(&saddr, i->ai_addr, sizeof(saddr));
-                               err = ipset_session_data_set(session, opt, &saddr.sin6_addr);
+                               /* Workaround: direct cast increases required alignment on Sparc */
+                               const struct sockaddr_in6 *saddr = (void *)i->ai_addr;
+                               err = ipset_session_data_set(session, opt, &saddr->sin6_addr);
                        }
                } else if (found == 1) {
                        ipset_warn(session,