diff options
author | June McEnroe <june@causal.agency> | 2020-04-09 21:58:10 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-04-09 21:58:10 -0400 |
commit | 796f5a869e2330818f549ebec74f4b18e937f1c7 (patch) | |
tree | d663b7f4eef2fce8fa0144f61482da3e24ebc3d1 /template.c | |
parent | Render HTML To and Cc lists (diff) | |
download | bubger-796f5a869e2330818f549ebec74f4b18e937f1c7.tar.gz bubger-796f5a869e2330818f549ebec74f4b18e937f1c7.zip |
Factor out templateURL
Diffstat (limited to '')
-rw-r--r-- | template.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/template.c b/template.c index 92c6381..426f1d0 100644 --- a/template.c +++ b/template.c @@ -68,7 +68,7 @@ int escapeXML(FILE *file, const char *str) { int templateRender( FILE *file, const char *template, - const struct Variable *vars, EscapeFn *escape + const struct Variable vars[], EscapeFn *escape ) { for (bool subst = false; *template; subst ^= true) { size_t len = strcspn(template, "[]"); @@ -97,3 +97,21 @@ int templateRender( } return 0; } + +char *templateURL(const char *template, const struct Variable vars[]) { + size_t cap = 3 * strlen(template) + 1; + for (const struct Variable *var = vars; var->name; ++var) { + cap += 3 * strlen(var->value); + } + + char *buf = malloc(cap); + if (!buf) err(EX_OSERR, "malloc"); + + FILE *file = fmemopen(buf, cap, "w"); + if (!file) err(EX_OSERR, "fmemopen"); + + int error = templateRender(file, template, vars, escapeURL) || fclose(file); + assert(!error); + + return buf; +} |