itFormat gopher menus as HTML - phroxy - Gopher to HTTP proxy Err z3bra.org 70 hgit clone git://git.z3bra.org/phroxy.git URL:git://git.z3bra.org/phroxy.git z3bra.org 70 1Log /scm/phroxy/log.gph z3bra.org 70 1Files /scm/phroxy/files.gph z3bra.org 70 1Refs /scm/phroxy/refs.gph z3bra.org 70 1LICENSE /scm/phroxy/file/LICENSE.gph z3bra.org 70 i--- Err z3bra.org 70 1commit d521a7e51213a29de0e339b7bd9fb1bb04f227df /scm/phroxy/commit/d521a7e51213a29de0e339b7bd9fb1bb04f227df.gph z3bra.org 70 1parent 403dee6fb7818dbf5dc8df145436b03eb2841c9d /scm/phroxy/commit/403dee6fb7818dbf5dc8df145436b03eb2841c9d.gph z3bra.org 70 hAuthor: Willy Goiffon URL:mailto:dev@z3bra.org z3bra.org 70 iDate: Mon, 14 Sep 2020 11:05:19 +0200 Err z3bra.org 70 i Err z3bra.org 70 iFormat gopher menus as HTML Err z3bra.org 70 i Err z3bra.org 70 iDiffstat: Err z3bra.org 70 i M phroxy.c | 34 ++++++++++++++++++++++++++++--- Err z3bra.org 70 i Err z3bra.org 70 i1 file changed, 31 insertions(+), 3 deletions(-) Err z3bra.org 70 i--- Err z3bra.org 70 1diff --git a/phroxy.c b/phroxy.c /scm/phroxy/file/phroxy.c.gph z3bra.org 70 it@@ -1,5 +1,6 @@ Err z3bra.org 70 i #include Err z3bra.org 70 i #include Err z3bra.org 70 i+#include Err z3bra.org 70 i #include Err z3bra.org 70 i #include Err z3bra.org 70 i #include Err z3bra.org 70 it@@ -208,15 +209,42 @@ printheaders(char *ctype) Err z3bra.org 70 i char * Err z3bra.org 70 i htmlize(char *data, size_t len, size_t *newsize) Err z3bra.org 70 i { Err z3bra.org 70 i- size_t hlen; Err z3bra.org 70 i+ size_t alen, blen, hlen; Err z3bra.org 70 i char *html = NULL; Err z3bra.org 70 i+ char i, *p, *body, a[LINE_MAX], *f[4]; Err z3bra.org 70 i+ char *fmt = "%s
\n"; Err z3bra.org 70 i+ Err z3bra.org 70 i+ blen = 0; Err z3bra.org 70 i+ body = NULL; Err z3bra.org 70 i+ p = data; Err z3bra.org 70 i+ Err z3bra.org 70 i+ while((p = strsep(&data, "\n"))) { Err z3bra.org 70 i+ i = *p++; Err z3bra.org 70 i+ f[0] = strsep(&p, "\t"); Err z3bra.org 70 i+ f[1] = strsep(&p, "\t"); Err z3bra.org 70 i+ f[2] = strsep(&p, "\t"); Err z3bra.org 70 i+ f[3] = strsep(&p, "\r"); Err z3bra.org 70 i+ if (!f[1]) Err z3bra.org 70 i+ continue; Err z3bra.org 70 i+ switch(i) { Err z3bra.org 70 i+ case 'i': Err z3bra.org 70 i+ snprintf(a, sizeof(a), "%s
\n", f[0]); Err z3bra.org 70 i+ break; Err z3bra.org 70 i+ default: Err z3bra.org 70 i+ snprintf(a, sizeof(a), fmt, f[2], f[3], i, f[1], f[0]); Err z3bra.org 70 i+ } Err z3bra.org 70 i+ alen = strnlen(a, sizeof(a)); Err z3bra.org 70 i+ body = realloc(body, blen + alen); Err z3bra.org 70 i+ memcpy(body + blen, a, alen); Err z3bra.org 70 i+ blen += alen; Err z3bra.org 70 i+ } Err z3bra.org 70 i Err z3bra.org 70 i- hlen = len + strlen(htmlfmt); Err z3bra.org 70 i+ hlen = strlen(htmlfmt) + blen; Err z3bra.org 70 i html = malloc(hlen); Err z3bra.org 70 i if (!html) Err z3bra.org 70 i return NULL; Err z3bra.org 70 i Err z3bra.org 70 i- snprintf(html, hlen, htmlfmt, data); Err z3bra.org 70 i+ snprintf(html, hlen, htmlfmt, body); Err z3bra.org 70 i Err z3bra.org 70 i if (newsize) Err z3bra.org 70 i *newsize = hlen; Err z3bra.org 70 .