aboutsummaryrefslogtreecommitdiffstats
path: root/src/node.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-02-10 22:22:27 +0000
committerDavid Robillard <d@drobilla.net>2011-02-10 22:22:27 +0000
commit05ea9fdadeeb3973998e4c00f5de4834dc2432d3 (patch)
treec0020dcef2891a9e4e1a4fe0ba2538591e4c119e /src/node.c
parent7e6fa773dba243e3cf11b98d223f6d417e73aa66 (diff)
downloadserd-05ea9fdadeeb3973998e4c00f5de4834dc2432d3.tar.gz
serd-05ea9fdadeeb3973998e4c00f5de4834dc2432d3.tar.bz2
serd-05ea9fdadeeb3973998e4c00f5de4834dc2432d3.zip
Add base parameter to serd_node_new_uri and add serd_node_new_uri_from_node.
git-svn-id: http://svn.drobilla.net/serd/trunk@97 490d8e77-9747-427b-9fa3-0b8f29cee8a0
Diffstat (limited to 'src/node.c')
-rw-r--r--src/node.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/node.c b/src/node.c
index 1c89eb6d..005e9a01 100644
--- a/src/node.c
+++ b/src/node.c
@@ -72,15 +72,34 @@ string_sink(const void* buf, size_t len, void* stream)
SERD_API
SerdNode
-serd_node_new_uri(const SerdURI* uri, SerdURI* out)
+serd_node_new_uri_from_node(const SerdNode* uri_node,
+ const SerdURI* base,
+ SerdURI* out)
{
- const size_t len = serd_uri_string_length(uri);
+ // Parse (possibly relative) URI
+ SerdURI uri;
+ if (serd_uri_parse(uri_node->buf, &uri)) {
+ return serd_node_new_uri(&uri, base, out);
+ }
+ return SERD_NODE_NULL;
+}
+
+SERD_API
+SerdNode
+serd_node_new_uri(const SerdURI* uri, const SerdURI* base, SerdURI* out)
+{
+ SerdURI abs_uri = *uri;
+ if (base) {
+ serd_uri_resolve(uri, base, &abs_uri);
+ }
+
+ const size_t len = serd_uri_string_length(&abs_uri);
uint8_t* buf = malloc(len + 1);
SerdNode node = { SERD_URI, len + 1, len, buf }; // FIXME: UTF-8
uint8_t* ptr = buf;
- const size_t actual_len = serd_uri_serialise(uri, string_sink, &ptr);
+ const size_t actual_len = serd_uri_serialise(&abs_uri, string_sink, &ptr);
buf[actual_len] = '\0';
node.n_bytes = actual_len + 1;