diff options
author | David Robillard <d@drobilla.net> | 2011-01-25 16:14:02 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-01-25 16:14:02 +0000 |
commit | da60fb781d5fcd4d0b3852cf9586d4f6ebed7dd9 (patch) | |
tree | 0bfce4c0c544b4765e5f1ff080af6b166e004835 /src | |
parent | e6b7791d17a630dc7d6d8387d627fc1d524425dc (diff) | |
download | serd-da60fb781d5fcd4d0b3852cf9586d4f6ebed7dd9.tar.gz serd-da60fb781d5fcd4d0b3852cf9586d4f6ebed7dd9.tar.bz2 serd-da60fb781d5fcd4d0b3852cf9586d4f6ebed7dd9.zip |
Fix URI resolution of absolute URIs.
Better URI test coverage.
git-svn-id: http://svn.drobilla.net/serd/trunk@64 490d8e77-9747-427b-9fa3-0b8f29cee8a0
Diffstat (limited to 'src')
-rw-r--r-- | src/serdi.c | 18 | ||||
-rw-r--r-- | src/uri.c | 7 |
2 files changed, 7 insertions, 18 deletions
diff --git a/src/serdi.c b/src/serdi.c index 451905b8..467c3275 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -107,19 +107,13 @@ event_base(void* handle, return false; } - if (!base_uri.scheme.len) { // URI has no scheme, resolve relative URI - SerdURI abs_base_uri; - if (!serd_uri_resolve(&base_uri, &state->base_uri, &abs_base_uri)) { - fprintf(stderr, "error: failed to resolve new base URI\n"); - return false; - } - base_uri_node = serd_node_new_uri(&abs_base_uri, &base_uri); - } else { - SerdURI new_base_uri; - base_uri_node = serd_node_new_uri(&base_uri, &new_base_uri); - base_uri = new_base_uri; + SerdURI abs_base_uri; + if (!serd_uri_resolve(&base_uri, &state->base_uri, &abs_base_uri)) { + fprintf(stderr, "error: failed to resolve new base URI\n"); + return false; } - + base_uri_node = serd_node_new_uri(&abs_base_uri, &base_uri); + state->base_uri_node = base_uri_node; state->base_uri = base_uri; serd_writer_set_base_uri(state->writer, &base_uri); @@ -187,17 +187,12 @@ SERD_API bool serd_uri_resolve(const SerdURI* r, const SerdURI* base, SerdURI* t) { - assert(!r->scheme.len); // r is relative - // See http://tools.ietf.org/html/rfc3986#section-5.2.2 t->path_base.buf = NULL; t->path_base.len = 0; if (r->scheme.len) { - t->scheme = r->scheme; - t->authority = r->authority; - t->path = r->path; - t->query = r->query; + *t = *r; } else { if (r->authority.len) { t->authority = r->authority; |