diff options
author | pommicket <pommicket@gmail.com> | 2025-09-16 20:49:49 -0400 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2025-09-16 20:52:22 -0400 |
commit | ea7b73aac55177d1d556d0c9dba04b0870d3aaf6 (patch) | |
tree | 98862ab518680573c4d1d77542bc88b5ec9ceb2a /pom.c | |
parent | 62bb1ffdee060819657161e260e75e3e1df017ac (diff) |
Allow short reads from read_func
Diffstat (limited to 'pom.c')
-rw-r--r-- | pom.c | 16 |
1 files changed, 4 insertions, 12 deletions
@@ -170,8 +170,6 @@ struct parser { size_t count; } items; bool - // last call to read_func returned <size - short_read, // end-of-file reached eof, // memory allocation failed @@ -446,22 +444,16 @@ static bool parser_read_to_buf(struct parser *parser, bool skip_bom) { if (parser->eof) return false; uint8_t utf8_state = parser->utf8_state; - if (parser->short_read) { // last read was short, so we're at EOF - // EOF reached. - eof: + char *buf = parser->buf; + size_t read_count = parser->read_func(parser->userdata, buf, sizeof parser->buf - 1); + parser->buf_pos = 0; + if (read_count == 0) { if (utf8_state) { parser_error(parser, ERROR_INVALID_UTF8); } parser->eof = true; return false; } - char *buf = parser->buf; - size_t read_count = parser->read_func(parser->userdata, buf, sizeof parser->buf - 1); - parser->buf_pos = 0; - if (read_count == 0) - goto eof; - if (read_count < sizeof parser->buf - 1) - parser->short_read = true; if (parser->leftover_cr && buf[0] != '\n') parser_error(parser, ERROR_ASCII_CONTROL, '\r'); size_t in = 0, out = 0; |