diff --git a/src/app/CFGFileParser.cpp b/src/app/CFGFileParser.cpp index e09cb2e..c6c611f 100644 --- a/src/app/CFGFileParser.cpp +++ b/src/app/CFGFileParser.cpp @@ -13,15 +13,16 @@ void *CFGFileParser::parseFile() CFGDictionary *dictioRef = new CFGDictionary; char readChar(0), *parsedParameter(NULL), *parsedValue(NULL); + if(!_sdCardManager.isMounted()) return NULL; + file = _sdCardManager.open(_resource); if(!file) { delete dictioRef; - file.close(); return NULL; } - _state = INIT; + _state = INIT; while(file.available()) { readChar = (char)file.read(); @@ -167,17 +168,18 @@ void *CFGFileParser::parseFile() boolean CFGFileParser::save(void *data) { - if(data == NULL) - return false; + if(data == NULL) return false; + Dictionary *ref = (Dictionary *) data; - int truncateHere(0); + uint64_t truncateHere(0); char readChar(0); + + if(!_sdCardManager.isMounted()) return NULL; File file = _sdCardManager.open(_resource, FILE_READWRITE); if(!file) { - file.close(); return false; } @@ -187,65 +189,65 @@ boolean CFGFileParser::save(void *data) //We find out where to truncate the file while(file.available()) { - readChar = (char)file.read(); - switch(_state) - { - case INIT: - if(readChar == '#') - { - truncateHere++; - _state = COMMENT_SECTION; - } - else - _state = DONE; - break; - case COMMENT_SECTION: - truncateHere++; - if(readChar == '\n') _state = LINE_BREAK; - break; - case LINE_BREAK: - truncateHere++; - if(readChar == '#') - _state = COMMENT_SECTION; - else if(readChar == '\n') _state = DONE; - break; - } + readChar = (char)file.read(); + switch(_state) + { + case INIT: + if(readChar == '#') + { + truncateHere++; + _state = COMMENT_SECTION; + } + else + _state = DONE; + break; + case COMMENT_SECTION: + truncateHere++; + if(readChar == '\n') _state = LINE_BREAK; + break; + case LINE_BREAK: + truncateHere++; + if(readChar == '#') + _state = COMMENT_SECTION; + else if(readChar == '\n') _state = DONE; + break; + } } if(!file.truncate(truncateHere)) { - file.close(); - return false; + file.close(); + return false; } //Let's write the settings for(int i = 0; i < ref->count(); i++) { - CFGParameterValue *cfgPV = ref->getAt(i); - - if(cfgPV->isQuotedParameter()) - { - file.write('\''); - file.print(cfgPV->getParameter()); - file.write('\''); - } - else - { - file.print(cfgPV->getParameter()); - } - - file.print(F(" : ")); - - if(cfgPV->isQuotedValue()) - { - file.write('\''); - file.print(cfgPV->stringValue()); - file.println('\''); - } - else - { - file.println(cfgPV->stringValue()); - } + CFGParameterValue *cfgPV = ref->getAt(i); + + if(cfgPV->isQuotedParameter()) + { + file.write('\''); + file.print(cfgPV->getParameter()); + file.write('\''); + } + else + { + file.print(cfgPV->getParameter()); + } + + file.print(F(" : ")); + + if(cfgPV->isQuotedValue()) + { + file.write('\''); + file.print(cfgPV->stringValue()); + file.println('\''); + } + else + { + file.println(cfgPV->stringValue()); + } } file.close(); diff --git a/src/app/CFGFileParser.h b/src/app/CFGFileParser.h index 5067596..e7eaf2f 100644 --- a/src/app/CFGFileParser.h +++ b/src/app/CFGFileParser.h @@ -7,6 +7,9 @@ #include "definition.h" #include "CFGParameterValue.h" +//Forward class declaration because of cross includes... +class SDCardManager; + class CFGFileParser : public AbstractParser { public: