KHTTP_TEMPLATE(3)
πΈ NAME πΈ
Okay bestie, this is KHTTP_TEMPLATE(3) from the Library Functions Manual, and itβs literally the page for khttp_template, khttp_template_buf, khttp_template_fd β all about emitting filled-in templates for kcgi. Periodt. β¨
π LIBRARY π
library βlibkcgiβ β thatβs the one. π
π οΈ SYNOPSIS π οΈ
#include <sys/types.h>
#include <stdarg.h>
#include <stdint.h>
#include <kcgi.h>
enum kcgi_err
khttp_template(struct kreq *req, const struct ktemplate *t,
const char *filename);
enum kcgi_err
khttp_template_buf(struct kreq *req, const struct ktemplate *t,
const char *buf, size_t sz);
enum kcgi_err
khttp_template_fd(struct kreq *req, const struct ktemplate *t, int fd,
const char *filename);
π¬ DESCRIPTION π¬
So the whole gig is modifying input by replacing keys in a template. You may only call these after khttp_body(3) β no cap, thatβs the rule. Output is written with khttp_write(3) using the req previously allocated with khttp_parse(3) or khttp_fcgi_parse(3). And if you want alternative writers, the khttp_templatex(3) family has your back. π«Ά
All functions accept a template t consisting of the following fields:
const char *const *keyβ An array of keys to be replaced in the template.size_t keyszβ The number of keys int->key.void *argβ An optional argument passed tot->cb.int (*cb)(size_t index, void *arg)β The callback function invoked when a key at positionindex, which is always less thant->keysz, is found int->key. The optionalargis passed to the function. The function must return zero on failure, non-zero on success.
If t is NULL, the input is passed through to khttp_write(3) without any processing.
Otherwise, the input is passed to khttp_write(3) until a key sequence is encountered matching a key in t->key. The callback t->cb is then invoked instead of printing the key sequence. If there are multiple matching keys in t->key, only one is used (which is not yet fixed) π¬. If the key sequence is not found in t->key, it is passed unchanged to khttp_write(3).
The different input types are khttp_template(), which reads input from the file filename; khttp_template_buf(), which reads from a binary buffer buf of length sz; and khttp_template_fd(), which reads from a file descriptor fd with optional file-name fname used only for logging purposes.
π SYNTAX π
Each substring of the input beginning and ending with a pair of βatβ signs, @@key@@, is called a "key sequence". Zero-length keys @@@@ are allowed and match empty template keys. If the @@ pair is escaped with a single backslash, \@@, the backslash is removed and itβs emitted as @@.
A key sequence may not contain an escaped pair: this is parsed as a backslash followed by the trailing pair.
π― RETURN VALUES π―
These return an enum kcgi_err indicating the error state:
KCGI_OKβ No error occurred.KCGI_ENOMEMβ Memory allocation failed.KCGI_SYSTEMβ A system call failed. For example, writing to the output stream failed, orkhttp_template()failed toopen(2)filename.KCGI_FORMβt->cbreturned0.
π» EXAMPLES π»
The following simple example takes a buffer buf and applies the replacement template of two values, writing it to the current context req.
static int writer(size_t idx, void *arg)
{
struct kreq *r = arg;
if (idx == 0)
khttp_puts(r, "foo-value");
else if (idx == 1)
khttp_puts(r, "bar-value");
return 1;
}
enum kcgi_err format(struct kreq *r)
{
const char *const keys[] = { "foo", "bar" };
struct ktemplate t = {
.key = keys,
.keysz = 2,
.arg = r,
.cb = writer
};
const char *buf = "foo=@@foo@@, bar=@@bar@@";
return khttp_template_buf(r, &t, buf, strlen(buf));
}
The function will produce "foo=foo-value, bar=bar-value".
π SEE ALSO π
π AUTHORS π
Written by Kristaps Dzonsons <kristaps@bsd.lv>.
π And thatβs a wrap, bestie! Source/version: Debian; date: $Mdocdate$; and the page is KHTTP_TEMPLATE(3). Slay, bye! π
β¨
π¦ where this page comes from
- alpine 3.24: kcgi-doc 1.0.1-r0 Β· ISC
- Copyright (c) 2014, 2017--2018, 2020 Kristaps Dzonsons <kristaps@bsd.lv>
- Copyright (c) 2018 Ingo Schwarze <schwarze@openbsd.org>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms