SMOLNET PORTAL home about changes
iinitial working version to proofread - libgcgi - REST library for Gopher	Err	bitreich.org	70
hgit clone git://bitreich.org/libgcgi git://hg6vgqziawt5s4dj.onion/libgcgi	URL:git://bitreich.org/libgcgi git://hg6vgqziawt5s4dj.onion/libgcgi	bitreich.org	70
1Log	/scm/libgcgi/log.gph	bitreich.org	70
1Files	/scm/libgcgi/files.gph	bitreich.org	70
1Refs	/scm/libgcgi/refs.gph	bitreich.org	70
1Tags	/scm/libgcgi/tag	bitreich.org	70
1README	/scm/libgcgi/file/README.gph	bitreich.org	70
1LICENSE	/scm/libgcgi/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit 092dce7972a8883e7532c848192785ed60ac9b67	/scm/libgcgi/commit/092dce7972a8883e7532c848192785ed60ac9b67.gph	bitreich.org	70
1parent 758508d75c969333c3f72f0e01faa0a5129153b9	/scm/libgcgi/commit/758508d75c969333c3f72f0e01faa0a5129153b9.gph	bitreich.org	70
hAuthor: Josuah Demangeon <me@josuah.net>	URL:mailto:me@josuah.net	bitreich.org	70
iDate:   Sat, 30 Jul 2022 12:30:03 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iinitial working version to proofread	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M index.c                             |      12 +++++++++++-	Err	bitreich.org	70
i  M libgcgi.h                           |      42 +++++++++++++++++++++-----------	Err	bitreich.org	70
i	Err	bitreich.org	70
i2 files changed, 39 insertions(+), 15 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/index.c b/index.c	/scm/libgcgi/file/index.c.gph	bitreich.org	70
i@@ -10,8 +10,18 @@	Err	bitreich.org	70
i #include <sys/stat.h>	Err	bitreich.org	70
i #include "libgcgi.h"	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+error_404(char **matches)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        char *var;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        printf("sorry, I could not find %s\n", matches[0]);	Err	bitreich.org	70
i+        if ((var = gcgi_get_var(&gcgi_gopher_query, "var")) != NULL)	Err	bitreich.org	70
i+                printf("I got the $var though! -> '%s'\n", var);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i static struct gcgi_handler handlers[] = {	Err	bitreich.org	70
i-//        { "*",                                error_404 },	Err	bitreich.org	70
i+        { "*",                                error_404 },	Err	bitreich.org	70
i         { NULL,                                NULL },	Err	bitreich.org	70
i };	Err	bitreich.org	70
i 	Err	bitreich.org	70
1diff --git a/libgcgi.h b/libgcgi.h	/scm/libgcgi/file/libgcgi.h.gph	bitreich.org	70
i@@ -44,15 +44,12 @@ static void gcgi_free_var_list(struct gcgi_var_list *vars);	Err	bitreich.org	70
i static void gcgi_read_var_list(struct gcgi_var_list *vars, char *path);	Err	bitreich.org	70
i static int gcgi_write_var_list(struct gcgi_var_list *vars, char *path);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-/* parse various components of the Gopher request */	Err	bitreich.org	70
i-static struct gcgi_var_list * gcgi_parse_query_string(void);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i /* components of the gopher request */	Err	bitreich.org	70
i char *gcgi_gopher_search;	Err	bitreich.org	70
i char *gcgi_gopher_path;	Err	bitreich.org	70
i char *gcgi_gopher_host;	Err	bitreich.org	70
i char *gcgi_gopher_port;	Err	bitreich.org	70
i-char *gcgi_gopher_args;	Err	bitreich.org	70
i+static struct gcgi_var_list gcgi_gopher_query;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i 	Err	bitreich.org	70
i /// POLICE LINE /// DO NOT CROSS ///	Err	bitreich.org	70
i@@ -68,7 +65,6 @@ gcgi_fatal(char *fmt, ...)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         va_start(va, fmt);	Err	bitreich.org	70
i         vsnprintf(msg, sizeof msg, fmt, va);	Err	bitreich.org	70
i-        printf("Status: 500 Server Error\n\n");	Err	bitreich.org	70
i         printf("error: %s\n", msg);	Err	bitreich.org	70
i         exit(1);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i@@ -237,9 +233,26 @@ gcgi_match(char const *glob, char *path, char **matches, size_t m)	Err	bitreich.org	70
i         return *glob == '\0' && *path == '\0';	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+static inline void	Err	bitreich.org	70
i+gcgi_decode_url(struct gcgi_var_list *vars, char *s)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        char *tok, *eq;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        while ((tok = strsep(&s, "&"))) {	Err	bitreich.org	70
i+                //gcgi_decode_hex(tok);	Err	bitreich.org	70
i+                if ((eq = strchr(tok, '=')) == NULL)	Err	bitreich.org	70
i+                        continue;	Err	bitreich.org	70
i+                *eq = '\0';	Err	bitreich.org	70
i+                gcgi_add_var(vars, tok, eq + 1);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        gcgi_sort_var_list(vars);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i gcgi_handle_request(struct gcgi_handler h[], char **argv, int argc)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        char *query_string;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         if (argc != 5)	Err	bitreich.org	70
i                 gcgi_fatal("wrong number of arguments: %c", argc);	Err	bitreich.org	70
i         assert(argv[0] && argv[1] && argv[2] && argv[3]);	Err	bitreich.org	70
i@@ -249,11 +262,10 @@ gcgi_handle_request(struct gcgi_handler h[], char **argv, int argc)	Err	bitreich.org	70
i         gcgi_gopher_path = argv[2];	Err	bitreich.org	70
i         gcgi_gopher_host = argv[3];	Err	bitreich.org	70
i         gcgi_gopher_port = argv[4];	Err	bitreich.org	70
i-        gcgi_gopher_args = strchr(gcgi_gopher_path, '?');	Err	bitreich.org	70
i-        if (gcgi_gopher_args == NULL) {	Err	bitreich.org	70
i-                gcgi_gopher_args = "";	Err	bitreich.org	70
i-        } else {	Err	bitreich.org	70
i-                *gcgi_gopher_args++ = '\0';	Err	bitreich.org	70
i+        query_string = strchr(gcgi_gopher_path, '?');	Err	bitreich.org	70
i+        if (query_string != NULL) {	Err	bitreich.org	70
i+                *query_string++ = '\0';	Err	bitreich.org	70
i+                gcgi_decode_url(&gcgi_gopher_query, query_string);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         for (; h->glob != NULL; h++) {	Err	bitreich.org	70
i@@ -309,17 +321,17 @@ static void	Err	bitreich.org	70
i gcgi_template(char const *path, struct gcgi_var_list *vars)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         FILE *fp;	Err	bitreich.org	70
i+        ssize_t ssz;	Err	bitreich.org	70
i         size_t sz;	Err	bitreich.org	70
i         char *line, *head, *tail, *key;	Err	bitreich.org	70
i         char *val;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        sz = 0;	Err	bitreich.org	70
i-        line = NULL;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         if ((fp = fopen(path, "r")) == NULL)	Err	bitreich.org	70
i                 gcgi_fatal("opening template %s", path);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        while (getline(&line, &sz, fp) > 0) {	Err	bitreich.org	70
i+        sz = 0;	Err	bitreich.org	70
i+        line = NULL;	Err	bitreich.org	70
i+        while ((ssz = getline(&line, &sz, fp)) > 0) {	Err	bitreich.org	70
i                 head = tail = line;	Err	bitreich.org	70
i                 for (; (key = gcgi_next_var(head, &tail)); head = tail) {	Err	bitreich.org	70
i                         fputs(head, stdout);	Err	bitreich.org	70
i@@ -330,6 +342,8 @@ gcgi_template(char const *path, struct gcgi_var_list *vars)	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i                 fputs(tail, stdout);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i+        if (ssz == -1)	Err	bitreich.org	70
i+                gcgi_fatal("reading from template: %s", strerror(errno));	Err	bitreich.org	70
i         fclose(fp);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/libgcgi/commit/092dce7972a888...
Content-Typetext/plain; charset=utf-8