diff options
author | David Robillard <d@drobilla.net> | 2011-02-10 22:22:27 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-02-10 22:22:27 +0000 |
commit | 05ea9fdadeeb3973998e4c00f5de4834dc2432d3 (patch) | |
tree | c0020dcef2891a9e4e1a4fe0ba2538591e4c119e /src/node.c | |
parent | 7e6fa773dba243e3cf11b98d223f6d417e73aa66 (diff) | |
download | serd-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.c | 25 |
1 files changed, 22 insertions, 3 deletions
@@ -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; |