From da60fb781d5fcd4d0b3852cf9586d4f6ebed7dd9 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 25 Jan 2011 16:14:02 +0000 Subject: 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 --- src/serdi.c | 18 ++++++------------ src/uri.c | 7 +------ 2 files changed, 7 insertions(+), 18 deletions(-) (limited to 'src') 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); diff --git a/src/uri.c b/src/uri.c index 3c62c01f..2b10718d 100644 --- a/src/uri.c +++ b/src/uri.c @@ -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; -- cgit v1.2.1