diff options
author | David Robillard <d@drobilla.net> | 2018-12-29 17:36:15 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-06-21 18:12:04 +0200 |
commit | 87a0f519dce09e60bb378d278dff5ee7082d70f1 (patch) | |
tree | 273be45faf2dfca6d70e70b9e5afd437c08aa1b3 /src/sink.c | |
parent | 6344b9ffe89cd3662bef9b6eca3ad4cc56bb608c (diff) | |
download | serd-87a0f519dce09e60bb378d278dff5ee7082d70f1.tar.gz serd-87a0f519dce09e60bb378d278dff5ee7082d70f1.tar.bz2 serd-87a0f519dce09e60bb378d278dff5ee7082d70f1.zip |
Add Env to Sink
This isn't technically necessary for any sink, but is a pattern common to every
sink implementation in serd, so having it here reduces boilerplate and
parameters in user code.
Diffstat (limited to 'src/sink.c')
-rw-r--r-- | src/sink.c | 20 |
1 files changed, 17 insertions, 3 deletions
@@ -23,11 +23,13 @@ #include <stdlib.h> SerdSink* -serd_sink_new(void* handle) +serd_sink_new(void* handle, SerdEnv* env) { SerdSink* sink = (SerdSink*)calloc(1, sizeof(SerdSink)); sink->handle = handle; + sink->env = env; + return sink; } @@ -37,6 +39,12 @@ serd_sink_free(SerdSink* sink) free(sink); } +const SerdEnv* +serd_sink_get_env(const SerdSink* sink) +{ + return sink->env; +} + SerdStatus serd_sink_set_base_func(SerdSink* sink, SerdBaseSink base_func) { @@ -68,7 +76,10 @@ serd_sink_set_end_func(SerdSink* sink, SerdEndSink end_func) SerdStatus serd_sink_write_base(const SerdSink* sink, const SerdNode* uri) { - return sink->base ? sink->base(sink->handle, uri) : SERD_SUCCESS; + const SerdStatus st = (sink->env ? serd_env_set_base_uri(sink->env, uri) + : SERD_SUCCESS); + + return (!st && sink->base) ? sink->base(sink->handle, uri) : st; } SerdStatus @@ -76,7 +87,10 @@ serd_sink_write_prefix(const SerdSink* sink, const SerdNode* name, const SerdNode* uri) { - return sink->prefix ? sink->prefix(sink->handle, name, uri) : SERD_SUCCESS; + const SerdStatus st = (sink->env ? serd_env_set_prefix(sink->env, name, uri) + : SERD_SUCCESS); + + return (!st && sink->prefix) ? sink->prefix(sink->handle, name, uri) : st; } SerdStatus |