QWinRegistryKey: Fix how we handle the default value, take 2

It seems the value name correction is not needed at all,
and we must not do such correction.

Amends commit 738e05a55a4047268553eea6b9f4809d42181eef

Task-number: QTBUG-107794
Change-Id: I903a762aafab4b55275beb8438e6769285821567
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
This commit is contained in:
Yuhang Zhao 2022-10-21 20:54:10 +08:00
parent 19857fda75
commit 32774f13d9
2 changed files with 6 additions and 11 deletions

View File

@ -38,13 +38,14 @@ void QWinRegistryKey::close()
QVariant QWinRegistryKey::value(QStringView subKey) const
{
// NOTE: Empty value name is allowed in Windows registry, it means the default
// or unnamed value of a key, you can read/write/delete such value normally.
if (!isValid())
return {};
if (subKey.isEmpty())
subKey = u"Default";
auto subKeyC = reinterpret_cast<const wchar_t *>(subKey.utf16());
// Use nullptr when we need to access the default value.
const auto subKeyC = subKey.isEmpty() ? nullptr : reinterpret_cast<const wchar_t *>(subKey.utf16());
// Get the size and type of the value.
DWORD dataType = REG_NONE;

View File

@ -20,7 +20,7 @@ static const QPair<QStringView, quint32> TEST_DWORD = qMakePair(u"dword", 123);
static const QPair<QStringView, quint64> TEST_QWORD = qMakePair(u"qword", 456);
static const QPair<QStringView, QByteArray> TEST_BINARY = qMakePair(u"binary", "binary\0"_ba);
static const QPair<QStringView, QVariant> TEST_NOT_EXIST = qMakePair(u"not_exist", QVariant());
static const QPair<QStringView, QVariant> TEST_DEFAULT = qMakePair(u"Default", u"default"_s);
static const QPair<QStringView, QVariant> TEST_DEFAULT = qMakePair(u"", u"default"_s);
[[nodiscard]] static inline bool write(const HKEY key, const QStringView name, const QVariant &value)
{
@ -216,12 +216,6 @@ void tst_qwinregistrykey::qwinregistrykey()
QCOMPARE(value.value_or(QString()), TEST_DEFAULT.second);
}
{
const auto value = registry.value<QString>(L"");
QVERIFY(value.has_value());
QCOMPARE(value.value_or(QString()), TEST_DEFAULT.second);
}
{
const QString value = registry.stringValue(TEST_STRING.first);
QVERIFY(!value.isEmpty());