Add public URI resolver
authorJ. Ali Harlow <ali@juiblex.co.uk>
Tue Jul 05 09:40:01 2016 +0100 (2016-07-05)
changeset 4776ba4c0f3c9d1
parent 476 48e45439fd9a
child 478 8e4bf84a7bb8
Add public URI resolver
librazor/razor.h.in
librazor/util.c
     1.1 --- a/librazor/razor.h.in	Mon Jul 04 13:04:19 2016 +0100
     1.2 +++ b/librazor/razor.h.in	Tue Jul 05 09:40:01 2016 +0100
     1.3 @@ -696,6 +696,10 @@
     1.4  char *razor_path_relative_to_uri(const char *uri, const char *path,
     1.5  				 struct razor_error **error) RAZOR_MALLOC;
     1.6  
     1.7 +/* According to RFC 3986 ยง 5.2 */
     1.8 +char *razor_resolve_relative_uri(const char *base_uri, const char *relative_uri,
     1.9 +				 struct razor_error **error);
    1.10 +
    1.11  const char *razor_system_arch(void);
    1.12  
    1.13  int razor_dump_database(FILE *fp, const char *root_uri, const char *filename,
     2.1 --- a/librazor/util.c	Mon Jul 04 13:04:19 2016 +0100
     2.2 +++ b/librazor/util.c	Tue Jul 05 09:40:01 2016 +0100
     2.3 @@ -269,6 +269,33 @@
     2.4  	return concat;
     2.5  }
     2.6  
     2.7 +RAZOR_EXPORT char *
     2.8 +razor_resolve_relative_uri(const char *base_uri, const char *relative_uri,
     2.9 +			   struct razor_error **error)
    2.10 +{
    2.11 +	char *result;
    2.12 +	struct razor_uri ru, base, ref;
    2.13 +
    2.14 +	if (razor_uri_parse_uri(&base, base_uri, 1, error))
    2.15 +		return NULL;
    2.16 +
    2.17 +	if (razor_uri_parse_relative_ref(&ref, relative_uri, error)) {
    2.18 +		razor_uri_destroy(&base);
    2.19 +		return NULL;
    2.20 +	}
    2.21 +
    2.22 +	razor_uri_resolve(&ru, &base, &ref);
    2.23 +
    2.24 +	razor_uri_destroy(&base);
    2.25 +	razor_uri_destroy(&ref);
    2.26 +
    2.27 +	result = razor_uri_recompose(&ru);
    2.28 +
    2.29 +	razor_uri_destroy(&ru);
    2.30 +
    2.31 +	return result;
    2.32 +}
    2.33 +
    2.34  RAZOR_EXPORT const char *razor_system_arch(void)
    2.35  {
    2.36  #ifdef MSWIN_API