itmove query parsing into separate function - 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 74b58729c204508d0e3fbe2162a3325d2f3d5aeb /src/vote/commit/74b58729c204508d0e3fbe2162a3325d2f3d5aeb.gph mx1.adamsgaard.dk 70 1parent c7654831e7c7bc274ca47f940c93392a55a74cb2 /src/vote/commit/c7654831e7c7bc274ca47f940c93392a55a74cb2.gph mx1.adamsgaard.dk 70 hAuthor: Anders Damsgaard URL:mailto:anders@adamsgaard.dk mx1.adamsgaard.dk 70 iDate: Sun, 27 Sep 2020 01:39:22 +0200 Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 imove query parsing into separate function Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iDiffstat: Err mx1.adamsgaard.dk 70 i M vote.c | 28 +++++++++++++++++++++------- Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i1 file changed, 21 insertions(+), 7 deletions(-) Err mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1diff --git a/vote.c b/vote.c /src/vote/file/vote.c.gph mx1.adamsgaard.dk 70 it@@ -8,6 +8,8 @@ Err mx1.adamsgaard.dk 70 i #define OUT(s) (fputs((s), stdout)) Err mx1.adamsgaard.dk 70 i #define POLLS_DIR "polls" Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i+static char poll[1024]; 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 it@@ -36,10 +38,24 @@ getparam(const char *query, const char *s) { 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+void Err mx1.adamsgaard.dk 70 i+parse_query() { Err mx1.adamsgaard.dk 70 i+ char *query, *p; Err mx1.adamsgaard.dk 70 i+ size_t len; 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+ if ((p = getparam(query, "poll"))) { Err mx1.adamsgaard.dk 70 i+ if ((len = strcspn(p, "&")) && len + 1 < sizeof(poll)) { Err mx1.adamsgaard.dk 70 i+ memcpy(poll, p, len); Err mx1.adamsgaard.dk 70 i+ poll[len] = '\0'; Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ } 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 struct stat sb; Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i if (pledge("stdio cpath rpath", NULL) == -1) { Err mx1.adamsgaard.dk 70 it@@ -47,6 +63,7 @@ main() { 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 (stat(POLLS_DIR, &sb) == -1) { Err mx1.adamsgaard.dk 70 i if (mkdir(POLLS_DIR, 0755) == -1) { Err mx1.adamsgaard.dk 70 i fprintf(stderr, "mkdir polls/ failed: %s\n", strerror(errno)); Err mx1.adamsgaard.dk 70 it@@ -55,13 +72,10 @@ main() { Err mx1.adamsgaard.dk 70 i } 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+ parse_query(); 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+ printf("

poll: '%s'

\n", poll); 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 .