/** * librdf_new_uri_relative_to_base: * @base_uri: absolute base URI * @uri_string: relative URI string * * Constructor - create a new #librdf_uri object from a URI string relative to a base URI. * * An empty uri_string or NULL is equivalent to * librdf_new_uri_from_uri(base_uri) * * Return value: a new #librdf_uri object or NULL on failure **/ librdf_uri* librdf_new_uri_relative_to_base(librdf_uri* base_uri, const unsigned char *uri_string) { unsigned char *buffer; int buffer_length; librdf_uri* new_uri; librdf_world *world=base_uri->world; LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(base_uri, librdf_uri, NULL); if(!uri_string) return NULL; /* If URI string is empty, just copy base URI */ if(!*uri_string) return librdf_new_uri_from_uri(base_uri); /* +2 is for \0 plus an extra 1 for adding any missing URI path '/' */ buffer_length=base_uri->string_length + strlen((const char*)uri_string) +2; buffer=(unsigned char*)LIBRDF_MALLOC(cstring, buffer_length); if(!buffer) return NULL; raptor_uri_resolve_uri_reference(base_uri->string, uri_string, buffer, buffer_length); new_uri=librdf_new_uri(world, buffer); LIBRDF_FREE(cstring, buffer); return new_uri; }
static int assert_resolve_uri (const char *base_uri, const char *reference_uri, const char *absolute_uri) { unsigned char buffer[256]; raptor_uri_resolve_uri_reference ((const unsigned char*)base_uri, (const unsigned char*)reference_uri, buffer, sizeof (buffer)); if (strcmp((const char*)buffer, absolute_uri)) { fprintf(stderr, "FAIL relative %s gave %s != %s\n", reference_uri, buffer, absolute_uri); return 1; } return 0; }
static raptor_uri* raptor_default_new_uri_relative_to_base(void *context, raptor_uri *base_uri, const unsigned char *uri_string) { raptor_uri* new_uri; size_t new_uri_len=strlen((const char*)base_uri)+strlen((const char*)uri_string)+1; new_uri=(raptor_uri*)RAPTOR_MALLOC(cstring, new_uri_len+1); if(!new_uri) return NULL; /* If URI string is empty, just copy base URI */ if(!*uri_string) { strcpy((char*)new_uri, (char*)base_uri); return new_uri; } raptor_uri_resolve_uri_reference((const unsigned char*)base_uri, uri_string, (unsigned char*)new_uri, new_uri_len); return new_uri; }
static raptor_uri* raptor_default_new_uri_relative_to_base(void *context, raptor_uri *base_uri, const unsigned char *uri_string) { raptor_uri* new_uri; size_t new_uri_len=strlen((const char*)base_uri)+strlen((const char*)uri_string) + sizeof(char*); /* +2 is for \0 plus an extra 1 for adding any missing URI path '/' */ new_uri=(raptor_uri*)RAPTOR_MALLOC(cstring, new_uri_len+2); if(!new_uri) return NULL; /* If URI string is empty, just copy base URI */ if(!*uri_string) { strcpy((char*)new_uri, (char*)base_uri); return new_uri; } raptor_uri_resolve_uri_reference((const unsigned char*)base_uri, uri_string, (unsigned char*)new_uri, new_uri_len); return new_uri; }