iAdd preliminary relative path support for gph files. - 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 4d89b560595076c8994896195fbcd196460987dc /scm/geomyidae/commit/4d89b560595076c8994896195fbcd196460987dc.gph bitreich.org 70 1parent a8e69abfa2b38ef12bad79516bf02da7701d549c /scm/geomyidae/commit/a8e69abfa2b38ef12bad79516bf02da7701d549c.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Thu, 30 Aug 2018 21:27:57 +0200 Err bitreich.org 70 i Err bitreich.org 70 iAdd preliminary relative path support for gph files. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M handlr.c | 7 ++----- Err bitreich.org 70 i M ind.c | 24 +++++++++++++++++++++++- Err bitreich.org 70 i M ind.h | 2 +- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 26 insertions(+), 7 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@@ -83,14 +83,13 @@ handlegph(int sock, char *file, char *port, char *base, char *args, Err bitreich.org 70 i Indexs *act; Err bitreich.org 70 i int i, ret = 0; Err bitreich.org 70 i Err bitreich.org 70 i- USED(base); Err bitreich.org 70 i USED(args); Err bitreich.org 70 i USED(sear); Err bitreich.org 70 i Err bitreich.org 70 i act = scanfile(file); Err bitreich.org 70 i if (act != NULL) { Err bitreich.org 70 i for (i = 0; i < act->num && ret >= 0; i++) { Err bitreich.org 70 i- ret = printelem(sock, act->n[i], ohost, port); Err bitreich.org 70 i+ ret = printelem(sock, act->n[i], file, base, ohost, port); Err bitreich.org 70 i freeelem(act->n[i]); Err bitreich.org 70 i act->n[i] = NULL; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -185,8 +184,6 @@ handledcgi(int sock, char *file, char *port, char *base, char *args, Err bitreich.org 70 i int outpipe[2], ret = 0; Err bitreich.org 70 i Elems *el; Err bitreich.org 70 i Err bitreich.org 70 i- USED(base); Err bitreich.org 70 i- Err bitreich.org 70 i if (pipe(outpipe) < 0) Err bitreich.org 70 i return; Err bitreich.org 70 i Err bitreich.org 70 i@@ -246,7 +243,7 @@ handledcgi(int sock, char *file, char *port, char *base, char *args, Err bitreich.org 70 i if (el == NULL) Err bitreich.org 70 i continue; Err bitreich.org 70 i Err bitreich.org 70 i- ret = printelem(sock, el, ohost, port); Err bitreich.org 70 i+ ret = printelem(sock, el, file, base, 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 1diff --git a/ind.c b/ind.c /scm/geomyidae/file/ind.c.gph bitreich.org 70 i@@ -17,6 +17,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i Err bitreich.org 70 i /* for sendfile(2) */ Err bitreich.org 70 i #ifdef __linux__ Err bitreich.org 70 i@@ -413,8 +414,11 @@ scanfile(char *fname) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i int Err bitreich.org 70 i-printelem(int fd, Elems *el, char *addr, char *port) Err bitreich.org 70 i+printelem(int fd, Elems *el, char *file, char *base, char *addr, char *port) Err bitreich.org 70 i { Err bitreich.org 70 i+ char *path, *p, buf[PATH_MAX+1]; Err bitreich.org 70 i+ int len; Err bitreich.org 70 i+ Err bitreich.org 70 i if (!strcmp(el->e[3], "server")) { Err bitreich.org 70 i free(el->e[3]); Err bitreich.org 70 i el->e[3] = xstrdup(addr); Err bitreich.org 70 i@@ -423,6 +427,24 @@ printelem(int fd, Elems *el, char *addr, char *port) Err bitreich.org 70 i free(el->e[4]); Err bitreich.org 70 i el->e[4] = xstrdup(port); Err bitreich.org 70 i } Err bitreich.org 70 i+ if (el->e[2][0] != '/' && !strncmp(el->e[2], "URL:", 4)) { Err bitreich.org 70 i+ path = file + strlen(base); Err bitreich.org 70 i+ if ((p = strrchr(path, '/'))) Err bitreich.org 70 i+ len = p - path; Err bitreich.org 70 i+ else Err bitreich.org 70 i+ len = strlen(path); Err bitreich.org 70 i+ snprintf(buf, sizeof(buf), "%s%.*s/%s", base, len, path, el->e[2]); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if ((path = realpath(buf, NULL)) && Err bitreich.org 70 i+ !strncmp(base, path, strlen(base))) { Err bitreich.org 70 i+ p = path + strlen(base); Err bitreich.org 70 i+ free(el->e[2]); Err bitreich.org 70 i+ el->e[2] = xstrdup(p[0]? p : "/"); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ if (path != NULL) Err bitreich.org 70 i+ free(path); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i if (dprintf(fd, "%.1s%s\t%s\t%s\t%s\r\n", el->e[0], el->e[1], el->e[2], Err bitreich.org 70 i el->e[3], el->e[4]) < 0) { Err bitreich.org 70 i perror("printelem: dprintf"); Err bitreich.org 70 1diff --git a/ind.h b/ind.h /scm/geomyidae/file/ind.h.gph bitreich.org 70 i@@ -40,7 +40,7 @@ Indexs *scanfile(char *fname); Err bitreich.org 70 i Elems *getadv(char *str); Err bitreich.org 70 i int pendingbytes(int sock); Err bitreich.org 70 i void waitforpendingbytes(int sock); Err bitreich.org 70 i-int printelem(int fd, Elems *el, char *addr, char *port); Err bitreich.org 70 i+int printelem(int fd, Elems *el, char *file, char *base, char *addr, char *port); Err bitreich.org 70 i 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 .