tmove query parsing into separate function - vote - simple cgi voting system for web and gopher
 (HTM) git clone git://src.adamsgaard.dk/vote
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 74b58729c204508d0e3fbe2162a3325d2f3d5aeb
 (DIR) parent c7654831e7c7bc274ca47f940c93392a55a74cb2
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Sun, 27 Sep 2020 01:39:22 +0200
       
       move query parsing into separate function
       
       Diffstat:
         M vote.c                              |      28 +++++++++++++++++++++-------
       
       1 file changed, 21 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/vote.c b/vote.c
       t@@ -8,6 +8,8 @@
        #define OUT(s) (fputs((s), stdout))
        #define POLLS_DIR "polls"
        
       +static char poll[1024];
       +
        void
        print_html_head() {
                OUT("Content-type: text/html; charset=utf-8\r\n\r\n");
       t@@ -36,10 +38,24 @@ getparam(const char *query, const char *s) {
                return (char *)last;
        }
        
       +void
       +parse_query() {
       +        char *query, *p;
       +        size_t len;
       +
       +        if (!(query = getenv("QUERY_STRING")))
       +                query = "";
       +
       +        if ((p = getparam(query, "poll"))) {
       +                if ((len = strcspn(p, "&")) && len + 1 < sizeof(poll)) {
       +                        memcpy(poll, p, len);
       +                        poll[len] = '\0';
       +                }
       +        }
       +}
       +
        int
        main() {
       -        char *query;
       -        char *q;
                struct stat sb;
        
                if (pledge("stdio cpath rpath", NULL) == -1) {
       t@@ -47,6 +63,7 @@ main() {
                        OUT("Status: 500 Internal Server Error\r\n\r\n");
                        exit(1);
                }
       +
                if (stat(POLLS_DIR, &sb) == -1) {
                        if (mkdir(POLLS_DIR, 0755) == -1) {
                                fprintf(stderr, "mkdir polls/ failed: %s\n", strerror(errno));
       t@@ -55,13 +72,10 @@ main() {
                        }
                }
        
       -        if (!(query = getenv("QUERY_STRING")))
       -                query = "";
       -
       -        q = getparam(query, "q");
       +        parse_query();
        
                print_html_head();
       -        printf("<p>query string: '%s', q: '%s'</p>\n", query, q);
       +        printf("<p>poll: '%s'</p>\n", poll);
                print_html_foot();
        
                return 0;