From 76cdc4d21f40a65d775bbce3468996c4d0045d96 Mon Sep 17 00:00:00 2001
From: Alan Pevec <apevec@redhat.com>
Date: Tue, 3 Mar 2009 14:36:36 +0100
Subject: [PATCH] Fix gcc-4.4 strict-aliasing issue
cc1: warnings being treated as errors
liboping.c: In function 'ping_host_add':
liboping.c:995: error: dereferencing pointer 'si' does break strict-aliasing rules
...
Signed-off-by: Alan Pevec <apevec@redhat.com>
---
src/liboping/liboping.c | 18 ++++++++++++------
1 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/liboping/liboping.c b/src/liboping/liboping.c
index 13bcc92..dee28fb 100644
--- a/src/liboping/liboping.c
+++ b/src/liboping/liboping.c
@@ -987,9 +987,12 @@ int ping_host_add (pingobj_t *obj, const char *host)
if (ai_ptr->ai_family == AF_INET)
{
- struct sockaddr_in *si;
-
- si = (struct sockaddr_in *) &sockaddr;
+ union {
+ struct sockaddr_storage any_socket;
+ struct sockaddr_in si;
+ } s;
+ s.any_socket = sockaddr;
+ si = &s.si;
si->sin_family = AF_INET;
si->sin_port = htons (ph->ident);
si->sin_addr.s_addr = htonl (INADDR_ANY);
@@ -999,9 +1002,12 @@ int ping_host_add (pingobj_t *obj, const char *host)
}
else if (ai_ptr->ai_family == AF_INET6)
{
- struct sockaddr_in6 *si;
-
- si = (struct sockaddr_in6 *) &sockaddr;
+ union {
+ struct sockaddr_storage any_socket;
+ struct sockaddr_in6 si;
+ } s;
+ s.any_socket = sockaddr;
+ si = &s.si;
si->sin6_family = AF_INET6;
si->sin6_port = htons (ph->ident);
si->sin6_addr = in6addr_any;
--
1.6.0.6