phroxy

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.z3bra.org/phroxy.git
Log | Files | Refs | LICENSE

commit d521a7e51213a29de0e339b7bd9fb1bb04f227df
parent 403dee6fb7818dbf5dc8df145436b03eb2841c9d
Author: Willy Goiffon <dev@z3bra.org>
Date:   Mon, 14 Sep 2020 11:05:19 +0200

Format gopher menus as HTML

Diffstat:
Mphroxy.c | 34+++++++++++++++++++++++++++++++---
1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/phroxy.c b/phroxy.c @@ -1,5 +1,6 @@ #include <err.h> #include <errno.h> +#include <limits.h> #include <netdb.h> #include <signal.h> #include <stdio.h> @@ -208,15 +209,42 @@ printheaders(char *ctype) char * htmlize(char *data, size_t len, size_t *newsize) { - size_t hlen; + size_t alen, blen, hlen; char *html = NULL; + char i, *p, *body, a[LINE_MAX], *f[4]; + char *fmt = "<a href='gopher://%s:%s/%c/%s'>%s</a><br/>\n"; + + blen = 0; + body = NULL; + p = data; + + while((p = strsep(&data, "\n"))) { + i = *p++; + f[0] = strsep(&p, "\t"); + f[1] = strsep(&p, "\t"); + f[2] = strsep(&p, "\t"); + f[3] = strsep(&p, "\r"); + if (!f[1]) + continue; + switch(i) { + case 'i': + snprintf(a, sizeof(a), "%s<br/>\n", f[0]); + break; + default: + snprintf(a, sizeof(a), fmt, f[2], f[3], i, f[1], f[0]); + } + alen = strnlen(a, sizeof(a)); + body = realloc(body, blen + alen); + memcpy(body + blen, a, alen); + blen += alen; + } - hlen = len + strlen(htmlfmt); + hlen = strlen(htmlfmt) + blen; html = malloc(hlen); if (!html) return NULL; - snprintf(html, hlen, htmlfmt, data); + snprintf(html, hlen, htmlfmt, body); if (newsize) *newsize = hlen;