Introduction
Introduction Statistics Contact Development Disclaimer Help
working template and variables - libgcgi - REST library for Gopher
git clone git://bitreich.org/libgcgi git://hg6vgqziawt5s4dj.onion/libgcgi
Log
Files
Refs
Tags
README
LICENSE
---
commit e52fd13abe19a46021a9661b499320da75fed2de
parent 092dce7972a8883e7532c848192785ed60ac9b67
Author: Josuah Demangeon <[email protected]>
Date: Sat, 30 Jul 2022 13:04:32 +0200
working template and variables
Diffstat:
M Makefile | 8 +-------
A db/vars | 1 +
A gph/404.gph | 1 +
M index.c | 6 +++++-
M libgcgi.h | 16 ++++++----------
5 files changed, 14 insertions(+), 18 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -1,13 +1,7 @@
LDFLAGS = -static
CFLAGS = -g -pedantic -std=c99 -Wall -Wextra -Wno-unused-function
-V = v0.0
-
-all: index.cgi tmp db/category db/item db/image
-
-tmp db/category db/item db/image:
- mkdir -p -m 700 $@
- chown www:www $@
+all: index.cgi
index.cgi: index.c libgcgi.h
${CC} ${LDFLAGS} ${CFLAGS} -o $@ index.c
diff --git a/db/vars b/db/vars
@@ -0,0 +1 @@
+Variable-From-Db: Lucky 777 Hat
diff --git a/gph/404.gph b/gph/404.gph
@@ -0,0 +1 @@
+Hello world!
diff --git a/index.c b/index.c
@@ -13,11 +13,16 @@
static void
error_404(char **matches)
{
+ struct gcgi_var_list vars = {0};
char *var;
+ gcgi_read_var_list(&vars, "db/vars");
+
printf("sorry, I could not find %s\n", matches[0]);
if ((var = gcgi_get_var(&gcgi_gopher_query, "var")) != NULL)
printf("I got the $var though! -> '%s'\n", var);
+
+ gcgi_template("gph/404.gph", &vars);
}
static struct gcgi_handler handlers[] = {
@@ -30,7 +35,6 @@ main(int argc, char **argv)
{
/* restrict allowed paths */
unveil("gph", "r");
- unveil("tmp", "rwc");
unveil("db", "rwc");
/* restrict allowed system calls */
diff --git a/libgcgi.h b/libgcgi.h
@@ -24,9 +24,6 @@ static void gcgi_handle_request(struct gcgi_handler h[], char…
/* abort the program with an error message sent to the client */
static void gcgi_fatal(char *fmt, ...);
-/* receive a file payload from the client onto the disk at `path` */
-static void gcgi_receive_file(char const *path);
-
/* print a template with every "{{name}}" looked up in `vars` */
static void gcgi_template(char const *path, struct gcgi_var_list *vars);
@@ -88,8 +85,10 @@ gcgi_fopenread(char *path)
return NULL;
if ((buf = malloc(sz + 1)) == NULL)
return NULL;
- if (fread(buf, sz, 1, fp) != sz)
+ if (fread(buf, sz, 1, fp) == sz) {
+ errno = EFBIG;
goto error_free;
+ }
if (ferror(fp))
goto error_free;
fclose(fp);
@@ -321,17 +320,14 @@ static void
gcgi_template(char const *path, struct gcgi_var_list *vars)
{
FILE *fp;
- ssize_t ssz;
size_t sz;
- char *line, *head, *tail, *key;
- char *val;
+ char *line, *head, *tail, *key, *val;
if ((fp = fopen(path, "r")) == NULL)
gcgi_fatal("opening template %s", path);
-
sz = 0;
line = NULL;
- while ((ssz = getline(&line, &sz, fp)) > 0) {
+ while (getline(&line, &sz, fp) > 0) {
head = tail = line;
for (; (key = gcgi_next_var(head, &tail)); head = tail) {
fputs(head, stdout);
@@ -342,7 +338,7 @@ gcgi_template(char const *path, struct gcgi_var_list *vars)
}
fputs(tail, stdout);
}
- if (ssz == -1)
+ if (ferror(fp))
gcgi_fatal("reading from template: %s", strerror(errno));
fclose(fp);
}
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.