aboutsummaryrefslogtreecommitdiffstats
path: root/src/byte_source.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-07-11 10:20:19 -0400
committerDavid Robillard <d@drobilla.net>2022-01-13 23:05:17 -0500
commit60c69f60659b6a07dadb384cd7772a6a3b979dda (patch)
tree47feb99487cb750dba1a421c025ef8fff9ad446a /src/byte_source.c
parent04084d0c36fc15179d195b2a8f759adebb609592 (diff)
downloadserd-60c69f60659b6a07dadb384cd7772a6a3b979dda.tar.gz
serd-60c69f60659b6a07dadb384cd7772a6a3b979dda.tar.bz2
serd-60c69f60659b6a07dadb384cd7772a6a3b979dda.zip
Simplify ByteSource implementation
Diffstat (limited to 'src/byte_source.c')
-rw-r--r--src/byte_source.c25
1 files changed, 15 insertions, 10 deletions
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"));