Fix some bad uses of QSharedPointerData::operator T*

Avoid detaching where possible

Change-Id: I438d3e66689aeef05951af86a48af2a6910da7c2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
bb10
Allan Sandfeld Jensen 2020-10-15 13:23:02 +02:00
parent b002c48cc7
commit ada6e4fbe9
8 changed files with 40 additions and 35 deletions

View File

@ -290,7 +290,7 @@ bool QProcessEnvironment::isEmpty() const
*/
void QProcessEnvironment::clear()
{
if (d)
if (d.constData())
d->vars.clear();
// Unix: Don't clear d->nameMap, as the environment is likely to be
// re-populated with the same keys again.
@ -339,9 +339,9 @@ void QProcessEnvironment::insert(const QString &name, const QString &value)
*/
void QProcessEnvironment::remove(const QString &name)
{
if (d) {
d.detach(); // detach before prepareName()
d->vars.remove(d->prepareName(name));
if (d.constData()) {
QProcessEnvironmentPrivate *p = d.data();
p->vars.remove(p->prepareName(name));
}
}

View File

@ -743,9 +743,10 @@ QStringList QUrlQuery::allQueryItemValues(const QString &key, QUrl::ComponentFor
void QUrlQuery::removeQueryItem(const QString &key)
{
if (d.constData()) {
Map::iterator it = d->findKey(key);
if (it != d->itemList.end())
d->itemList.erase(it);
auto *p = d.data();
Map::iterator it = p->findKey(key);
if (it != p->itemList.end())
p->itemList.erase(it);
}
}
@ -758,12 +759,13 @@ void QUrlQuery::removeQueryItem(const QString &key)
void QUrlQuery::removeAllQueryItems(const QString &key)
{
if (d.constData()) {
const QString encodedKey = d->recodeFromUser(key);
auto *p = d.data();
const QString encodedKey = p->recodeFromUser(key);
auto firstEqualsEncodedKey = [&encodedKey](const QPair<QString, QString> &item) {
return item.first == encodedKey;
};
const auto end = d->itemList.end();
d->itemList.erase(std::remove_if(d->itemList.begin(), end, firstEqualsEncodedKey), end);
const auto end = p->itemList.end();
p->itemList.erase(std::remove_if(p->itemList.begin(), end, firstEqualsEncodedKey), end);
}
}

View File

@ -2569,11 +2569,11 @@ QRegularExpressionMatch QRegularExpressionMatchIterator::next()
{
if (!hasNext()) {
qWarning("QRegularExpressionMatchIterator::next() called on an iterator already at end");
return d->next;
return d.constData()->next;
}
QRegularExpressionMatch current = d->next;
d->next = d->next.d.constData()->nextMatch();
QRegularExpressionMatch current = d.constData()->next;
d->next = current.d.constData()->nextMatch();
return current;
}

View File

@ -112,7 +112,7 @@ public:
// isTimeZoneIdAvailable() and to create named IANA time zones. This is usually the host
// system, but may be different if the host resources are insufficient or if
// QT_NO_SYSTEMLOCALE is set. A simple UTC backend is used if no alternative is available.
QSharedDataPointer<QTimeZonePrivate> backend;
QExplicitlySharedDataPointer<QTimeZonePrivate> backend;
};
Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz);
@ -339,11 +339,11 @@ QTimeZone::QTimeZone(const QByteArray &ianaId)
d = new QUtcTimeZonePrivate(ianaId);
// If not a CLDR UTC offset ID then try creating it with the system backend.
// Relies on backend not creating valid TZ with invalid name.
if (!d->isValid())
if (!d.constData()->isValid())
d = ianaId.isEmpty() ? newBackendTimeZone() : newBackendTimeZone(ianaId);
// Can also handle UTC with arbitrary (valid) offset, but only do so as
// fall-back, since either of the above may handle it more informatively.
if (!d->isValid()) {
if (!d.constData()->isValid()) {
qint64 offset = QUtcTimeZonePrivate::offsetFromUtcString(ianaId);
if (offset != QTimeZonePrivate::invalidSeconds()) {
// Should have abs(offset) < 24 * 60 * 60 = 86400.

View File

@ -919,13 +919,13 @@ void QTextFormat::merge(const QTextFormat &other)
if (!other.d)
return;
QTextFormatPrivate *d = this->d;
QTextFormatPrivate *p = d.data();
const QList<QT_PREPEND_NAMESPACE(Property)> &otherProps = other.d->props;
d->props.reserve(d->props.size() + otherProps.size());
const QList<QT_PREPEND_NAMESPACE(Property)> &otherProps = other.d.constData()->props;
p->props.reserve(p->props.size() + otherProps.size());
for (int i = 0; i < otherProps.count(); ++i) {
const QT_PREPEND_NAMESPACE(Property) &p = otherProps.at(i);
d->insertProperty(p.key, p.value);
const QT_PREPEND_NAMESPACE(Property) &prop = otherProps.at(i);
p->insertProperty(prop.key, prop.value);
}
}
@ -1261,10 +1261,10 @@ int QTextFormat::objectIndex() const
void QTextFormat::setObjectIndex(int o)
{
if (o == -1) {
if (d)
if (d.constData())
d->clearProperty(ObjectIndex);
} else {
if (!d)
if (!d.constData())
d = new QTextFormatPrivate;
// ### type
d->insertProperty(ObjectIndex, o);

View File

@ -232,9 +232,10 @@ QUrl QNetworkCacheMetaData::url() const
*/
void QNetworkCacheMetaData::setUrl(const QUrl &url)
{
d->url = url;
d->url.setPassword(QString());
d->url.setFragment(QString());
auto *p = d.data();
p->url = url;
p->url.setPassword(QString());
p->url.setFragment(QString());
}
/*!
@ -395,12 +396,13 @@ static inline QDataStream &operator>>(QDataStream &in, QNetworkCacheMetaData::At
void QNetworkCacheMetaDataPrivate::load(QDataStream &in, QNetworkCacheMetaData &metaData)
{
in >> metaData.d->url;
in >> metaData.d->expirationDate;
in >> metaData.d->lastModified;
in >> metaData.d->saveToDisk;
in >> metaData.d->attributes;
in >> metaData.d->headers;
auto *p = metaData.d.data();
in >> p->url;
in >> p->expirationDate;
in >> p->lastModified;
in >> p->saveToDisk;
in >> p->attributes;
in >> p->headers;
}
/*!

View File

@ -630,12 +630,13 @@ void QSslConfiguration::setCiphers(const QList<QSslCipher> &ciphers)
*/
void QSslConfiguration::setCiphers(const QString &ciphers)
{
d->ciphers.clear();
auto *p = d.data();
p->ciphers.clear();
const auto cipherNames = ciphers.split(QLatin1Char(':'), Qt::SkipEmptyParts);
for (const QString &cipherName : cipherNames) {
QSslCipher cipher(cipherName);
if (!cipher.isNull())
d->ciphers << cipher;
p->ciphers << cipher;
}
}

View File

@ -194,7 +194,7 @@ SSL* QSslContext::createSsl()
}
#ifndef OPENSSL_NO_NEXTPROTONEG
QList<QByteArray> protocols = sslConfiguration.d->nextAllowedProtocols;
QList<QByteArray> protocols = sslConfiguration.d.constData()->nextAllowedProtocols;
if (!protocols.isEmpty()) {
m_supportedNPNVersions.clear();
for (int a = 0; a < protocols.count(); ++a) {