diff --git a/src/app/CFGFileParser.cpp b/src/app/CFGFileParser.cpp index 7f1b4f0..d5ae89b 100644 --- a/src/app/CFGFileParser.cpp +++ b/src/app/CFGFileParser.cpp @@ -35,19 +35,22 @@ void *CFGFileParser::parseFile() if(parsedParameter == NULL) _state = ERROR; //printf("%c",readChar); - }//Add case when we start with a single quote (allowed and not an error) + } + else if(readChar == '\'') + { + _state = OPENING_QUOTE; + _type = PARAMETER; + } else _state = ERROR; break; case COMMENT_SECTION: - if(readChar == '\r') _state = LINE_BREAK; - if(readChar == '\n') _state = LINE_BREAK; + if(readChar == '\r' || readChar == '\n') _state = LINE_BREAK; break; case LINE_BREAK: if(readChar == '#') _state = COMMENT_SECTION; - else if(readChar == '\n') _state = LINE_BREAK; - else if(readChar == '\r') _state = LINE_BREAK; + else if(readChar == '\r' || readChar == '\n') _state = LINE_BREAK; else if((readChar >= 65 && readChar <= 90) || (readChar >= 97 && readChar <= 122) || (readChar >= 48 && readChar <= 57)) { _state = PARAM_SECTION; @@ -64,24 +67,11 @@ void *CFGFileParser::parseFile() } else _state = ERROR; - break; case PARAM_SECTION: if(readChar == '\'')_state = OPENING_QUOTE; else if(readChar == ':') _state = SEPARATION; - else if(readChar == '\n') - { - _state = LINE_BREAK; - if(parsedParameter != NULL) - { - //printf("%s --> %s\n", parsedParameter, parsedValue); - dictioRef->addParameter(parsedParameter, parsedValue == NULL ? "":parsedValue); - free(parsedParameter);free(parsedValue); - parsedParameter = NULL; - parsedValue = NULL; - } - } - else if(readChar == '\r') + else if(readChar == '\r' || readChar == '\n') { _state = LINE_BREAK; if(parsedParameter != NULL) @@ -133,13 +123,20 @@ void *CFGFileParser::parseFile() } else _state = ERROR; - break; case SEPARATION: _type = VALUE; if(readChar == '\'')_state = OPENING_QUOTE; - //Add the usual verification (readChar >= 65 && readChar <= 90) || (readChar >= 97 && readChar <= 122) || (readChar >= 48 && readChar <= 57) - else _state = PARAM_SECTION; //Should be an error + else if(readChar == ' ') _state = PARAM_SECTION; + else if((readChar >= 65 && readChar <= 90) || (readChar >= 97 && readChar <= 122) || (readChar >= 48 && readChar <= 57)) + { + _state = PARAM_SECTION; + + parsedValue = addChar(parsedValue, readChar); + if(parsedValue == NULL) + _state = ERROR; + } + else _state = ERROR; break; case ERROR: dictioRef->dispose(); @@ -148,7 +145,6 @@ void *CFGFileParser::parseFile() free(parsedParameter); parsedValue = NULL; parsedParameter = NULL; - file.close(); return NULL; break; }