Fix config not being written in a rare circumstance

This commit is contained in:
Aurora 2016-08-31 16:11:44 +02:00
parent a84f393bd5
commit 0057ab9c5a
4 changed files with 18 additions and 15 deletions

View File

@ -43,19 +43,22 @@ bool readConfig(const char *configPath)
return true;
}
void writeConfig(const char *configPath, u32 configTemp)
void writeConfig(const char *configPath, u32 configTemp, ConfigurationStatus needConfig)
{
/* If the configuration is different from previously, overwrite it.
Just the no-forcing flag being set is not enough */
if((configTemp & 0xFFFFFFEF) != configData.config)
if(needConfig == CREATE_CONFIGURATION || (configTemp & 0xFFFFFFEF) != configData.config)
{
if(needConfig == CREATE_CONFIGURATION)
{
memcpy(configData.magic, "CONF", 4);
configData.formatVersionMajor = CONFIG_VERSIONMAJOR;
configData.formatVersionMinor = CONFIG_VERSIONMINOR;
}
//Merge the new options and new boot configuration
configData.config = (configData.config & 0xFFFFFFC0) | (configTemp & 0x3F);
memcpy(configData.magic, "CONF", 4);
configData.formatVersionMajor = CONFIG_VERSIONMAJOR;
configData.formatVersionMinor = CONFIG_VERSIONMINOR;
if(!fileWrite(&configData, configPath, sizeof(cfgData)))
error("Error writing the configuration file");
}

View File

@ -39,8 +39,15 @@ typedef struct __attribute__((packed))
u32 config;
} cfgData;
typedef enum ConfigurationStatus
{
DONT_CONFIGURE = 0,
MODIFY_CONFIGURATION = 1,
CREATE_CONFIGURATION = 2
} ConfigurationStatus;
extern cfgData configData;
bool readConfig(const char *configPath);
void writeConfig(const char *configPath, u32 configTemp);
void writeConfig(const char *configPath, u32 configTemp, ConfigurationStatus needConfig);
void configMenu(bool oldPinStatus);

View File

@ -208,7 +208,7 @@ void main(void)
if(!isFirmlaunch)
{
configTemp |= (u32)nandType | ((u32)firmSource << 2);
writeConfig(configPath, configTemp);
writeConfig(configPath, configTemp, needConfig);
}
u32 firmVersion = loadFirm(&firmType, firmSource);

View File

@ -47,13 +47,6 @@ typedef struct firmHeader {
firmSectionHeader section[4];
} firmHeader;
typedef enum ConfigurationStatus
{
DONT_CONFIGURE = 0,
MODIFY_CONFIGURATION = 1,
CREATE_CONFIGURATION = 2
} ConfigurationStatus;
static inline u32 loadFirm(FirmwareType *firmType, FirmwareSource firmSource);
static inline void patchNativeFirm(u32 firmVersion, FirmwareSource nandType, u32 emuHeader, bool isA9lh);
static inline void patchLegacyFirm(FirmwareType firmType);