Fix qapple crash due to error in reading config.

Fixes https://github.com/audetto/AppleWin/issues/42

Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
This commit is contained in:
Andrea Odetti 2021-11-03 15:49:51 +00:00
parent 70cee11c79
commit b36c17b198
3 changed files with 34 additions and 20 deletions

View file

@ -10,28 +10,36 @@ namespace
}
}
std::string Configuration::getString(const std::string & section, const std::string & key) const
QVariant Configuration::getVariant(const std::string & section, const std::string & key) const
{
const QString qkey = getKey(section, key);
const QVariant value = mySettings.value(qkey);
const std::string s = value.toString().toStdString();
return s;
if (value.isNull())
{
throw std::runtime_error("Missing " + qkey.toStdString());
}
return value;
}
std::string Configuration::getString(const std::string & section, const std::string & key) const
{
const QVariant value = getVariant(section, key);
const std::string res = value.toString().toStdString();
return res;
}
DWORD Configuration::getDWord(const std::string & section, const std::string & key) const
{
const QString qkey = getKey(section, key);
const QVariant v = mySettings.value(qkey);
const uint value = v.toUInt();
return value;
const QVariant value = getVariant(section, key);
const uint res = value.toUInt();
return res;
}
bool Configuration::getBool(const std::string & section, const std::string & key) const
{
const QString qkey = getKey(section, key);
const QVariant v = mySettings.value(qkey);
const bool value = v.toBool();
return value;
const QVariant value = getVariant(section, key);
const bool res = value.toBool();
return res;
}
void Configuration::putString(const std::string & section, const std::string & key, const std::string & value)

View file

@ -19,6 +19,8 @@ public:
private:
QSettings mySettings;
QVariant getVariant(const std::string & section, const std::string & key) const;
};
#endif // REGISTRY_H

View file

@ -40,10 +40,11 @@ namespace
void insertDisk(const QString & filename, const int disk)
{
CardManager & cardManager = GetCardMgr();
if (cardManager.QuerySlot(SLOT6) != CT_Disk2)
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
if (!pDisk2Card)
return;
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
if (filename.isEmpty())
{
pDisk2Card->EjectDisk(disk);
@ -175,14 +176,17 @@ void getAppleWinPreferences(PreferenceData & data)
CardManager & cardManager = GetCardMgr();
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
data.disks.resize(diskIDs.size());
for (size_t i = 0; i < diskIDs.size(); ++i)
if (pDisk2Card)
{
const std::string & diskName = pDisk2Card->GetFullName(diskIDs[i]);
if (!diskName.empty())
for (size_t i = 0; i < diskIDs.size(); ++i)
{
data.disks[i] = QString::fromStdString(diskName);
const std::string & diskName = pDisk2Card->GetFullName(diskIDs[i]);
if (!diskName.empty())
{
data.disks[i] = QString::fromStdString(diskName);
}
}
}
@ -196,7 +200,7 @@ void getAppleWinPreferences(PreferenceData & data)
}
}
data.enhancedSpeed = pDisk2Card->GetEnhanceDisk();
data.enhancedSpeed = pDisk2Card && pDisk2Card->GetEnhanceDisk();
data.cardInSlot4 = cardManager.QuerySlot(SLOT4);
data.cardInSlot5 = cardManager.QuerySlot(SLOT5);
data.hdInSlot7 = HD_CardIsEnabled();
@ -267,7 +271,7 @@ void setAppleWinPreferences(const std::shared_ptr<QtFrame> & frame, const Prefer
HD_SetEnabled(newData.hdInSlot7);
}
if (currentData.enhancedSpeed != newData.enhancedSpeed)
if (pDisk2Card && (currentData.enhancedSpeed != newData.enhancedSpeed))
{
REGSAVE(TEXT(REGVALUE_ENHANCE_DISK_SPEED), newData.enhancedSpeed ? 1 : 0);
pDisk2Card->SetEnhanceDisk(newData.enhancedSpeed);