Author: astitcher
Date: Thu May 28 20:11:13 2009
New Revision: 779757

URL: http://svn.apache.org/viewvc?rev=779757&view=rev
Log:
Fixes to get qpid to build with gcc4.4 with optimisation
Fix for non thread safe use of inet_ntoa().

Modified:
    qpid/trunk/qpid/cpp/src/cluster.mk
    qpid/trunk/qpid/cpp/src/qpid/sys/posix/SystemInfo.cpp

Modified: qpid/trunk/qpid/cpp/src/cluster.mk
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/cluster.mk?rev=779757&r1=779756&r2=779757&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/cluster.mk (original)
+++ qpid/trunk/qpid/cpp/src/cluster.mk Thu May 28 20:11:13 2009
@@ -82,6 +82,7 @@
   qpid/sys/LatencyTracker.h
 
 cluster_la_LIBADD=  -lcpg $(libcman) libqpidbroker.la libqpidclient.la
+cluster_la_CXXFLAGS = $(AM_CXXFLAGS) -fno-strict-aliasing
 cluster_la_LDFLAGS = $(PLUGINLDFLAGS)
 
 endif                          # HAVE_LIBCPG

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/posix/SystemInfo.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/posix/SystemInfo.cpp?rev=779757&r1=779756&r2=779757&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/posix/SystemInfo.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/posix/SystemInfo.cpp Thu May 28 20:11:13 
2009
@@ -20,6 +20,8 @@
 
 #include "qpid/sys/SystemInfo.h"
 
+#include "check.h"
+
 #include <sys/ioctl.h>
 #include <sys/utsname.h>
 #include <net/if.h>
@@ -30,6 +32,7 @@
 #include <iostream>
 #include <fstream>
 #include <sstream>
+#include <netdb.h>
 
 #ifndef HOST_NAME_MAX
 #  define HOST_NAME_MAX 256
@@ -60,17 +63,20 @@
 
 void SystemInfo::getLocalIpAddresses (uint16_t port,
                                       std::vector<Address> &addrList) {
-    int s = socket (PF_INET, SOCK_STREAM, 0);
+    int s = ::socket(PF_INET, SOCK_STREAM, 0);
     for (int i=1;;i++) {
-        struct ifreq ifr;
+        ::ifreq ifr;
         ifr.ifr_ifindex = i;
         if (::ioctl (s, SIOCGIFNAME, &ifr) < 0)
             break;
         /* now ifr.ifr_name is set */
         if (::ioctl (s, SIOCGIFADDR, &ifr) < 0)
             continue;
-        struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr;
-        string addr(inet_ntoa(sin->sin_addr));
+        ::sockaddr *saddr = (::sockaddr *) &ifr.ifr_addr;
+        char dispName[NI_MAXHOST];
+        if (int rc=::getnameinfo(saddr, sizeof(ifr.ifr_addr), dispName, 
sizeof(dispName), 0, 0, NI_NUMERICHOST) != 0)
+            throw QPID_POSIX_ERROR(rc);
+        string addr(dispName);
         if (addr != LOCALHOST)
             addrList.push_back(TcpAddress(addr, port));
     }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to