From 60c69f60659b6a07dadb384cd7772a6a3b979dda Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 11 Jul 2021 10:20:19 -0400 Subject: Simplify ByteSource implementation --- src/byte_source.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'src/byte_source.c') diff --git a/src/byte_source.c b/src/byte_source.c index 0e6ae2be..df757376 100644 --- a/src/byte_source.c +++ b/src/byte_source.c @@ -28,20 +28,23 @@ SerdStatus serd_byte_source_page(SerdByteSource* const source) { - source->read_head = 0; + uint8_t* const buf = + (source->page_size > 1 ? source->file_buf : &source->read_byte); + const size_t n_read = - source->read_func(source->file_buf, 1, source->page_size, source->stream); + source->read_func(buf, 1, source->page_size, source->stream); - if (n_read == 0) { - source->file_buf[0] = '\0'; - source->eof = true; - return (source->error_func(source->stream) ? SERD_ERR_UNKNOWN - : SERD_FAILURE); - } + source->buf_size = n_read; + source->read_head = 0; + source->eof = false; if (n_read < source->page_size) { - source->file_buf[n_read] = '\0'; - source->buf_size = n_read; + buf[n_read] = '\0'; + if (n_read == 0) { + source->eof = true; + return (source->error_func(source->stream) ? SERD_ERR_UNKNOWN + : SERD_FAILURE); + } } return SERD_SUCCESS; @@ -56,6 +59,7 @@ serd_byte_source_open_source(SerdByteSource* const source, const SerdNode* const name, const size_t page_size) { + assert(page_size > 0); memset(source, '\0', sizeof(*source)); source->read_func = read_func; source->error_func = error_func; @@ -100,6 +104,7 @@ serd_byte_source_open_string(SerdByteSource* const source, { memset(source, '\0', sizeof(*source)); + source->page_size = 1; source->name = name ? serd_node_copy(name) : serd_new_string(SERD_STRING("string")); -- cgit v1.2.1