SMOLNET PORTAL home about changes
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(&gt, &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
Original URLgopher://bitreich.org/0/scm/gopher-validator/commit/a230a...
Content-Typetext/plain; charset=utf-8