SMOLNET PORTAL home about changes
iworking template and variables - 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 e52fd13abe19a46021a9661b499320da75fed2de	/scm/libgcgi/commit/e52fd13abe19a46021a9661b499320da75fed2de.gph	bitreich.org	70
1parent 092dce7972a8883e7532c848192785ed60ac9b67	/scm/libgcgi/commit/092dce7972a8883e7532c848192785ed60ac9b67.gph	bitreich.org	70
hAuthor: Josuah Demangeon <me@josuah.net>	URL:mailto:me@josuah.net	bitreich.org	70
iDate:   Sat, 30 Jul 2022 13:04:32 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iworking template and variables	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M Makefile                            |       8 +-------	Err	bitreich.org	70
i  A db/vars                             |       1 +	Err	bitreich.org	70
i  A gph/404.gph                         |       1 +	Err	bitreich.org	70
i  M index.c                             |       6 +++++-	Err	bitreich.org	70
i  M libgcgi.h                           |      16 ++++++----------	Err	bitreich.org	70
i	Err	bitreich.org	70
i5 files changed, 14 insertions(+), 18 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/Makefile b/Makefile	/scm/libgcgi/file/Makefile.gph	bitreich.org	70
i@@ -1,13 +1,7 @@	Err	bitreich.org	70
i LDFLAGS = -static	Err	bitreich.org	70
i CFLAGS = -g -pedantic -std=c99 -Wall -Wextra -Wno-unused-function	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-V = v0.0	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-all: index.cgi tmp db/category db/item db/image	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-tmp db/category db/item db/image:	Err	bitreich.org	70
i-        mkdir -p -m 700 $@	Err	bitreich.org	70
i-        chown www:www $@	Err	bitreich.org	70
i+all: index.cgi	Err	bitreich.org	70
i 	Err	bitreich.org	70
i index.cgi: index.c libgcgi.h	Err	bitreich.org	70
i         ${CC} ${LDFLAGS} ${CFLAGS} -o $@ index.c	Err	bitreich.org	70
1diff --git a/db/vars b/db/vars	/scm/libgcgi/file/db/vars.gph	bitreich.org	70
i@@ -0,0 +1 @@	Err	bitreich.org	70
i+Variable-From-Db: Lucky 777 Hat	Err	bitreich.org	70
1diff --git a/gph/404.gph b/gph/404.gph	/scm/libgcgi/file/gph/404.gph.gph	bitreich.org	70
i@@ -0,0 +1 @@	Err	bitreich.org	70
i+Hello world!	Err	bitreich.org	70
1diff --git a/index.c b/index.c	/scm/libgcgi/file/index.c.gph	bitreich.org	70
i@@ -13,11 +13,16 @@	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+        struct gcgi_var_list vars = {0};	Err	bitreich.org	70
i         char *var;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        gcgi_read_var_list(&vars, "db/vars");	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+        gcgi_template("gph/404.gph", &vars);	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@@ -30,7 +35,6 @@ main(int argc, char **argv)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         /* restrict allowed paths */	Err	bitreich.org	70
i         unveil("gph", "r");	Err	bitreich.org	70
i-        unveil("tmp", "rwc");	Err	bitreich.org	70
i         unveil("db", "rwc");	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         /* restrict allowed system calls */	Err	bitreich.org	70
1diff --git a/libgcgi.h b/libgcgi.h	/scm/libgcgi/file/libgcgi.h.gph	bitreich.org	70
i@@ -24,9 +24,6 @@ static void gcgi_handle_request(struct gcgi_handler h[], char **argv, int argc);	Err	bitreich.org	70
i /* abort the program with an error message sent to the client */	Err	bitreich.org	70
i static void gcgi_fatal(char *fmt, ...);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-/* receive a file payload from the client onto the disk at `path` */	Err	bitreich.org	70
i-static void gcgi_receive_file(char const *path);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i /* print a template with every "{{name}}" looked up in `vars` */	Err	bitreich.org	70
i static void gcgi_template(char const *path, struct gcgi_var_list *vars);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -88,8 +85,10 @@ gcgi_fopenread(char *path)	Err	bitreich.org	70
i                 return NULL;	Err	bitreich.org	70
i         if ((buf = malloc(sz + 1)) == NULL)	Err	bitreich.org	70
i                 return NULL;	Err	bitreich.org	70
i-        if (fread(buf, sz, 1, fp) != sz)	Err	bitreich.org	70
i+        if (fread(buf, sz, 1, fp) == sz) {	Err	bitreich.org	70
i+                errno = EFBIG;	Err	bitreich.org	70
i                 goto error_free;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i         if (ferror(fp))	Err	bitreich.org	70
i                 goto error_free;	Err	bitreich.org	70
i         fclose(fp);	Err	bitreich.org	70
i@@ -321,17 +320,14 @@ 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+        char *line, *head, *tail, *key, *val;	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         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+        while (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@@ -342,7 +338,7 @@ 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+        if (ferror(fp))	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
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/libgcgi/commit/e52fd13abe19a4...
Content-Typetext/plain; charset=utf-8