aboutsummaryrefslogtreecommitdiffstats
path: root/src/sink.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2022-01-02 14:12:54 -0500
committerDavid Robillard <d@drobilla.net>2022-01-28 21:57:05 -0500
commit155fceabe7070b6610d577734734d038d097b088 (patch)
tree5bbbf327a00c2637f85f006c4b429ecc3b3cb1a3 /src/sink.c
parent1159aea45d9bc4ade2e82856be403d58e050f32d (diff)
downloadserd-155fceabe7070b6610d577734734d038d097b088.tar.gz
serd-155fceabe7070b6610d577734734d038d097b088.tar.bz2
serd-155fceabe7070b6610d577734734d038d097b088.zip
Add assertions for all non-null pointers in the public API
Clang issues warnings at build time based on the SERD_NONNULL annotations, which is a much better approach in general. However, it does not cover cases where the API is being used with another compiler, or without a compiler that can statically check things at all (such as Python or other dynamic language bindings). In those situations, getting a clear assertion message is a lot less confusing than a random crash somewhere in serd, and it makes it clear that the bug is in the caller, so I think it's worth the tedious verbosity.
Diffstat (limited to 'src/sink.c')
-rw-r--r--src/sink.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/sink.c b/src/sink.c
index 4b7c6646..bd6f1193 100644
--- a/src/sink.c
+++ b/src/sink.c
@@ -52,12 +52,18 @@ serd_sink_free(SerdSink* sink)
SerdStatus
serd_sink_write_event(const SerdSink* sink, const SerdEvent* event)
{
+ assert(sink);
+ assert(event);
+
return sink->on_event ? sink->on_event(sink->handle, event) : SERD_SUCCESS;
}
SerdStatus
serd_sink_write_base(const SerdSink* sink, const SerdNode* uri)
{
+ assert(sink);
+ assert(uri);
+
const SerdBaseEvent ev = {SERD_BASE, uri};
return sink->on_event ? sink->on_event(sink->handle, (const SerdEvent*)&ev)
@@ -69,6 +75,10 @@ serd_sink_write_prefix(const SerdSink* sink,
const SerdNode* name,
const SerdNode* uri)
{
+ assert(sink);
+ assert(name);
+ assert(uri);
+
const SerdPrefixEvent ev = {SERD_PREFIX, name, uri};
return sink->on_event ? sink->on_event(sink->handle, (const SerdEvent*)&ev)
@@ -80,6 +90,9 @@ serd_sink_write_statement(const SerdSink* sink,
const SerdStatementFlags flags,
const SerdStatement* statement)
{
+ assert(sink);
+ assert(statement);
+
const SerdStatementEvent statement_ev = {SERD_STATEMENT, flags, statement};
SerdEvent ev = {SERD_STATEMENT};
ev.statement = statement_ev;
@@ -107,6 +120,9 @@ serd_sink_write(const SerdSink* sink,
SerdStatus
serd_sink_write_end(const SerdSink* sink, const SerdNode* node)
{
+ assert(sink);
+ assert(node);
+
const SerdEndEvent ev = {SERD_END, node};
return sink->on_event ? sink->on_event(sink->handle, (const SerdEvent*)&ev)