Added check in the backend to see if write is disabled

This commit is contained in:
Gareth Poole 2014-11-02 01:08:48 -04:00
parent 2ca12e7f38
commit 42e8cc75d6
5 changed files with 15 additions and 0 deletions

View file

@ -63,6 +63,7 @@ void Config::ReadCore() {
void Config::ReadData() { void Config::ReadData() {
Settings::values.use_virtual_sd = glfw_config->GetBoolean("Data Storage", "use_virtual_sd", true); Settings::values.use_virtual_sd = glfw_config->GetBoolean("Data Storage", "use_virtual_sd", true);
Settings::values.virtual_sd_writable = glfw_config->GetBoolean("Data Storage", "virtual_sd_writable", true);
} }
void Config::Reload() { void Config::Reload() {

View file

@ -82,12 +82,14 @@ void Config::SaveCore() {
void Config::ReadData() { void Config::ReadData() {
qt_config->beginGroup("Data Storage"); qt_config->beginGroup("Data Storage");
Settings::values.use_virtual_sd = qt_config->value("use_virtual_sd", true).toBool(); Settings::values.use_virtual_sd = qt_config->value("use_virtual_sd", true).toBool();
Settings::values.virtual_sd_writable = qt_config->value("virtual_sd_writable", true).toBool();
qt_config->endGroup(); qt_config->endGroup();
} }
void Config::SaveData() { void Config::SaveData() {
qt_config->beginGroup("Data Storage"); qt_config->beginGroup("Data Storage");
qt_config->setValue("use_virtual_sd", Settings::values.use_virtual_sd); qt_config->setValue("use_virtual_sd", Settings::values.use_virtual_sd);
qt_config->setValue("virtual_sd_writable", Settings::values.virtual_sd_writable);
qt_config->endGroup(); qt_config->endGroup();
} }

View file

@ -50,6 +50,11 @@ bool Archive_SDMC::Initialize() {
* @return Opened file, or nullptr * @return Opened file, or nullptr
*/ */
std::unique_ptr<File> Archive_SDMC::OpenFile(const std::string& path, const Mode mode) const { std::unique_ptr<File> Archive_SDMC::OpenFile(const std::string& path, const Mode mode) const {
if((mode.write_flag || mode.create_flag) && !Settings::values.virtual_sd_writable) {
ERROR_LOG(KERNEL, "Cannot open archive %s in write or create mode while the SD card is set to read-only.");
return nullptr;
}
DEBUG_LOG(FILESYS, "called path=%s mode=%d", path.c_str(), mode); DEBUG_LOG(FILESYS, "called path=%s mode=%d", path.c_str(), mode);
File_SDMC* file = new File_SDMC(this, path, mode); File_SDMC* file = new File_SDMC(this, path, mode);
if (!file->Open()) if (!file->Open())

View file

@ -3,6 +3,7 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <sys/stat.h> #include <sys/stat.h>
#include <core/settings.h>
#include "common/common_types.h" #include "common/common_types.h"
#include "common/file_util.h" #include "common/file_util.h"
@ -37,6 +38,11 @@ bool File_SDMC::Open() {
return false; return false;
} }
if((mode.write_flag || mode.create_flag) && !Settings::values.virtual_sd_writable) {
ERROR_LOG(KERNEL, "Cannot open file %s in write or create mode while the SD card is set to read-only.");
return false;
}
std::string mode_string; std::string mode_string;
if (mode.read_flag && mode.write_flag) if (mode.read_flag && mode.write_flag)
mode_string = "w+"; mode_string = "w+";

View file

@ -32,6 +32,7 @@ struct Values {
// Data Storage // Data Storage
bool use_virtual_sd; bool use_virtual_sd;
bool virtual_sd_writable;
} extern values; } extern values;
} }