diff options
author | David Robillard <d@drobilla.net> | 2018-12-26 19:25:51 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-10-27 13:13:58 +0100 |
commit | 36a418f0d8dfd10007e48d6e8cb796cfa8aa4d88 (patch) | |
tree | d498db3c1870a90e7ec91eba2ea4dcb9987f30e2 /src/byte_source.c | |
parent | 5d65a0b7b687ffbbd624d75b42ac3336ce353c39 (diff) | |
download | serd-36a418f0d8dfd10007e48d6e8cb796cfa8aa4d88.tar.gz serd-36a418f0d8dfd10007e48d6e8cb796cfa8aa4d88.tar.bz2 serd-36a418f0d8dfd10007e48d6e8cb796cfa8aa4d88.zip |
Hide fopen wrapper and use reader interface consistently
Diffstat (limited to 'src/byte_source.c')
-rw-r--r-- | src/byte_source.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/byte_source.c b/src/byte_source.c index 9d245004..fce0fadb 100644 --- a/src/byte_source.c +++ b/src/byte_source.c @@ -47,6 +47,7 @@ SerdStatus serd_byte_source_open_source(SerdByteSource* source, SerdReadFunc read_func, SerdStreamErrorFunc error_func, + SerdStreamCloseFunc close_func, void* stream, const char* name, size_t page_size) @@ -54,13 +55,14 @@ serd_byte_source_open_source(SerdByteSource* source, const Cursor cur = { name, 1, 1 }; memset(source, '\0', sizeof(*source)); + source->read_func = read_func; + source->error_func = error_func; + source->close_func = close_func; source->stream = stream; - source->from_stream = true; source->page_size = page_size; source->buf_size = page_size; source->cur = cur; - source->error_func = error_func; - source->read_func = read_func; + source->from_stream = true; if (page_size > 1) { source->file_buf = (uint8_t*)serd_bufalloc(page_size); @@ -101,9 +103,14 @@ serd_byte_source_open_string(SerdByteSource* source, const char* utf8) SerdStatus serd_byte_source_close(SerdByteSource* source) { + SerdStatus st = SERD_SUCCESS; + if (source->close_func) { + st = source->close_func(source->stream) ? SERD_ERR_UNKNOWN + : SERD_SUCCESS; + } if (source->page_size > 1) { free(source->file_buf); } memset(source, '\0', sizeof(*source)); - return SERD_SUCCESS; + return st; } |