Fixed segfault bug due to accessing members of unitialized struct

loadfix
pvdk 11 years ago
parent 30c3c3e245
commit 5d94cb112f

@ -74,7 +74,7 @@ void Wizard::ComponentSelectionPage::initializePage()
componentsList->addItem(bloodmoonItem);
} else {
if (mWizard->mInstallations[path]->hasMorrowind) {
if (mWizard->mInstallations[path].hasMorrowind) {
morrowindItem->setText(tr("Morrowind\t\t(installed)"));
morrowindItem->setFlags(morrowindItem->flags() & !Qt::ItemIsEnabled & Qt::ItemIsUserCheckable);
morrowindItem->setData(Qt::CheckStateRole, Qt::Unchecked);
@ -85,7 +85,7 @@ void Wizard::ComponentSelectionPage::initializePage()
componentsList->addItem(morrowindItem);
if (mWizard->mInstallations[path]->hasTribunal) {
if (mWizard->mInstallations[path].hasTribunal) {
tribunalItem->setText(tr("Tribunal\t\t(installed)"));
tribunalItem->setFlags(tribunalItem->flags() & !Qt::ItemIsEnabled & Qt::ItemIsUserCheckable);
tribunalItem->setData(Qt::CheckStateRole, Qt::Unchecked);
@ -96,7 +96,7 @@ void Wizard::ComponentSelectionPage::initializePage()
componentsList->addItem(tribunalItem);
if (mWizard->mInstallations[path]->hasBloodmoon) {
if (mWizard->mInstallations[path].hasBloodmoon) {
bloodmoonItem->setText(tr("Bloodmoon\t\t(installed)"));
bloodmoonItem->setFlags(bloodmoonItem->flags() & !Qt::ItemIsEnabled & Qt::ItemIsUserCheckable);
bloodmoonItem->setData(Qt::CheckStateRole, Qt::Unchecked);
@ -114,12 +114,12 @@ bool Wizard::ComponentSelectionPage::validatePage()
QStringList components(field(QLatin1String("installation.components")).toStringList());
QString path(field(QLatin1String("installation.path")).toString());
qDebug() << components << path << mWizard->mInstallations[path];
// qDebug() << components << path << mWizard->mInstallations[path];
if (field(QLatin1String("installation.new")).toBool() == false) {
if (components.contains(QLatin1String("Tribunal")) && !components.contains(QLatin1String("Bloodmoon")))
{
if (mWizard->mInstallations[path]->hasBloodmoon)
if (mWizard->mInstallations[path].hasBloodmoon)
{
QMessageBox msgBox;
msgBox.setWindowTitle(tr("About to install Tribunal after Bloodmoon"));
@ -136,7 +136,7 @@ bool Wizard::ComponentSelectionPage::validatePage()
if (msgBox.clickedButton() == reinstallButton) {
// Force reinstallation
mWizard->mInstallations[path]->hasBloodmoon = false;
mWizard->mInstallations[path].hasBloodmoon = false;
QList<QListWidgetItem*> items = componentsList->findItems(QLatin1String("Bloodmoon"), Qt::MatchStartsWith);
foreach (QListWidgetItem *item, items) {

@ -47,7 +47,7 @@ bool Wizard::ExistingInstallationPage::validatePage()
// Or failed to be detected due to the target being a symlink
QString path(field(QLatin1String("installation.path")).toString());
QFile file(mWizard->mInstallations[path]->iniPath);
QFile file(mWizard->mInstallations[path].iniPath);
if (!file.exists()) {
QMessageBox msgBox;
@ -78,7 +78,7 @@ bool Wizard::ExistingInstallationPage::validatePage()
// A proper Morrowind.ini was selected, set it
QFileInfo info(iniFile);
mWizard->mInstallations[path]->iniPath = info.absoluteFilePath();
mWizard->mInstallations[path].iniPath = info.absoluteFilePath();
}
return true;

@ -36,11 +36,11 @@ void Wizard::InstallationPage::initializePage()
installProgressBar->setMaximum((components.count() * 100));
} else {
if (components.contains(QLatin1String("Tribunal"))
&& !mWizard->mInstallations[path]->hasTribunal)
&& !mWizard->mInstallations[path].hasTribunal)
installProgressBar->setMaximum(100);
if (components.contains(QLatin1String("Bloodmoon"))
&& !mWizard->mInstallations[path]->hasBloodmoon)
&& !mWizard->mInstallations[path].hasBloodmoon)
installProgressBar->setMaximum(installProgressBar->maximum() + 100);
}
@ -104,15 +104,15 @@ void Wizard::InstallationPage::startInstallation()
mUnshield->setInstallComponent(Wizard::Component_Morrowind, false);
if (components.contains(QLatin1String("Tribunal"))
&& !mWizard->mInstallations[path]->hasTribunal)
&& !mWizard->mInstallations[path].hasTribunal)
mUnshield->setInstallComponent(Wizard::Component_Tribunal, true);
if (components.contains(QLatin1String("Bloodmoon"))
&& !mWizard->mInstallations[path]->hasBloodmoon)
&& !mWizard->mInstallations[path].hasBloodmoon)
mUnshield->setInstallComponent(Wizard::Component_Bloodmoon, true);
// Set the location of the Morrowind.ini to update
mUnshield->setIniPath(mWizard->mInstallations[path]->iniPath);
mUnshield->setIniPath(mWizard->mInstallations[path].iniPath);
mUnshield->setupSettings();
}

@ -2,6 +2,8 @@
#include "mainwizard.hpp"
#include <QDebug>
Wizard::LanguageSelectionPage::LanguageSelectionPage(MainWizard *wizard) :
QWizardPage(wizard),
mWizard(wizard)
@ -27,18 +29,22 @@ void Wizard::LanguageSelectionPage::initializePage()
int Wizard::LanguageSelectionPage::nextId() const
{
// Check if we have to install something
QString path(field(QLatin1String("installation.path")).toString());
if (path.isEmpty())
if (field(QLatin1String("installation.new")).toBool() == true) {
return MainWizard::Page_ComponentSelection;
if (mWizard->mInstallations[path]->hasMorrowind == true &&
mWizard->mInstallations[path]->hasTribunal == true &&
mWizard->mInstallations[path]->hasBloodmoon == true)
{
return MainWizard::Page_Import;
} else {
return MainWizard::Page_ComponentSelection;
QString path(field(QLatin1String("installation.path")).toString());
if (path.isEmpty())
return MainWizard::Page_ComponentSelection;
// Check if we have to install something
if (mWizard->mInstallations[path].hasMorrowind == true &&
mWizard->mInstallations[path].hasTribunal == true &&
mWizard->mInstallations[path].hasBloodmoon == true)
{
return MainWizard::Page_Import;
} else {
return MainWizard::Page_ComponentSelection;
}
}
}

@ -246,23 +246,29 @@ void Wizard::MainWizard::runSettingsImporter()
arguments.append(QLatin1String("--cfg"));
arguments.append(userPath + QLatin1String("openmw.cfg"));
ProcessInvoker invoker(this);
ProcessInvoker *invoker = new ProcessInvoker(this);
if (!invoker.startProcess(QLatin1String("mwiniimport"), arguments, false))
if (!invoker->startProcess(QLatin1String("mwiniimport"), arguments, false))
return qApp->quit();;
connect(invoker->getProcess(), SIGNAL(started()),
this, SLOT(importerStarted()));
connect(invoker->getProcess(), SIGNAL(finished(int,QProcess::ExitStatus)),
this, SLOT(importerFinished(int,QProcess::ExitStatus)));
// Re-read the game settings
setupGameSettings();
// setupGameSettings();
}
void Wizard::MainWizard::addInstallation(const QString &path)
{
qDebug() << "add installation in: " << path;
Installation* install = new Installation();
Installation install;// = new Installation();
install->hasMorrowind = findFiles(QLatin1String("Morrowind"), path);
install->hasTribunal = findFiles(QLatin1String("Tribunal"), path);
install->hasBloodmoon = findFiles(QLatin1String("Bloodmoon"), path);
install.hasMorrowind = findFiles(QLatin1String("Morrowind"), path);
install.hasTribunal = findFiles(QLatin1String("Tribunal"), path);
install.hasBloodmoon = findFiles(QLatin1String("Bloodmoon"), path);
// Try to autodetect the Morrowind.ini location
QDir dir(path);
@ -276,7 +282,7 @@ void Wizard::MainWizard::addInstallation(const QString &path)
}
if (file.exists())
install->iniPath = file.fileName();
install.iniPath = file.fileName();
mInstallations.insert(QDir::toNativeSeparators(path), install);
@ -301,6 +307,21 @@ void Wizard::MainWizard::setupPages()
setStartId(Page_Intro);
}
void Wizard::MainWizard::importerStarted()
{
qDebug() << "importer started!";
}
void Wizard::MainWizard::importerFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
qDebug() << "importer finished!";
if (exitCode != 0 || exitStatus == QProcess::CrashExit)
return;
// Re-read the settings
setupGameSettings();
}
void Wizard::MainWizard::accept()
{
writeSettings();

@ -1,6 +1,7 @@
#ifndef MAINWIZARD_HPP
#define MAINWIZARD_HPP
#include <QProcess>
#include <QWizard>
#include <QMap>
@ -41,7 +42,7 @@ namespace Wizard
void addInstallation(const QString &path);
void runSettingsImporter();
QMap<QString, Installation*> mInstallations;
QMap<QString, Installation> mInstallations;
Files::ConfigurationManager mCfgMgr;
@ -66,6 +67,10 @@ namespace Wizard
QTextStream *mLog;
private slots:
void importerStarted();
void importerFinished(int exitCode, QProcess::ExitStatus exitStatus);
void accept();
void reject();

Loading…
Cancel
Save