tAdd working example - vote - simple cgi voting system for web and gopher | |
git clone git://src.adamsgaard.dk/vote | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 3925bb8d6b4fe0b136655a5adbfef61ae27b1f48 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Sun, 27 Sep 2020 00:02:57 +0200 | |
Add working example | |
Diffstat: | |
A Makefile | 22 ++++++++++++++++++++++ | |
A vote.c | 55 +++++++++++++++++++++++++++++… | |
2 files changed, 77 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
t@@ -0,0 +1,22 @@ | |
+.POSIX: | |
+ | |
+NAME = vote | |
+ | |
+HERE_CFLAGS = ${CFLAGS} | |
+HERE_LDFLAGS = -static ${LDFLAGS} | |
+ | |
+SRC = vote.c | |
+OBJ = ${SRC:.c=.o} | |
+ | |
+all: ${NAME} | |
+ | |
+${OBJ}: | |
+ | |
+${NAME}: ${OBJ} | |
+ ${CC} -o $@ ${OBJ} ${HERE_LDFLAGS} | |
+ | |
+clean: | |
+ rm -f *.o | |
+ rm -f ${NAME} | |
+ | |
+.PHONY: default clean | |
diff --git a/vote.c b/vote.c | |
t@@ -0,0 +1,55 @@ | |
+#include <stdio.h> | |
+#include <stdlib.h> | |
+#include <unistd.h> | |
+#include <string.h> | |
+ | |
+#define OUT(s) (fputs((s), stdout)) | |
+ | |
+void | |
+print_html_head() { | |
+ OUT("Content-type: text/html; charset=utf-8\r\n\r\n"); | |
+ OUT("<!DOCTYPE html>\n" | |
+ "<html>\n" | |
+ "<body>\n"); | |
+} | |
+ | |
+void | |
+print_html_foot() { | |
+ OUT("</body>\n" | |
+ "</html>\n"); | |
+} | |
+ | |
+char * | |
+getparam(const char *query, const char *s) { | |
+ const char *p, *last = NULL; | |
+ size_t len; | |
+ | |
+ len = strlen(s); | |
+ for (p = query; (p = strstr(p, s)); p += len) { | |
+ if (p[len] == '=' && (p == query || p[-1] == '&' || p[-1] == '… | |
+ last = p + len + 1; | |
+ } | |
+ return (char *)last; | |
+} | |
+ | |
+int | |
+main() { | |
+ char *query; | |
+ char *q; | |
+ | |
+ if (pledge("stdio", NULL) == -1) { | |
+ OUT("Status: 500 Internal Server Error\r\n\r\n"); | |
+ exit(1); | |
+ } | |
+ | |
+ if (!(query = getenv("QUERY_STRING"))) | |
+ query = ""; | |
+ | |
+ q = getparam(query, "q"); | |
+ | |
+ print_html_head(); | |
+ printf("<p>query string: '%s', q: '%s'</p>\n", query, q); | |
+ print_html_foot(); | |
+ | |
+ return 0; | |
+} |