Skip to content

Commit

Permalink
Fix qapple crash due to error in reading config.
Browse files Browse the repository at this point in the history
Fixes #42

Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
  • Loading branch information
audetto committed Nov 3, 2021
1 parent 70cee11 commit b36c17b
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 20 deletions.
30 changes: 19 additions & 11 deletions source/frontends/qt/configuration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions source/frontends/qt/configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ class Configuration : public Registry

private:
QSettings mySettings;

QVariant getVariant(const std::string & section, const std::string & key) const;
};

#endif // REGISTRY_H
22 changes: 13 additions & 9 deletions source/frontends/qt/options.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
}
}

Expand All @@ -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();
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit b36c17b

Please sign in to comment.