uri_str — recompose a URI
URI parsing library (liburi, -luri)
#include <liburi.h>
size_t uri_str(
URI *restrict uri,
char * buffer,
size_t size)
;
The uri_str
function recomposes a URI from its
constiuent parts and copies the result into a supplied buffer.
Note that a recomposed URI may be longer than the string the URI was originally parsed from.
uri
The source URI to recompose.
buffer
The buffer to store the recomposed URI string in. buffer
may be NULL
to simply obtain the return
value.
The string stored in buffer
will always be
NULL
-terminated, even if the buffer is not
large enough to hold the entire string, provided
buffer
is not-NULL and
size
is non-zero.
size
The size of buffer
, in bytes.
If successful, uri_str
returns the total number
of bytes required to store the recomposed URI, including the
NULL
terminator (that is, one greater than
the length of the string measured in bytes). This return will
occur whether a buffer is supplied or not, and regardless of its size.
If an error occurs, uri_str
returns
(size_t) -1
, and sets errno
accordingly.
An application can invoke uri_str
, passing
NULL
as buffer
and
0
as size
in order to
obtain the size of buffer required for a subsequent call.
Alternatively, if buffer
was
non-NULL
, an application can compare
the return value with the supplied size
in order to to determine whether the copied string was truncated: if
the return value is less than or equal to size
,
truncation did not occur.
#define BUFFER_SIZE 64 URI *uri; char buffer[BUFFER_SIZE]; size_t r; uri = uri_create_str("HTTP://example.com/foo/../ bar", NULL); r = uri_str(uri, buffer, BUFFER_SIZE); /* assuming no errors have occurred, buffer will contain * 'http://example.com/%20bar' and r will be 26. */ printf("buffer='%s', r=%lu\n", buffer, (unsigned long) r);
liburi(3), uri_create_str(3), uri_create_uri(3).