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