From f3af7fce4a9174fb80de22cf650435516c2f3796 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 26 Jan 2016 14:38:54 +0100 Subject: QtNetwork: eradicate Q_FOREACH loops [rvalues] ... by replacing them with C++11 range-for loops. This is the simplest of the patch series: Q_FOREACH took a copy, so we do, too. Except we don't, since we're just catching the return value that comes out of the function (RVO). We can't feed the rvalues into range-for, because they are non-const and would thus detach. Change-Id: I42c9c44d948ab1512a69d42890187bc3cf2d7e58 Reviewed-by: Lars Knoll --- src/network/access/qhttpnetworkconnection.cpp | 3 ++- src/network/access/qnetworkaccessftpbackend.cpp | 3 ++- src/network/access/qnetworkdiskcache.cpp | 6 ++++-- src/network/access/qnetworkreplyhttpimpl.cpp | 3 ++- src/network/access/qnetworkreplynsurlconnectionimpl.mm | 3 ++- src/network/bearer/qnetworksession.cpp | 3 ++- src/network/doc/snippets/code/src_network_kernel_qdnslookup.cpp | 3 ++- src/network/doc/snippets/code/src_network_kernel_qhostinfo.cpp | 3 ++- src/network/doc/snippets/code/src_network_ssl_qsslcertificate.cpp | 6 +++--- src/network/kernel/qnetworkproxy_win.cpp | 6 ++++-- src/network/socket/qabstractsocket.cpp | 4 +++- src/network/socket/qhttpsocketengine.cpp | 4 ++-- src/network/ssl/qsslcertificate_qt.cpp | 6 ++++-- src/network/ssl/qsslcipher.cpp | 6 ++++-- src/network/ssl/qsslcontext_openssl.cpp | 3 ++- src/network/ssl/qsslsocket.cpp | 3 ++- src/network/ssl/qsslsocket_openssl.cpp | 6 ++++-- 17 files changed, 46 insertions(+), 25 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 7144734138..79f418f675 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -1148,7 +1148,8 @@ void QHttpNetworkConnectionPrivate::_q_hostLookupFinished(const QHostInfo &info) if (networkLayerState == IPv4 || networkLayerState == IPv6 || networkLayerState == IPv4or6) return; - foreach (const QHostAddress &address, info.addresses()) { + const auto addresses = info.addresses(); + for (const QHostAddress &address : addresses) { const QAbstractSocket::NetworkLayerProtocol protocol = address.protocol(); if (protocol == QAbstractSocket::IPv4Protocol) { if (!foundAddress) { diff --git a/src/network/access/qnetworkaccessftpbackend.cpp b/src/network/access/qnetworkaccessftpbackend.cpp index 793a3b3452..153a33f782 100644 --- a/src/network/access/qnetworkaccessftpbackend.cpp +++ b/src/network/access/qnetworkaccessftpbackend.cpp @@ -121,7 +121,8 @@ void QNetworkAccessFtpBackend::open() { #ifndef QT_NO_NETWORKPROXY QNetworkProxy proxy; - foreach (const QNetworkProxy &p, proxyList()) { + const auto proxies = proxyList(); + for (const QNetworkProxy &p : proxies) { // use the first FTP proxy // or no proxy at all if (p.type() == QNetworkProxy::FtpCachingProxy diff --git a/src/network/access/qnetworkdiskcache.cpp b/src/network/access/qnetworkdiskcache.cpp index 99e67cb463..077826ccf6 100644 --- a/src/network/access/qnetworkdiskcache.cpp +++ b/src/network/access/qnetworkdiskcache.cpp @@ -189,7 +189,8 @@ QIODevice *QNetworkDiskCache::prepare(const QNetworkCacheMetaData &metaData) return 0; } - foreach (const QNetworkCacheMetaData::RawHeader &header, metaData.rawHeaders()) { + const auto headers = metaData.rawHeaders(); + for (const auto &header : headers) { if (header.first.toLower() == "content-length") { const qint64 size = header.second.toLongLong(); if (size > (maximumCacheSize() * 3)/4) @@ -639,7 +640,8 @@ bool QCacheItem::canCompress() const { bool sizeOk = false; bool typeOk = false; - foreach (const QNetworkCacheMetaData::RawHeader &header, metaData.rawHeaders()) { + const auto headers = metaData.rawHeaders(); + for (const auto &header : headers) { if (header.first.toLower() == "content-length") { qint64 size = header.second.toLongLong(); if (size > MAX_COMPRESSION_SIZE) diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index c6173791a6..5c403250ab 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -648,7 +648,8 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq QNetworkProxy transparentProxy, cacheProxy; // FIXME the proxy stuff should be done in the HTTP thread - foreach (const QNetworkProxy &p, managerPrivate->queryProxy(QNetworkProxyQuery(newHttpRequest.url()))) { + const auto proxies = managerPrivate->queryProxy(QNetworkProxyQuery(newHttpRequest.url())); + for (const QNetworkProxy &p : proxies) { // use the first proxy that works // for non-encrypted connections, any transparent or HTTP proxy // for encrypted, only transparent proxies diff --git a/src/network/access/qnetworkreplynsurlconnectionimpl.mm b/src/network/access/qnetworkreplynsurlconnectionimpl.mm index 903e168a66..58a3ba1448 100644 --- a/src/network/access/qnetworkreplynsurlconnectionimpl.mm +++ b/src/network/access/qnetworkreplynsurlconnectionimpl.mm @@ -365,7 +365,8 @@ QNetworkReplyNSURLConnectionImpl::QNetworkReplyNSURLConnectionImpl(QObject *pare cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; // copy headers - foreach (const QByteArray &header, request.rawHeaderList()) { + const auto headers = request.rawHeaderList(); + for (const QByteArray &header : headers) { QByteArray headerValue = request.rawHeader(header); [nsRequest addValue:QString::fromUtf8(headerValue).toNSString() forHTTPHeaderField:QString::fromUtf8(header).toNSString()]; diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp index 1e7b080333..6d864a7d3e 100644 --- a/src/network/bearer/qnetworksession.cpp +++ b/src/network/bearer/qnetworksession.cpp @@ -249,7 +249,8 @@ QNetworkSession::QNetworkSession(const QNetworkConfiguration &connectionConfig, { // invalid configuration if (!connectionConfig.identifier().isEmpty()) { - foreach (QBearerEngine *engine, qNetworkConfigurationManagerPrivate()->engines()) { + const auto engines = qNetworkConfigurationManagerPrivate()->engines(); + for (QBearerEngine *engine : engines) { if (engine->hasIdentifier(connectionConfig.identifier())) { d = engine->createSessionBackend(); d->q = this; diff --git a/src/network/doc/snippets/code/src_network_kernel_qdnslookup.cpp b/src/network/doc/snippets/code/src_network_kernel_qdnslookup.cpp index dabd2373e7..76a0d61427 100644 --- a/src/network/doc/snippets/code/src_network_kernel_qdnslookup.cpp +++ b/src/network/doc/snippets/code/src_network_kernel_qdnslookup.cpp @@ -75,7 +75,8 @@ void MyObject::handleServers() } // Handle the results. - foreach (const QDnsServiceRecord &record, dns->serviceRecords()) { + const auto records = dns->serviceRecords(); + for (const QDnsServiceRecord &record : records) { ... } dns->deleteLater(); diff --git a/src/network/doc/snippets/code/src_network_kernel_qhostinfo.cpp b/src/network/doc/snippets/code/src_network_kernel_qhostinfo.cpp index 0d06fb44c7..b7939bb1c0 100644 --- a/src/network/doc/snippets/code/src_network_kernel_qhostinfo.cpp +++ b/src/network/doc/snippets/code/src_network_kernel_qhostinfo.cpp @@ -78,7 +78,8 @@ void MyWidget::lookedUp(const QHostInfo &host) return; } - foreach (const QHostAddress &address, host.addresses()) + const auto addresses = host.addresses(); + for (const QHostAddress &address : addresses) qDebug() << "Found address:" << address.toString(); } //! [3] diff --git a/src/network/doc/snippets/code/src_network_ssl_qsslcertificate.cpp b/src/network/doc/snippets/code/src_network_ssl_qsslcertificate.cpp index fd1de88754..12691da7a2 100644 --- a/src/network/doc/snippets/code/src_network_ssl_qsslcertificate.cpp +++ b/src/network/doc/snippets/code/src_network_ssl_qsslcertificate.cpp @@ -49,9 +49,9 @@ ****************************************************************************/ //! [0] -foreach (const QSslCertificate &cert, QSslCertificate::fromPath("C:/ssl/certificate.*.pem", - QSsl::Pem, - QRegExp::Wildcard)) { +const auto certs = QSslCertificate::fromPath("C:/ssl/certificate.*.pem", + QSsl::Pem, QRegExp::Wildcard); +for (const QSslCertificate &cert : certs) { qDebug() << cert.issuerInfo(QSslCertificate::Organization); } //! [0] diff --git a/src/network/kernel/qnetworkproxy_win.cpp b/src/network/kernel/qnetworkproxy_win.cpp index 16c745fdda..40abafec73 100644 --- a/src/network/kernel/qnetworkproxy_win.cpp +++ b/src/network/kernel/qnetworkproxy_win.cpp @@ -200,8 +200,10 @@ static bool isBypassed(const QString &host, const QStringList &bypassList) return true; if (isIpAddress) { //exclude all local subnets - foreach (const QNetworkInterface &iface, QNetworkInterface::allInterfaces()) { - foreach (const QNetworkAddressEntry netaddr, iface.addressEntries()) { + const auto ifaces = QNetworkInterface::allInterfaces(); + for (const QNetworkInterface &iface : ifaces) { + const auto netaddrs = iface.addressEntries(); + for (const QNetworkAddressEntry &netaddr : netaddrs) { if (ipAddress.isInSubnet(netaddr.ip(), netaddr.prefixLength())) { return true; } diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 7bf9a6de7a..098739adc3 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -999,9 +999,11 @@ void QAbstractSocketPrivate::_q_startConnecting(const QHostInfo &hostInfo) if (preferredNetworkLayerProtocol == QAbstractSocket::UnknownNetworkLayerProtocol || preferredNetworkLayerProtocol == QAbstractSocket::AnyIPProtocol) { addresses = hostInfo.addresses(); } else { - foreach (const QHostAddress &address, hostInfo.addresses()) + const auto candidates = hostInfo.addresses(); + for (const QHostAddress &address : candidates) { if (address.protocol() == preferredNetworkLayerProtocol) addresses += address; + } } diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index 642c9bb10f..73b42ba432 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -497,9 +497,9 @@ void QHttpSocketEngine::slotSocketConnected() data += "Host: " + peerAddress + "\r\n"; if (!d->proxy.hasRawHeader("User-Agent")) data += "User-Agent: Mozilla/5.0\r\n"; - foreach (const QByteArray &header, d->proxy.rawHeaderList()) { + const auto headers = d->proxy.rawHeaderList(); + for (const QByteArray &header : headers) data += header + ": " + d->proxy.rawHeader(header) + "\r\n"; - } QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(d->authenticator); //qDebug() << "slotSocketConnected: priv=" << priv << (priv ? (int)priv->method : -1); if (priv && priv->method != QAuthenticatorPrivate::None) { diff --git a/src/network/ssl/qsslcertificate_qt.cpp b/src/network/ssl/qsslcertificate_qt.cpp index a351b8ecc7..2535d12044 100644 --- a/src/network/ssl/qsslcertificate_qt.cpp +++ b/src/network/ssl/qsslcertificate_qt.cpp @@ -451,7 +451,8 @@ bool QSslCertificatePrivate::parseExtension(const QByteArray &data, QSslCertific if (!val.read(valElem.value()) || val.type() != QAsn1Element::SequenceType) return false; QVariantMap result; - foreach (const QAsn1Element &el, val.toVector()) { + const auto elems = val.toVector(); + for (const QAsn1Element &el : elems) { QVector items = el.toVector(); if (items.size() != 2) return false; @@ -495,7 +496,8 @@ bool QSslCertificatePrivate::parseExtension(const QByteArray &data, QSslCertific if (!val.read(valElem.value()) || val.type() != QAsn1Element::SequenceType) return false; QVariantMap result; - foreach (const QAsn1Element &el, val.toVector()) { + const auto elems = val.toVector(); + for (const QAsn1Element &el : elems) { if (el.type() == 0x80) { result[QStringLiteral("keyid")] = el.value().toHex(); } else if (el.type() == 0x82) { diff --git a/src/network/ssl/qsslcipher.cpp b/src/network/ssl/qsslcipher.cpp index 806a27cd1a..738d521a38 100644 --- a/src/network/ssl/qsslcipher.cpp +++ b/src/network/ssl/qsslcipher.cpp @@ -90,7 +90,8 @@ QSslCipher::QSslCipher() QSslCipher::QSslCipher(const QString &name) : d(new QSslCipherPrivate) { - foreach (const QSslCipher &cipher, QSslConfiguration::supportedCiphers()) { + const auto ciphers = QSslConfiguration::supportedCiphers(); + for (const QSslCipher &cipher : ciphers) { if (cipher.name() == name) { *this = cipher; return; @@ -111,7 +112,8 @@ QSslCipher::QSslCipher(const QString &name) QSslCipher::QSslCipher(const QString &name, QSsl::SslProtocol protocol) : d(new QSslCipherPrivate) { - foreach (const QSslCipher &cipher, QSslConfiguration::supportedCiphers()) { + const auto ciphers = QSslConfiguration::supportedCiphers(); + for (const QSslCipher &cipher : ciphers) { if (cipher.name() == name && cipher.protocol() == protocol) { *this = cipher; return; diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp index 011ba33ace..ca296bd179 100644 --- a/src/network/ssl/qsslcontext_openssl.cpp +++ b/src/network/ssl/qsslcontext_openssl.cpp @@ -224,7 +224,8 @@ init_context: const QDateTime now = QDateTime::currentDateTimeUtc(); // Add all our CAs to this store. - foreach (const QSslCertificate &caCertificate, sslContext->sslConfiguration.caCertificates()) { + const auto caCertificates = sslContext->sslConfiguration.caCertificates(); + for (const QSslCertificate &caCertificate : caCertificates) { // From https://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html: // // If several CA certificates matching the name, key identifier, and diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 35dce23601..a5ee9bf0c1 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -1249,7 +1249,8 @@ void QSslSocket::setCiphers(const QString &ciphers) { Q_D(QSslSocket); d->configuration.ciphers.clear(); - foreach (const QString &cipherName, ciphers.split(QLatin1Char(':'), QString::SkipEmptyParts)) { + const auto cipherNames = ciphers.split(QLatin1Char(':'), QString::SkipEmptyParts); + for (const QString &cipherName : cipherNames) { QSslCipher cipher(cipherName); if (!cipher.isNull()) d->configuration.ciphers << cipher; diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 45caaffe75..c6d63adffc 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -286,7 +286,8 @@ int q_X509Callback(int ok, X509_STORE_CTX *ctx) qCDebug(lcSsl) << "verification error: dumping bad certificate"; qCDebug(lcSsl) << QSslCertificatePrivate::QSslCertificate_from_X509(q_X509_STORE_CTX_get_current_cert(ctx)).toPem(); qCDebug(lcSsl) << "dumping chain"; - foreach (QSslCertificate cert, QSslSocketBackendPrivate::STACKOFX509_to_QSslCertificates(q_X509_STORE_CTX_get_chain(ctx))) { + const auto certs = QSslSocketBackendPrivate::STACKOFX509_to_QSslCertificates(q_X509_STORE_CTX_get_chain(ctx)); + for (const QSslCertificate &cert : certs) { qCDebug(lcSsl) << "Issuer:" << "O=" << cert.issuerInfo(QSslCertificate::Organization) << "CN=" << cert.issuerInfo(QSslCertificate::CommonName) << "L=" << cert.issuerInfo(QSslCertificate::LocalityName) @@ -1625,7 +1626,8 @@ QList QSslSocketBackendPrivate::verify(const QList & } const QDateTime now = QDateTime::currentDateTimeUtc(); - foreach (const QSslCertificate &caCertificate, QSslConfiguration::defaultConfiguration().caCertificates()) { + const auto caCertificates = QSslConfiguration::defaultConfiguration().caCertificates(); + for (const QSslCertificate &caCertificate : caCertificates) { // From https://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html: // // If several CA certificates matching the name, key identifier, and -- cgit v1.2.3