itAdd working example - vote - simple cgi voting system for web and gopher Err mx1.adamsgaard.dk 70 hgit clone git://src.adamsgaard.dk/vote URL:git://src.adamsgaard.dk/vote mx1.adamsgaard.dk 70 1Log /src/vote/log.gph mx1.adamsgaard.dk 70 1Files /src/vote/files.gph mx1.adamsgaard.dk 70 1Refs /src/vote/refs.gph mx1.adamsgaard.dk 70 1README /src/vote/file/README.gph mx1.adamsgaard.dk 70 1LICENSE /src/vote/file/LICENSE.gph mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1commit 3925bb8d6b4fe0b136655a5adbfef61ae27b1f48 /src/vote/commit/3925bb8d6b4fe0b136655a5adbfef61ae27b1f48.gph mx1.adamsgaard.dk 70 hAuthor: Anders Damsgaard URL:mailto:anders@adamsgaard.dk mx1.adamsgaard.dk 70 iDate: Sun, 27 Sep 2020 00:02:57 +0200 Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iAdd working example Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iDiffstat: Err mx1.adamsgaard.dk 70 i A Makefile | 22 ++++++++++++++++++++++ Err mx1.adamsgaard.dk 70 i A vote.c | 55 +++++++++++++++++++++++++++++++ Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i2 files changed, 77 insertions(+), 0 deletions(-) Err mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1diff --git a/Makefile b/Makefile /src/vote/file/Makefile.gph mx1.adamsgaard.dk 70 it@@ -0,0 +1,22 @@ Err mx1.adamsgaard.dk 70 i+.POSIX: Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+NAME = vote Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+HERE_CFLAGS = ${CFLAGS} Err mx1.adamsgaard.dk 70 i+HERE_LDFLAGS = -static ${LDFLAGS} Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+SRC = vote.c Err mx1.adamsgaard.dk 70 i+OBJ = ${SRC:.c=.o} Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+all: ${NAME} Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+${OBJ}: Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+${NAME}: ${OBJ} Err mx1.adamsgaard.dk 70 i+ ${CC} -o $@ ${OBJ} ${HERE_LDFLAGS} Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+clean: Err mx1.adamsgaard.dk 70 i+ rm -f *.o Err mx1.adamsgaard.dk 70 i+ rm -f ${NAME} Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+.PHONY: default clean Err mx1.adamsgaard.dk 70 1diff --git a/vote.c b/vote.c /src/vote/file/vote.c.gph mx1.adamsgaard.dk 70 it@@ -0,0 +1,55 @@ Err mx1.adamsgaard.dk 70 i+#include Err mx1.adamsgaard.dk 70 i+#include Err mx1.adamsgaard.dk 70 i+#include Err mx1.adamsgaard.dk 70 i+#include Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+#define OUT(s) (fputs((s), stdout)) Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+void Err mx1.adamsgaard.dk 70 i+print_html_head() { Err mx1.adamsgaard.dk 70 i+ OUT("Content-type: text/html; charset=utf-8\r\n\r\n"); Err mx1.adamsgaard.dk 70 i+ OUT("\n" Err mx1.adamsgaard.dk 70 i+ "\n" Err mx1.adamsgaard.dk 70 i+ "\n"); Err mx1.adamsgaard.dk 70 i+} Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+void Err mx1.adamsgaard.dk 70 i+print_html_foot() { Err mx1.adamsgaard.dk 70 i+ OUT("\n" Err mx1.adamsgaard.dk 70 i+ "\n"); Err mx1.adamsgaard.dk 70 i+} Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+char * Err mx1.adamsgaard.dk 70 i+getparam(const char *query, const char *s) { Err mx1.adamsgaard.dk 70 i+ const char *p, *last = NULL; Err mx1.adamsgaard.dk 70 i+ size_t len; Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+ len = strlen(s); Err mx1.adamsgaard.dk 70 i+ for (p = query; (p = strstr(p, s)); p += len) { Err mx1.adamsgaard.dk 70 i+ if (p[len] == '=' && (p == query || p[-1] == '&' || p[-1] == '?')) Err mx1.adamsgaard.dk 70 i+ last = p + len + 1; Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ return (char *)last; Err mx1.adamsgaard.dk 70 i+} Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+int Err mx1.adamsgaard.dk 70 i+main() { Err mx1.adamsgaard.dk 70 i+ char *query; Err mx1.adamsgaard.dk 70 i+ char *q; Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+ if (pledge("stdio", NULL) == -1) { Err mx1.adamsgaard.dk 70 i+ OUT("Status: 500 Internal Server Error\r\n\r\n"); Err mx1.adamsgaard.dk 70 i+ exit(1); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+ if (!(query = getenv("QUERY_STRING"))) Err mx1.adamsgaard.dk 70 i+ query = ""; Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+ q = getparam(query, "q"); Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+ print_html_head(); Err mx1.adamsgaard.dk 70 i+ printf("

query string: '%s', q: '%s'

\n", query, q); Err mx1.adamsgaard.dk 70 i+ print_html_foot(); Err mx1.adamsgaard.dk 70 i+ Err mx1.adamsgaard.dk 70 i+ return 0; Err mx1.adamsgaard.dk 70 i+} Err mx1.adamsgaard.dk 70 .