aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-11-12 20:52:23 +0100
committerDavid Robillard <d@drobilla.net>2020-11-13 01:15:05 +0100
commitdddc46b13fa0379784c6369c656e37933ac623dc (patch)
tree31d09d623c11f49500b42e07566d066ab988dc59
parentfebc0828f271aa06681081217ee3ab2649dbf13a (diff)
downloadserd-dddc46b13fa0379784c6369c656e37933ac623dc.tar.gz
serd-dddc46b13fa0379784c6369c656e37933ac623dc.tar.bz2
serd-dddc46b13fa0379784c6369c656e37933ac623dc.zip
Allow setting the base URI of an Env to NULL
-rw-r--r--src/env.c8
-rw-r--r--test/test_env.c7
2 files changed, 12 insertions, 3 deletions
diff --git a/src/env.c b/src/env.c
index 431fef41..ac081ee0 100644
--- a/src/env.c
+++ b/src/env.c
@@ -70,13 +70,17 @@ serd_env_get_base_uri(const SerdEnv* env,
return &env->base_uri_node;
}
-// TODO: Make env nonnull in next major release
SerdStatus
serd_env_set_base_uri(SerdEnv* env,
const SerdNode* uri)
{
- if (!env || !uri) {
+ if (!env || (uri && uri->type != SERD_URI)) {
return SERD_ERR_BAD_ARG;
+ } else if (!uri) {
+ serd_node_free(&env->base_uri_node);
+ env->base_uri_node = SERD_NODE_NULL;
+ env->base_uri = SERD_URI_NULL;
+ return SERD_SUCCESS;
}
// Resolve base URI and create a new node and URI for it
diff --git a/test/test_env.c b/test/test_env.c
index 1ed7552e..36b8f6c3 100644
--- a/test/test_env.c
+++ b/test/test_env.c
@@ -43,7 +43,7 @@ test_env(void)
SerdEnv* env = serd_env_new(NULL);
serd_env_set_prefix_from_strings(env, USTR("eg.2"), USTR("http://example.org/"));
- assert(serd_env_set_base_uri(env, NULL));
+ assert(!serd_env_set_base_uri(env, NULL));
assert(serd_env_set_base_uri(env, &SERD_NODE_NULL));
assert(serd_node_equals(serd_env_get_base_uri(env, NULL), &SERD_NODE_NULL));
@@ -84,6 +84,11 @@ test_env(void)
SerdNode prefix_name;
assert(!serd_env_qualify(env, &shorter_uri, &prefix_name, &suffix));
+ assert(!serd_env_set_base_uri(env, &u));
+ assert(serd_node_equals(serd_env_get_base_uri(env, NULL), &u));
+ assert(!serd_env_set_base_uri(env, NULL));
+ assert(!serd_env_get_base_uri(env, NULL)->buf);
+
serd_env_free(env);
}