uri_create_str — parse a URI or IRI
URI parsing library (liburi, -luri)
#include <liburi.h>
URI *uri_create_str(
const char *restrict uristr,
const URI *restrict base);
The uri_create_str function parses a string in order
to produce a URI instance. If the URI to be parsed in
uristr is not absolute, and an absolute base URI
is supplied as base, the parsed URI will be
resolved relative to the base URI and the result will be an absolute
URI. If no base URI is supplied, the resulting URI instance may be
either absolute or relative, depending upon the contents of
uristr.
The resulting instance must be freed later using uri_destroy(3).
URIs are normalised as they are parsed. Normalisation is performed
according to section 6.2.2 of RFC3986, and includes adjusting the case of any
scheme, hostname and percent-encoded characters so as to be consistent,
as well as removing redundant components from the path (for example, a
path of /a/b/c/../d/../../e will be normalised to
/a/e).
Once parsed, a URI can be resolved against a base URI if it is relative using uri_create_uri(3), and can be recomposed into a string representation using uri_str(3).
uristrA string to parse as a URI or IRI.
base
An optional absolute base URI. If base is supplied but is not an absolute URI, the results are undefined.
If the URI was parsed successfully, uri_create_str
will return a new URI instance. If the URI could not be
parsed, or some other error occurs, NULL will
be returned and errno set accordingly.
In the event of an error ocurring, errno may be
set to one of the following values:
EINVALThe URI was not well-formed and could not be parsed.
ENOMEMA memory allocation operation failed.
Parsing an absolute URI:
URI *uri;
uri = uri_create_str("http://example.com/sample", NULL);
Parsing a relative URI, and resolving it against an absolute base URI:
URI *base, *uri;
base = uri_create_str("http://example.com/sample", NULL);
/* The result would be as though the string being parsed had been:
* http://example.com/switch?toggle=1
*/
uri = uri_create_str("switch?toggle=1", base);
liburi(3), uri_create_uri(3), uri_destroy(3), uri_absolute(3), uri_str(3).