Index: head/net/qt5-network/Makefile =================================================================== --- head/net/qt5-network/Makefile (revision 488280) +++ head/net/qt5-network/Makefile (revision 488281) @@ -1,48 +1,48 @@ # $FreeBSD$ PORTNAME= network DISTVERSION= ${QT5_VERSION} -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= net ipv6 PKGNAMEPREFIX= qt5- MAINTAINER= kde@FreeBSD.org COMMENT= Qt network module RUN_DEPENDS= ${LOCALBASE}/share/certs/ca-root-nss.crt:security/ca_root_nss USES= compiler:c++11-lang qmake:no_env qt-dist:5,base ssl USE_QT= core buildtools_build HAS_CONFIGURE= yes CONFIGURE_ARGS= -no-gui -no-xcb USE_LDCONFIG= ${PREFIX}/${QT_LIBDIR_REL} BUILD_WRKSRC= ${WRKSRC}/src/${PORTNAME} INSTALL_WRKSRC= ${BUILD_WRKSRC} QT_DEFINES= OPENSSL SSL QT_CONFIG= openssl post-patch: @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \ ${BUILD_WRKSRC}/ssl/qsslsocket_openssl.cpp @${REINPLACE_CMD} -e 's|%%OPENSSLLIB%%|${OPENSSLLIB}|g' \ ${BUILD_WRKSRC}/ssl/qsslsocket_openssl_symbols.cpp post-configure: .for d in src/network src/plugins/bearer/generic ${MKDIR} ${WRKSRC}/${d} cd ${WRKSRC}/${d} && ${SETENV} ${QMAKE_ENV} ${_QMAKE} ${QMAKE_ARGS} ${WRKSRC}/${d} .endfor post-build: @cd ${WRKSRC}/src/plugins/bearer/generic && \ ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} \ ${_MAKE_JOBS} ${MAKE_ARGS} ${ALL_TARGET} post-install: @cd ${WRKSRC}/src/plugins/bearer/generic && \ ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} \ ${MAKE_ARGS} ${INSTALL_TARGET} .include Index: head/net/qt5-network/files/patch-src_network_kernel_qnetworkinterface__unix.cpp =================================================================== --- head/net/qt5-network/files/patch-src_network_kernel_qnetworkinterface__unix.cpp (revision 488280) +++ head/net/qt5-network/files/patch-src_network_kernel_qnetworkinterface__unix.cpp (revision 488281) @@ -1,95 +1,106 @@ Clean up interface type and MTU detection. - Introduce a class SockPuppet that handles closing the socket automatically, and handles different address families as well. - Finding MTU requires using AF_LOCAL, cribbed that detail from ifconfig.c - Zero out structures more diligently, initialize pointers to nullptr. - In particular, don't use a union of structs passed in to ioctl(). Make them separate structs (with block scope so the compiler might place them on top of each other, that would be ok). + - IFM_FDDI (still) exists in 11.2, not in 12.0 ---- src/network/kernel/qnetworkinterface_unix.cpp.orig 2018-12-24 17:00:42 UTC +--- src/network/kernel/qnetworkinterface_unix.cpp.orig 2018-12-03 11:15:26 UTC +++ src/network/kernel/qnetworkinterface_unix.cpp @@ -419,12 +419,23 @@ QT_BEGIN_INCLUDE_NAMESPACE #endif // QT_PLATFORM_UIKIT QT_END_INCLUDE_NAMESPACE -static int openSocket(int &socket) +template struct SockPuppet { - if (socket == -1) - socket = qt_safe_socket(AF_INET, SOCK_DGRAM, 0); - return socket; -} + int socket{-1}; + + int open() + { + if (socket == -1) + socket = qt_safe_socket(address_family, SOCK_DGRAM, 0); + return socket; + } + + ~SockPuppet() + { + if (socket != -1) + qt_safe_close(socket); + } +} ; static QNetworkInterface::InterfaceType probeIfType(int socket, int iftype, struct ifmediareq *req) { -@@ -477,15 +488,8 @@ static QNetworkInterface::InterfaceType +@@ -463,9 +474,6 @@ static QNetworkInterface::InterfaceType + case IFM_ETHER: + return QNetworkInterface::Ethernet; + +- case IFM_FDDI: +- return QNetworkInterface::Fddi; +- + case IFM_IEEE80211: + return QNetworkInterface::Ieee80211; + } +@@ -477,15 +485,8 @@ static QNetworkInterface::InterfaceType static QList createInterfaces(ifaddrs *rawList) { QList interfaces; - union { - struct ifmediareq mediareq; - struct ifreq req; - }; - int socket = -1; - - // ensure both structs start with the name field, of size IFNAMESIZ - Q_STATIC_ASSERT(sizeof(mediareq.ifm_name) == sizeof(req.ifr_name)); - Q_ASSERT(&mediareq.ifm_name == &req.ifr_name); + SockPuppet socket; + SockPuppet localSocket; // on NetBSD we use AF_LINK and sockaddr_dl // scan the list for that family -@@ -500,13 +504,21 @@ static QList +@@ -500,13 +501,21 @@ static QList iface->flags = convertFlags(ptr->ifa_flags); iface->hardwareAddress = iface->makeHwAddress(sdl->sdl_alen, (uchar*)LLADDR(sdl)); - strlcpy(mediareq.ifm_name, ptr->ifa_name, sizeof(mediareq.ifm_name)); - iface->type = probeIfType(openSocket(socket), sdl->sdl_type, &mediareq); - iface->mtu = getMtu(socket, &req); + { + ifmediareq req; + memset(&req, 0, sizeof(req)); + strncpy(req.ifm_name, ptr->ifa_name, sizeof(req.ifm_name)); + iface->type = probeIfType(socket.open(), sdl->sdl_type, &req); + } + { + ifreq req; + memset(&req, 0, sizeof(req)); + strncpy(req.ifr_name, ptr->ifa_name, sizeof(req.ifr_name)); + req.ifr_addr.sa_family = AF_LOCAL; + iface->mtu = getMtu(localSocket.open(), &req); + } } - if (socket != -1) - qt_safe_close(socket); return interfaces; } -@@ -605,7 +617,7 @@ static QList +@@ -605,7 +614,7 @@ static QList { QList interfaces; - ifaddrs *interfaceListing; + ifaddrs *interfaceListing = nullptr; if (getifaddrs(&interfaceListing) == -1) { // error return interfaces;