aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-01-25 16:14:02 +0000
committerDavid Robillard <d@drobilla.net>2011-01-25 16:14:02 +0000
commitda60fb781d5fcd4d0b3852cf9586d4f6ebed7dd9 (patch)
tree0bfce4c0c544b4765e5f1ff080af6b166e004835 /src
parente6b7791d17a630dc7d6d8387d627fc1d524425dc (diff)
downloadserd-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.c18
-rw-r--r--src/uri.c7
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);
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;