tvote.c: improve display of poll files - 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 10c2ffb581321cb59e676d3f577ce0946debe5c6
(DIR) parent 9afaec1473d2044388e45ede5f1a4ed38d198939
(HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Sun, 27 Sep 2020 10:05:36 +0200
vote.c: improve display of poll files
Diffstat:
M vote.c | 50 +++++++++++++++++++++++++++++--
1 file changed, 48 insertions(+), 2 deletions(-)
---
(DIR) diff --git a/vote.c b/vote.c
t@@ -50,6 +50,53 @@ print_html_foot()
}
void
+print_poll_line(char *line)
+{
+ printf("<tr><td>");
+ while (*line) {
+ switch(*line) {
+ case '\t':
+ printf("</td><td>");
+ break;
+ default:
+ putchar(*line);
+ break;
+ }
+ (void)*line++;
+ }
+ puts("</td></tr>");
+}
+
+void
+print_poll_file(FILE *fp)
+{
+ char *line = NULL;
+ size_t linesize = 0;
+ ssize_t linelen;
+ unsigned int lineno = 0;
+
+ while ((linelen = getline(&line, &linesize, fp)) != -1) {
+ lineno++;
+ if (line[linelen - 1] == '\n')
+ line[--linelen] = '\0';
+
+ if (lineno == 1) {
+ printf("<h1>");
+ fwrite(line, linelen, 1, stdout);
+ printf("</h1>");
+ printf("<table>\n");
+ } else {
+ print_poll_line(line);
+ }
+ /* puts("<br>"); */
+ }
+ free(line);
+ if (ferror(fp))
+ err(1, "print_poll_file: getline");
+ puts("</table>");
+}
+
+void
show_poll(const char *poll_name)
{
FILE *fd;
t@@ -67,10 +114,9 @@ show_poll(const char *poll_name)
http_status(404);
exit(1);
} else {
+ print_poll_file(fd);
fclose(fd);
}
-
- printf("<h2>poll: '%s'</h2>\n", poll);
}
void