KHTTP_URLPART(3) Library Functions Manual KHTTP_URLPART(3)


khttp_urlpart, khttp_urlpartx, khttp_vurlpart, khttp_vurlpartxURL formatting for kcgi


library “libkcgi”


#include <sys/types.h>
#include <stdarg.h>
#include <stdint.h>
#include <kcgi.h>
char *
khttp_urlpart(const char *path, const char *suffix, const char *page, ...);
char *
khttp_urlpartx(const char *path, const char *suffix, const char *page, ...);
char *
khttp_vurlpart(const char *path, const char *suffix, const char *page, va_list ap);
char *
khttp_vurlpartx(const char *path, const char *suffix, const char *page, va_list ap);


Format a URL given the components following the domain. If the variable arguments are provided, append them as query string pairs.
If path is NULL, the URL will be relative to page; otherwise, path will be followed by a path separator. An empty path signifies the root directory.
If the suffix is NULL or empty, or the corresponding page is NULL or empty, the URL is formatted without a suffix.
The variable key-value arguments must be terminated with NULL. khttp_urlpart() and khttp_vurlpart() accept pairs of variable arguments, the first being the query string key, the second being the value. Both are char *. A NULL query string value is rendered as an empty string. khttp_urlpartx() and khttp_vurlpartx() accept triplets. In each group, the first argument is a char * giving the key. The second argument is an enum kattrx specifying the type of the third argument: KATTRX_STRING followed by a char * string (where a NULL query string value is rendered as an empty string), KATTRX_INT followed by an int64_t signed integer, or KATTRX_DOUBLE followed by a double floating-point number. If all types are KATTRX_STRING, the invocation can be shortened to khttp_urlpart().
The page, query string keys, and query string values are URL-encoded, but the path and the suffix are not.
There are two deprecated forms of these functions: kutil_urlpart() and kutil_urlpartx(). These should no longer be used.


Return newly-allocated strings that must be freed with free(3) or NULL if allocation fails.


The following creates a relative URL with path, page, suffix, and query string parts.
url = khttp_urlpart("/path", "html", "page", 
	 "foo", "bar", "baz", "xyzzy", NULL);
This will assign the following URL:
For typed arguments, the extended form may be used. Integer and real literals must have the int64_t and double types, respectively.
url = khttp_urlpartx("/path", "html", "page", 
	 "foo", KATTRX_INT, (int64_t)0, NULL);
This assigns the following
These may be made relative to the current page by omitting the leading slash or passing NULL for the path component entirely, such as:
url1 = khttp_urlpart("rel/path", "html", "page", NULL); 
url2 = khttp_urlpart(NULL, "html", "page", NULL);
These assign the following, respectively:
Lastly, pages and their suffixes may be omitted entirely:
url3 = khttp_urlpart("", "", "", "foo", "bar", NULL); 
url4 = khttp_urlpart(NULL, "", "", "foo", "bar", NULL);
These assign the following:


Written by Kristaps Dzonsons <>.
April 10, 2020 OpenBSD 6.7