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 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 .