# HG changeset patch # User J. Ali Harlow # Date 1467708001 -3600 # Node ID 6ba4c0f3c9d110ec1fcb009270d05d1b61539dac # Parent 48e45439fd9ac8f4c33d6d1faa87237426222a34 Add public URI resolver diff -r 48e45439fd9a -r 6ba4c0f3c9d1 librazor/razor.h.in --- a/librazor/razor.h.in Mon Jul 04 13:04:19 2016 +0100 +++ b/librazor/razor.h.in Tue Jul 05 09:40:01 2016 +0100 @@ -696,6 +696,10 @@ char *razor_path_relative_to_uri(const char *uri, const char *path, struct razor_error **error) RAZOR_MALLOC; +/* According to RFC 3986 ยง 5.2 */ +char *razor_resolve_relative_uri(const char *base_uri, const char *relative_uri, + struct razor_error **error); + const char *razor_system_arch(void); int razor_dump_database(FILE *fp, const char *root_uri, const char *filename, diff -r 48e45439fd9a -r 6ba4c0f3c9d1 librazor/util.c --- a/librazor/util.c Mon Jul 04 13:04:19 2016 +0100 +++ b/librazor/util.c Tue Jul 05 09:40:01 2016 +0100 @@ -269,6 +269,33 @@ return concat; } +RAZOR_EXPORT char * +razor_resolve_relative_uri(const char *base_uri, const char *relative_uri, + struct razor_error **error) +{ + char *result; + struct razor_uri ru, base, ref; + + if (razor_uri_parse_uri(&base, base_uri, 1, error)) + return NULL; + + if (razor_uri_parse_relative_ref(&ref, relative_uri, error)) { + razor_uri_destroy(&base); + return NULL; + } + + razor_uri_resolve(&ru, &base, &ref); + + razor_uri_destroy(&base); + razor_uri_destroy(&ref); + + result = razor_uri_recompose(&ru); + + razor_uri_destroy(&ru); + + return result; +} + RAZOR_EXPORT const char *razor_system_arch(void) { #ifdef MSWIN_API