diff --git a/source/arm11/config.c b/source/arm11/config.c index 0cee1ff..f43f44b 100644 --- a/source/arm11/config.c +++ b/source/arm11/config.c @@ -181,7 +181,10 @@ // terminate string buf filebuf[fileSize] = '\0'; - return parseConfigFile(); + if(!parseConfigFile()) + goto fail; + + return true; fail: @@ -271,13 +274,14 @@ static bool createConfigFile() { - char temp = '\0'; + // set default settings for new config files + const char *temp = "BOOT_MODE = Normal\n"; bool ret; if(filebuf) panicMsg("config: internal error"); - filebuf = &temp; + filebuf = (char*)temp; ret = writeConfigFile(); @@ -439,9 +443,11 @@ if(newLen > curTextLen) { size_t backupLen = curLen - (textData - filebuf) - curTextLen + 1; + char *tempBuf = (char *) malloc(backupLen); if(!tempBuf) - return 0; + panicMsg("writeUpdateDefinitionText OOM!"); + memcpy(tempBuf, textData + curTextLen, backupLen); memcpy_s(filebuf, MAX_FILE_SIZE + 1, textData - filebuf + newLen, @@ -503,12 +509,17 @@ break; } while(p > filebuf); - lineBegin = isEOL(c) ? p + 1 : p; - + if(isEOL(c)) + lineBegin = p + 2; + else + { + if(p != filebuf) panicMsg("removeDefinition BUG!"); + lineBegin = p; + } /* find the end of this line */ - p = (char *)attrText; + p = (char *)attrText + attrLength; do { @@ -883,18 +894,16 @@ void configRestoreDefaults() { + const u32 defaultMode = BootModeNormal; + if(!configLoaded) return; - - for(int key=0; key