diff options
author | David Robillard <d@drobilla.net> | 2020-06-28 23:26:48 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2022-01-13 23:05:24 -0500 |
commit | 55e28966226268a57edb07419ac419ef53ac437d (patch) | |
tree | 317a3e50480f97a415dae5a7d096726a0c730c0a /src/serdi.c | |
parent | b98bd7a32cf4302e0a210dd8558edd3ab2088525 (diff) | |
download | serd-55e28966226268a57edb07419ac419ef53ac437d.tar.gz serd-55e28966226268a57edb07419ac419ef53ac437d.tar.bz2 serd-55e28966226268a57edb07419ac419ef53ac437d.zip |
Make Reader always read from a ByteSource
Diffstat (limited to 'src/serdi.c')
-rw-r--r-- | src/serdi.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/serdi.c b/src/serdi.c index 2e04ae5a..3025b494 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -27,6 +27,7 @@ # include <io.h> #endif +#include <errno.h> #include <limits.h> #include <stdbool.h> #include <stdio.h> @@ -104,25 +105,36 @@ read_file(SerdWorld* const world, syntax = syntax ? syntax : serd_guess_syntax(filename); syntax = syntax ? syntax : SERD_TRIG; - SerdStatus st = SERD_SUCCESS; - SerdReader* reader = serd_reader_new(world, syntax, flags, sink, stack_size); - - serd_reader_add_blank_prefix(reader, add_prefix); - + SerdByteSource* byte_source = NULL; if (!strcmp(filename, "-")) { SerdNode* name = serd_new_string(SERD_STRING("stdin")); - st = serd_reader_start_stream( - reader, serd_file_read_byte, (SerdStreamErrorFunc)ferror, stdin, name, 1); + byte_source = serd_byte_source_new_function( + serd_file_read_byte, (SerdStreamErrorFunc)ferror, NULL, stdin, name, 1); serd_node_free(name); } else { - st = serd_reader_start_file(reader, filename, bulk_read); + byte_source = + serd_byte_source_new_filename(filename, bulk_read ? SERD_PAGE_SIZE : 1u); + } + + if (!byte_source) { + SERDI_ERRORF( + "failed to open input file `%s' (%s)\n", filename, strerror(errno)); + + return SERD_ERR_UNKNOWN; } + SerdReader* reader = serd_reader_new(world, syntax, flags, sink, stack_size); + + serd_reader_add_blank_prefix(reader, add_prefix); + + SerdStatus st = serd_reader_start(reader, byte_source); + st = st ? st : serd_reader_read_document(reader); serd_reader_free(reader); + serd_byte_source_free(byte_source); return st; } @@ -332,6 +344,9 @@ main(int argc, char** argv) SerdStatus st = SERD_SUCCESS; SerdNode* input_name = NULL; if (input_string) { + SerdByteSource* const byte_source = + serd_byte_source_new_string(input_string, NULL); + SerdReader* const reader = serd_reader_new(world, input_syntax ? input_syntax : SERD_TRIG, @@ -341,13 +356,12 @@ main(int argc, char** argv) serd_reader_add_blank_prefix(reader, add_prefix); - SerdNode* name = serd_new_string(SERD_STRING("string")); - if (!(st = serd_reader_start_string(reader, input_string, name))) { + if (!(st = serd_reader_start(reader, byte_source))) { st = serd_reader_read_document(reader); } - serd_node_free(name); serd_reader_free(reader); + serd_byte_source_free(byte_source); } size_t prefix_len = 0; |