diff options
author | David Robillard <d@drobilla.net> | 2017-09-23 21:30:52 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2017-09-23 21:30:52 +0200 |
commit | 8d954ab071e286f0b2bdfc542bb3725eb5a2ab0e (patch) | |
tree | 6bc42d4c19c76094f39b24edde892f9a77e03edb /src/reader.c | |
parent | 730052666c993e40606a9633865eb46e61867f78 (diff) | |
download | serd-8d954ab071e286f0b2bdfc542bb3725eb5a2ab0e.tar.gz serd-8d954ab071e286f0b2bdfc542bb3725eb5a2ab0e.tar.bz2 serd-8d954ab071e286f0b2bdfc542bb3725eb5a2ab0e.zip |
Add basic error tolerant parsing for line-based formats
Diffstat (limited to 'src/reader.c')
-rw-r--r-- | src/reader.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/reader.c b/src/reader.c index afaf411e..9e30f9c1 100644 --- a/src/reader.c +++ b/src/reader.c @@ -1669,11 +1669,25 @@ read_statement(SerdReader* reader) return ret; } +static void +skip_until(SerdReader* reader, uint8_t byte) +{ + for (uint8_t c = 0; (c = peek_byte(reader)) && c != byte;) { + eat_byte_safe(reader, c); + } +} + static bool read_turtleTrigDoc(SerdReader* reader) { while (!reader->eof) { - TRY_RET(read_statement(reader)); + if (!read_statement(reader)) { + if (reader->strict) { + return 0; + } + skip_until(reader, '\n'); + reader->status = SERD_ERR_BAD_SYNTAX; + } } return reader->status <= SERD_FAILURE; } |