summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/store/CMakeLists.txt8
-rw-r--r--cpp/src/qpid/sys/posix/SocketAddress.cpp8
-rwxr-xr-xcpp/src/qpid/sys/solaris/SystemInfo.cpp7
3 files changed, 17 insertions, 6 deletions
diff --git a/cpp/src/qpid/store/CMakeLists.txt b/cpp/src/qpid/store/CMakeLists.txt
index 464d2de052..9abdf0ae3d 100644
--- a/cpp/src/qpid/store/CMakeLists.txt
+++ b/cpp/src/qpid/store/CMakeLists.txt
@@ -34,9 +34,15 @@ set (store_SOURCES
add_library (store MODULE ${store_SOURCES})
target_link_libraries (store qpidbroker ${Boost_PROGRAM_OPTIONS_LIBRARY})
if (CMAKE_COMPILER_IS_GNUCXX)
+ set (GCC_CATCH_UNDEFINED "-Wl,--no-undefined")
+ # gcc on SunOS uses native linker whose "-z defs" is too fussy
+ if (CMAKE_SYSTEM_NAME STREQUAL SunOS)
+ set (GCC_CATCH_UNDEFINED "")
+ endif (CMAKE_SYSTEM_NAME STREQUAL SunOS)
+
set_target_properties (store PROPERTIES
PREFIX ""
- LINK_FLAGS -Wl,--no-undefined)
+ LINK_FLAGS "${GCC_CATCH_UNDEFINED}")
endif (CMAKE_COMPILER_IS_GNUCXX)
if (CMAKE_SYSTEM_NAME STREQUAL Windows)
diff --git a/cpp/src/qpid/sys/posix/SocketAddress.cpp b/cpp/src/qpid/sys/posix/SocketAddress.cpp
index 077942ef2f..6d5cf16b54 100644
--- a/cpp/src/qpid/sys/posix/SocketAddress.cpp
+++ b/cpp/src/qpid/sys/posix/SocketAddress.cpp
@@ -84,8 +84,8 @@ std::string SocketAddress::asString(::sockaddr const * const addr, size_t addrle
uint16_t SocketAddress::getPort(::sockaddr const * const addr)
{
switch (addr->sa_family) {
- case AF_INET: return ntohs(((::sockaddr_in*)addr)->sin_port);
- case AF_INET6: return ntohs(((::sockaddr_in6*)addr)->sin6_port);
+ case AF_INET: return ntohs(((::sockaddr_in*)(void*)addr)->sin_port);
+ case AF_INET6: return ntohs(((::sockaddr_in6*)(void*)addr)->sin6_port);
default:throw Exception(QPID_MSG("Unexpected socket type"));
}
}
@@ -112,8 +112,8 @@ void SocketAddress::setAddrInfoPort(uint16_t port) {
::addrinfo& ai = *currentAddrInfo;
switch (ai.ai_family) {
- case AF_INET: ((::sockaddr_in*)ai.ai_addr)->sin_port = htons(port); return;
- case AF_INET6:((::sockaddr_in6*)ai.ai_addr)->sin6_port = htons(port); return;
+ case AF_INET: ((::sockaddr_in*)(void*)ai.ai_addr)->sin_port = htons(port); return;
+ case AF_INET6:((::sockaddr_in6*)(void*)ai.ai_addr)->sin6_port = htons(port); return;
default: throw Exception(QPID_MSG("Unexpected socket type"));
}
}
diff --git a/cpp/src/qpid/sys/solaris/SystemInfo.cpp b/cpp/src/qpid/sys/solaris/SystemInfo.cpp
index 765e5a7eb0..e5856f55e6 100755
--- a/cpp/src/qpid/sys/solaris/SystemInfo.cpp
+++ b/cpp/src/qpid/sys/solaris/SystemInfo.cpp
@@ -69,7 +69,12 @@ void SystemInfo::getLocalIpAddresses(uint16_t port,
if (::ioctl(s, SIOCGIFADDR, &ifr) < 0) {
break;
}
- struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.lifr_addr;
+ struct sockaddr *sa = static_cast<struct sockaddr *>((void *) &ifr.lifr_addr);
+ if (sa->sa_family != AF_INET) {
+ // TODO: Url parsing currently can't cope with IPv6 addresses, defer for now
+ break;
+ }
+ struct sockaddr_in *sin = static_cast<struct sockaddr_in *>((void *)sa);
std::string addr(inet_ntoa(sin->sin_addr));
if (addr != LOCALHOST)
addrList.push_back(Address(TCP, addr, port));