Fix config not being written in a rare circumstance
This commit is contained in:
parent
a84f393bd5
commit
0057ab9c5a
@ -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");
|
||||
}
|
||||
|
@ -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);
|
@ -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);
|
||||
|
@ -46,13 +46,6 @@ typedef struct firmHeader {
|
||||
u8 reserved2[0x30];
|
||||
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);
|
||||
|
Reference in New Issue
Block a user