diff options
author | David Robillard <d@drobilla.net> | 2011-08-21 04:44:37 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-08-21 04:44:37 +0000 |
commit | 59143950ece9b6de731e1b00d2ca7f6596ea7d39 (patch) | |
tree | 4b220343283b336d8c04c847a283c9eb018bdd26 /src/reader.c | |
parent | 95697f076150957f01a84315775ab081011714bb (diff) | |
download | serd-59143950ece9b6de731e1b00d2ca7f6596ea7d39.tar.gz serd-59143950ece9b6de731e1b00d2ca7f6596ea7d39.tar.bz2 serd-59143950ece9b6de731e1b00d2ca7f6596ea7d39.zip |
Gracefully handle NULL reader sinks.
Add serd_strerror.
Fix erroneously equal SERD_ERR_BAD_SYNTAX and SERD_ERR_BAD_ARG.
git-svn-id: http://svn.drobilla.net/serd/trunk@211 490d8e77-9747-427b-9fa3-0b8f29cee8a0
Diffstat (limited to 'src/reader.c')
-rw-r--r-- | src/reader.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/reader.c b/src/reader.c index 24802164..3cb2e3db 100644 --- a/src/reader.c +++ b/src/reader.c @@ -15,6 +15,7 @@ */ #include <assert.h> +#include <errno.h> #include <stdarg.h> #include <stdbool.h> #include <stdint.h> @@ -316,14 +317,15 @@ emit_statement(SerdReader* reader, SerdStatementFlags* flags, const SerdNode datatype = public_node(reader, d); const SerdNode lang = public_node_from_ref(reader, SERD_LITERAL, l); object.flags = f; - bool ret = !reader->statement_sink(reader->handle, - *flags, - &graph, - &subject, - &predicate, - &object, - &datatype, - &lang); + bool ret = !reader->statement_sink + || !reader->statement_sink(reader->handle, + *flags, + &graph, + &subject, + &predicate, + &object, + &datatype, + &lang); *flags = (*flags & SERD_ANON_CONT) ? SERD_ANON_CONT : 0; return ret; } @@ -1326,7 +1328,9 @@ read_base(SerdReader* reader) Ref uri; TRY_RET(uri = read_uriref(reader)); const SerdNode uri_node = public_node_from_ref(reader, SERD_URI, uri); - reader->base_sink(reader->handle, &uri_node); + if (reader->base_sink) { + reader->base_sink(reader->handle, &uri_node); + } pop_string(reader, uri); return true; } @@ -1339,7 +1343,7 @@ read_prefixID(SerdReader* reader) // `@' is already eaten in read_directive eat_string(reader, "prefix", 6); TRY_RET(read_ws_plus(reader)); - bool ret = false; + bool ret = true; Ref name = read_prefixName(reader); if (!name) { name = push_string(reader, "", 0); @@ -1350,7 +1354,9 @@ read_prefixID(SerdReader* reader) TRY_THROW(uri = read_uriref(reader)); const SerdNode name_node = public_node_from_ref(reader, SERD_LITERAL, name); const SerdNode uri_node = public_node_from_ref(reader, SERD_URI, uri); - ret = !reader->prefix_sink(reader->handle, &name_node, &uri_node); + if (reader->prefix_sink) { + ret = !reader->prefix_sink(reader->handle, &name_node, &uri_node); + } pop_string(reader, uri); except: pop_string(reader, name); @@ -1503,6 +1509,7 @@ serd_reader_read_file(SerdReader* reader, FILE* fd = fopen((const char*)path, "r"); if (!fd) { + fprintf(stderr, "Error opening file %s (%s)\n", path, strerror(errno)); return SERD_ERR_UNKNOWN; } SerdStatus ret = serd_reader_read_file_handle(reader, fd, path); |