iimprove dcgi support - geomyidae - A small C-based gopherd. Err bitreich.org 70 hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ bitreich.org 70 1Log /scm/geomyidae/log.gph bitreich.org 70 1Files /scm/geomyidae/files.gph bitreich.org 70 1Refs /scm/geomyidae/refs.gph bitreich.org 70 1Tags /scm/geomyidae/tag bitreich.org 70 1README /scm/geomyidae/file/README.gph bitreich.org 70 1LICENSE /scm/geomyidae/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 6136de9a50186b811bb80acba917e6f6ea4cfe13 /scm/geomyidae/commit/6136de9a50186b811bb80acba917e6f6ea4cfe13.gph bitreich.org 70 1parent 3717798485ae28c453c83a109d17e66188d8379d /scm/geomyidae/commit/3717798485ae28c453c83a109d17e66188d8379d.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sun, 25 Jun 2017 20:53:07 +0200 Err bitreich.org 70 i Err bitreich.org 70 iimprove dcgi support Err bitreich.org 70 i Err bitreich.org 70 i- fix a memory leak (readln). Err bitreich.org 70 i- use getline: this also improves performance: Err bitreich.org 70 i - tested with a 30 MB file via netcat: 25s to 16s. Err bitreich.org 70 i Err bitreich.org 70 iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M handlr.c | 20 +++++++++++++++++--- Err bitreich.org 70 i M ind.c | 20 -------------------- Err bitreich.org 70 i M ind.h | 1 - Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 17 insertions(+), 24 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/handlr.c b/handlr.c /scm/geomyidae/file/handlr.c.gph bitreich.org 70 i@@ -181,7 +181,10 @@ void Err bitreich.org 70 i handledcgi(int sock, char *file, char *port, char *base, char *args, Err bitreich.org 70 i char *sear, char *ohost) Err bitreich.org 70 i { Err bitreich.org 70 i- char *p, *path, *ln; Err bitreich.org 70 i+ FILE *fp; Err bitreich.org 70 i+ char *p, *path, *ln = nil; Err bitreich.org 70 i+ size_t linesiz = 0; Err bitreich.org 70 i+ ssize_t n; Err bitreich.org 70 i int outpipe[2]; Err bitreich.org 70 i Elems *el; Err bitreich.org 70 i Err bitreich.org 70 i@@ -226,7 +229,15 @@ handledcgi(int sock, char *file, char *port, char *base, char *args, Err bitreich.org 70 i dup2(sock, 1); Err bitreich.org 70 i close(outpipe[1]); Err bitreich.org 70 i Err bitreich.org 70 i- while((ln = readln(outpipe[0])) != nil) { Err bitreich.org 70 i+ if (!(fp = fdopen(outpipe[0], "r"))) { Err bitreich.org 70 i+ perror("fdopen"); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ while ((n = getline(&ln, &linesiz, fp)) > 0) { Err bitreich.org 70 i+ if (ln[n - 1] == '\n') Err bitreich.org 70 i+ ln[--n] = '\0'; Err bitreich.org 70 i+ Err bitreich.org 70 i el = getadv(ln); Err bitreich.org 70 i if (el == nil) Err bitreich.org 70 i continue; Err bitreich.org 70 i@@ -234,10 +245,13 @@ handledcgi(int sock, char *file, char *port, char *base, char *args, Err bitreich.org 70 i printelem(sock, el, ohost, port); Err bitreich.org 70 i freeelem(el); Err bitreich.org 70 i } Err bitreich.org 70 i+ if (ferror(fp)) Err bitreich.org 70 i+ perror("getline"); Err bitreich.org 70 i dprintf(sock, ".\r\n"); Err bitreich.org 70 i Err bitreich.org 70 i- wait(NULL); Err bitreich.org 70 i+ free(ln); Err bitreich.org 70 i free(path); Err bitreich.org 70 i+ wait(NULL); Err bitreich.org 70 i break; Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/ind.c b/ind.c /scm/geomyidae/file/ind.c.gph bitreich.org 70 i@@ -106,26 +106,6 @@ gettype(char *filename) Err bitreich.org 70 i return &type[0]; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-char * Err bitreich.org 70 i-readln(int fd) Err bitreich.org 70 i-{ Err bitreich.org 70 i- char *ret; Err bitreich.org 70 i- int len; Err bitreich.org 70 i- Err bitreich.org 70 i- len = 1; Err bitreich.org 70 i- Err bitreich.org 70 i- ret = xmalloc(2); Err bitreich.org 70 i- while(read(fd, &ret[len - 1], 1) > 0 && ret[len - 1] != '\n') Err bitreich.org 70 i- ret = xrealloc(ret, ++len + 1); Err bitreich.org 70 i- if(ret[len - 1] != '\n') { Err bitreich.org 70 i- free(ret); Err bitreich.org 70 i- return nil; Err bitreich.org 70 i- } Err bitreich.org 70 i- ret[len - 1] = '\0'; Err bitreich.org 70 i- Err bitreich.org 70 i- return ret; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i void Err bitreich.org 70 i freeelem(Elems *e) Err bitreich.org 70 i { Err bitreich.org 70 1diff --git a/ind.h b/ind.h /scm/geomyidae/file/ind.h.gph bitreich.org 70 i@@ -42,7 +42,6 @@ void addindexs(Indexs *idx, Elems *el); Err bitreich.org 70 i void addelem(Elems *e, char *s); Err bitreich.org 70 i void freeindex(Indexs *i); Err bitreich.org 70 i void freeelem(Elems *e); Err bitreich.org 70 i-char *readln(int fd); Err bitreich.org 70 i int initlogging(char *logf); Err bitreich.org 70 i void stoplogging(int fd); Err bitreich.org 70 i char *smprintf(char *fmt, ...); Err bitreich.org 70 .