Name

uri_str — recompose a URI

Library

URI parsing library (liburi, -luri)

Synopsis

#include <liburi.h>

size_t uri_str( URI *restrict uri, char * buffer, size_t size);

Description

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.

Parameters

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.

Return value

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.

Example

#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);
	

See also

liburi(3), uri_create_str(3), uri_create_uri(3).