Fix parsing last line without CRLF/LF.

Check EOF at the end of the buffer.
This commit is contained in:
Raphael Coeffic
2021-12-31 10:53:11 +01:00
parent 9f348b513e
commit c2c23c43d9
4 changed files with 11 additions and 0 deletions
+1
View File
@@ -381,6 +381,7 @@ bool ModelsList::loadYaml()
if (bytes_read == 0)
break;
if (f_eof(&file)) yp.set_eof();
if (yp.parse(line, bytes_read) != YamlParser::CONTINUE_PARSING)
break;
}
+1
View File
@@ -58,6 +58,7 @@ const char * readYamlFile(const char* fullpath, const YamlParserCalls* calls, vo
if (bytes_read == 0)
break;
if (f_eof(&file)) yp.set_eof();
if (yp.parse(buffer, bytes_read) != YamlParser::CONTINUE_PARSING)
break;
}
+6
View File
@@ -40,6 +40,7 @@ void YamlParser::init(const YamlParserCalls* parser_calls, void* parser_ctx)
calls = parser_calls;
ctx = parser_ctx;
reset();
eof = false;
}
void YamlParser::reset()
@@ -311,6 +312,11 @@ YamlParser::parse(const char* buffer, unsigned int size)
c++;
} // for each char
if ((state == ps_Val) && eof && node_found) {
// TODO: trim spaces at the end?
calls->set_attr(ctx, scratch_buf, scratch_len);
}
return CONTINUE_PARSING;
}
+3
View File
@@ -73,6 +73,7 @@ class YamlParser
uint8_t scratch_len;
bool node_found;
bool eof;
// tree iterator state
const YamlParserCalls* calls;
@@ -98,6 +99,8 @@ public:
void init(const YamlParserCalls* parser_calls, void* parser_ctx);
YamlResult parse(const char* buffer, unsigned int size);
void set_eof() { eof = true; }
};
#endif