diff options
author | David Robillard <d@drobilla.net> | 2020-08-15 20:11:19 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2022-01-13 23:03:37 -0500 |
commit | a10fddf0f697e78325ddcfbc71af8f154ffd2a82 (patch) | |
tree | 75c2dd20aef99bff82dc81c93ab29b81313a9c8e /src/reader.h | |
parent | 0839a0fda214250c41c07c799c700f4432e54963 (diff) | |
download | serd-a10fddf0f697e78325ddcfbc71af8f154ffd2a82.tar.gz serd-a10fddf0f697e78325ddcfbc71af8f154ffd2a82.tar.bz2 serd-a10fddf0f697e78325ddcfbc71af8f154ffd2a82.zip |
Improve reader error handling
Diffstat (limited to 'src/reader.h')
-rw-r--r-- | src/reader.h | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/reader.h b/src/reader.h index 9f48601d..632d5257 100644 --- a/src/reader.h +++ b/src/reader.h @@ -120,26 +120,31 @@ eat_byte_safe(SerdReader* reader, const int byte) return c; } -static inline int +static inline SerdStatus eat_byte_check(SerdReader* reader, const int byte) { const int c = peek_byte(reader); if (c != byte) { - r_err(reader, SERD_ERR_BAD_SYNTAX, "expected `%c', not `%c'\n", byte, c); - return 0; + return r_err( + reader, SERD_ERR_BAD_SYNTAX, "expected `%c', not `%c'\n", byte, c); } - return eat_byte_safe(reader, byte); + + eat_byte_safe(reader, byte); + return SERD_SUCCESS; } static inline SerdStatus eat_string(SerdReader* reader, const char* str, unsigned n) { + SerdStatus st = SERD_SUCCESS; + for (unsigned i = 0; i < n; ++i) { - if (!eat_byte_check(reader, ((const uint8_t*)str)[i])) { - return SERD_ERR_BAD_SYNTAX; + if ((st = eat_byte_check(reader, ((const uint8_t*)str)[i]))) { + return st; } } - return SERD_SUCCESS; + + return st; } static inline SerdStatus |