tlist polls and fix install target - 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 524a5c649d588c13e3ec21a599765bb55bee2501
 (DIR) parent 56220268f3d1ce5110b6a3b2a3281a9d6e21f401
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Mon, 28 Sep 2020 00:15:40 +0200
       
       list polls and fix install target
       
       Diffstat:
         M Makefile                            |       2 +-
         M vote.c                              |      47 +++++++++++++++++++++++++++----
       
       2 files changed, 43 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       t@@ -17,7 +17,7 @@ ${NAME}: ${OBJ}
                ${CC} -o $@ ${OBJ} ${HERE_LDFLAGS}
        
        install: ${NAME}
       -        mkdir -p 
       +        mkdir -p ${PREFIX}/${NAME}
                chmod 775 ${PREFIX}/${NAME}
                chgrp www ${PREFIX}/${NAME}
                cp -f ${NAME} ${PREFIX}/${NAME}/
 (DIR) diff --git a/vote.c b/vote.c
       t@@ -11,6 +11,7 @@
        
        #include "util.h"
        
       +#define LEN(s) (sizeof(s) / sizeof(s[0]))
        #define OUT(s) (fputs((s), stdout))
        #define POLLS_DIR "polls"
        
       t@@ -199,13 +200,48 @@ show_poll(const char *poll_name)
        void
        list_polls()
        {
       -        /* something with fts_open, fts_read */
       -        puts("listing polls");
       +        FTS *ftsp;
       +        FTSENT *p;
       +        int fts_options = FTS_COMFOLLOW | FTS_LOGICAL | FTS_NOCHDIR;
       +        /* int fts_options = FTS_NOCHDIR | FTS_PHYSICAL; */
       +        /* char *path = POLLS_DIR; */
       +        char *paths[] = { (char*)POLLS_DIR, NULL };
       +
       +        if ((ftsp = fts_open(paths, fts_options, NULL)) == NULL) {
       +                fprintf(stderr, "could not fts_open");
       +                err(1, "list_polls: fts_open");
       +        }
       +
       +        puts("<h2>Poll listing</h2>");
       +
       +        while ((p = fts_read(ftsp)) != NULL) {
       +                switch (p->fts_info) {
       +                case FTS_F:
       +                        printf("<a href=\"?poll=%s\">%s</a>\n",
       +                               p->fts_path + LEN(POLLS_DIR),
       +                               p->fts_path + LEN(POLLS_DIR));
       +                        break;
       +                default:
       +                        break;
       +                }
       +        }
       +        fts_close(ftsp);
        }
        
       +/*
       +        while ((ch = fgetc(ft)) != EOF) {
       +                if (ch == 'i') {
       +                        fseek(ft, -1, SEEK_CUR);
       +                        fputc('a',ft);
       +                        fseek(ft, 0, SEEK_CUR);
       +                }
       +        }
       +*/
       +
        void
        print_poll_create_form()
        {
       +        OUT("<h2>Create new poll</h2>");
                OUT("<form method=\"get\" action=\"\">\n"
                        "<input type=\"hidden\" name=\"create\" value=\"1\" />\n"
                        "<table class=\"create\" width=\"100%\" border=\"0\" "
       t@@ -305,11 +341,12 @@ main()
                if (*create) {
                        if (create_poll_file(poll, question, options) == 0)
                                show_poll(poll);
       -        } else if (*poll)
       +        } else if (*poll) {
                        show_poll(poll);
       -        else
       +        } else {
       +                list_polls();
                        print_poll_create_form();
       -                /* list_polls(); */
       +        }
        
                print_html_foot();