iuse a binary search for checking the gopher type file extensions - gopher-validator - Simple gopher menu validator. Err bitreich.org 70
hgit clone git://bitreich.org/gopher-validator git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gopher-validator URL:git://bitreich.org/gopher-validator git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gopher-validator bitreich.org 70
1Log /scm/gopher-validator/log.gph bitreich.org 70
1Files /scm/gopher-validator/files.gph bitreich.org 70
1Refs /scm/gopher-validator/refs.gph bitreich.org 70
1Tags /scm/gopher-validator/tag bitreich.org 70
1README /scm/gopher-validator/file/README.gph bitreich.org 70
1LICENSE /scm/gopher-validator/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit a230aa92f5f19ff3160fd7cdc7acc2810a02839a /scm/gopher-validator/commit/a230aa92f5f19ff3160fd7cdc7acc2810a02839a.gph bitreich.org 70
1parent d2d0e95268db4d42a56e0b8967af42b146a3a7e3 /scm/gopher-validator/commit/d2d0e95268db4d42a56e0b8967af42b146a3a7e3.gph bitreich.org 70
hAuthor: Hiltjo Posthuma <hiltjo@codemadness.org> URL:mailto:hiltjo@codemadness.org bitreich.org 70
iDate: Fri, 18 Feb 2022 14:27:52 +0100 Err bitreich.org 70
i Err bitreich.org 70
iuse a binary search for checking the gopher type file extensions Err bitreich.org 70
i Err bitreich.org 70
i... and improve a check which shouldve been outside the loop. Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M gopher-validator.c | 35 ++++++++++++++++++------------- Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 20 insertions(+), 15 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/gopher-validator.c b/gopher-validator.c /scm/gopher-validator/file/gopher-validator.c.gph bitreich.org 70
i@@ -133,6 +133,13 @@ warning(const char *fmt, ...) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i int Err bitreich.org 70
i+gophertypecmp(const void *v1, const void *v2) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ return strcasecmp(((struct gophertype *)v1)->ext, Err bitreich.org 70
i+ ((struct gophertype *)v2)->ext); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+int Err bitreich.org 70
i isvalidhost(const char *s) Err bitreich.org 70
i { Err bitreich.org 70
i int colons; Err bitreich.org 70
i@@ -220,6 +227,7 @@ edial(const char *host, const char *port) Err bitreich.org 70
i void Err bitreich.org 70
i checkdir(FILE *fp) Err bitreich.org 70
i { Err bitreich.org 70
i+ struct gophertype gt, *rgt; Err bitreich.org 70
i struct visited v; Err bitreich.org 70
i char line[1024], *end, *s; Err bitreich.org 70
i size_t linenr; Err bitreich.org 70
i@@ -333,21 +341,18 @@ checkdir(FILE *fp) Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i- /* check type with file extension */ Err bitreich.org 70
i- if ((s = strrchr(v.path, '.')) && !strchr(s, '/')) { Err bitreich.org 70
i- s++; Err bitreich.org 70
i- for (i = 0; i < sizeof(types) / sizeof(*types); i++) { Err bitreich.org 70
i- if (primarytype == 'h' && Err bitreich.org 70
i- !strncmp(v.path, "URL:", sizeof("URL:") - 1)) Err bitreich.org 70
i- continue; Err bitreich.org 70
i- Err bitreich.org 70
i- if (!strcasecmp(s, types[i].ext) && Err bitreich.org 70
i- !strchr(types[i].allow, primarytype)) { Err bitreich.org 70
i- warning("%zu: invalid type '%c' for extension '%s', valid types: '%s'\n", Err bitreich.org 70
i- linenr, primarytype, types[i].ext, types[i].allow); Err bitreich.org 70
i- break; Err bitreich.org 70
i- } Err bitreich.org 70
i- } Err bitreich.org 70
i+ /* check type with file extension, unless it is the HTML 'h' Err bitreich.org 70
i+ type with a "URL:" prefix */ Err bitreich.org 70
i+ if ((s = strrchr(v.path, '.')) && !strchr(s, '/') && Err bitreich.org 70
i+ !(primarytype == 'h' && !strncmp(v.path, "URL:", sizeof("URL:") - 1))) { Err bitreich.org 70
i+ gt.ext = ++s; Err bitreich.org 70
i+ if (!(rgt = bsearch(>, &types, sizeof(types) / sizeof(types[0]), Err bitreich.org 70
i+ sizeof(types[0]), &gophertypecmp))) Err bitreich.org 70
i+ continue; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (!strchr(rgt->allow, primarytype)) Err bitreich.org 70
i+ warning("%zu: invalid type '%c' for extension '%s', valid types: '%s'\n", Err bitreich.org 70
i+ linenr, primarytype, rgt->ext, rgt->allow); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i if (!isvalidhost(v.host)) Err bitreich.org 70
.
Response:
text/plain