summaryrefslogtreecommitdiff
path: root/pom.c
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2025-09-16 20:49:49 -0400
committerpommicket <pommicket@gmail.com>2025-09-16 20:52:22 -0400
commitea7b73aac55177d1d556d0c9dba04b0870d3aaf6 (patch)
tree98862ab518680573c4d1d77542bc88b5ec9ceb2a /pom.c
parent62bb1ffdee060819657161e260e75e3e1df017ac (diff)
Allow short reads from read_func
Diffstat (limited to 'pom.c')
-rw-r--r--pom.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/pom.c b/pom.c
index 99102da..b41b9d4 100644
--- a/pom.c
+++ b/pom.c
@@ -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;