Name

uri_auth — copy a URI's authentication details into a buffer

Library

URI parsing library (liburi, -luri)

Synopsis

#include <liburi.h>

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

Description

The uri_auth function copies the authentication details (typically a username and password in the form user:pass) from a URI into a supplied buffer.

Parameters

uri

The source URI to copy the authentication details from.

buffer

The buffer to store the URI's authentication details 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_auth returns the total number of bytes required to store the URI's authentication details, 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_auth returns (size_t) -1, and sets errno accordingly.

An application can invoke uri_auth, 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 16
	  
URI *uri;
char buffer[BUFFER_SIZE];
size_t r;

uri = uri_create_str("http://joe:diamond@example.com/", NULL);
r = uri_auth(uri, buffer, BUFFER_SIZE);

/* assuming no errors have occurred, buffer will contain
 * 'joe:diamond' and r will be 12.
 */
printf("buffer='%s', r=%lu\n", buffer, (unsigned long) r);
	

See also

liburi(3).