Remove the struct NetlinkSocket
Started with fixing a "Class with destructor should also declare a copy or move constructor and assignment operator." warning found by an Axivion scan. However, the NetlinkSocket struct is used only once and the behavior can be replicated with a qScopeGuard. Remove the struct NetlinkSocket and use a qScopeGuard for resource management. Drive-by: remove a Q_UNLIKELY that's not needed (qErrnoWarning() is already marked as Q_DECL_COLD_FUNCTION). Task-number: QTBUG-125026 Pick-to: 6.8 6.7 6.5 Change-Id: I6b770e284fdda3ff97b8cabac205e9b5abe88b14 Reviewed-by: Marc Mutz <marc.mutz@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
5d73d64f3e
commit
954bf6e18e
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include <qendian.h>
|
#include <qendian.h>
|
||||||
#include <qobjectdefs.h>
|
#include <qobjectdefs.h>
|
||||||
|
#include <qscopeguard.h>
|
||||||
#include <qvarlengtharray.h>
|
#include <qvarlengtharray.h>
|
||||||
|
|
||||||
// according to rtnetlink(7)
|
// according to rtnetlink(7)
|
||||||
@ -85,28 +86,6 @@ static QNetworkInterface::InterfaceType probeIfType(int socket, struct ifreq *re
|
|||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
struct NetlinkSocket
|
|
||||||
{
|
|
||||||
int sock;
|
|
||||||
Q_NODISCARD_CTOR explicit NetlinkSocket(int bufferSize)
|
|
||||||
{
|
|
||||||
sock = qt_safe_socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
|
|
||||||
if (Q_UNLIKELY(sock == -1))
|
|
||||||
qErrnoWarning("Could not create AF_NETLINK socket");
|
|
||||||
|
|
||||||
// set buffer length
|
|
||||||
socklen_t len = sizeof(bufferSize);
|
|
||||||
setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &bufferSize, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
~NetlinkSocket()
|
|
||||||
{
|
|
||||||
if (sock != -1)
|
|
||||||
qt_safe_close(sock);
|
|
||||||
}
|
|
||||||
|
|
||||||
operator int() const { return sock; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Lambda> struct ProcessNetlinkRequest
|
template <typename Lambda> struct ProcessNetlinkRequest
|
||||||
{
|
{
|
||||||
@ -406,9 +385,17 @@ QList<QNetworkInterfacePrivate *> QNetworkInterfaceManager::scan()
|
|||||||
{
|
{
|
||||||
// open netlink socket
|
// open netlink socket
|
||||||
QList<QNetworkInterfacePrivate *> result;
|
QList<QNetworkInterfacePrivate *> result;
|
||||||
NetlinkSocket sock(BufferSize);
|
int sock = qt_safe_socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
|
||||||
if (Q_UNLIKELY(sock == -1))
|
if (sock == -1) {
|
||||||
|
qErrnoWarning("Could not create AF_NETLINK socket");
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto sg = qScopeGuard([&] { qt_safe_close(sock); });
|
||||||
|
|
||||||
|
// set buffer length
|
||||||
|
const int bufferSize = BufferSize;
|
||||||
|
setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize));
|
||||||
|
|
||||||
QByteArray buffer(BufferSize, Qt::Uninitialized);
|
QByteArray buffer(BufferSize, Qt::Uninitialized);
|
||||||
char *buf = buffer.data();
|
char *buf = buffer.data();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user