|
diff --git a/html.c b/html.c index 1237076..83fc7a9 100644 --- a/ html.c+++ b/ html.c |
|
@@ -6,64 +6,69 @@ |
6 | * (see COPYING for full license text) |
6 | * (see COPYING for full license text) |
7 | */ |
7 | */ |
8 | |
8 | |
9 | #include <unistd.h> |
9 | #include <unistd.h> |
10 | #include <stdio.h> |
10 | #include <stdio.h> |
11 | #include <stdlib.h> |
11 | #include <stdlib.h> |
12 | #include <stdarg.h> |
12 | #include <stdarg.h> |
13 | #include <string.h> |
13 | #include <string.h> |
14 | #include <errno.h> |
14 | #include <errno.h> |
15 | |
15 | |
16 | int htmlfd = STDOUT_FILENO; |
16 | int htmlfd = STDOUT_FILENO; |
17 | |
17 | |
18 | char *fmt(const char *format, ...) |
18 | char *fmt(const char *format, ...) |
19 | { |
19 | { |
20 | static char buf[8][1024]; |
20 | static char buf[8][1024]; |
21 | static int bufidx; |
21 | static int bufidx; |
22 | int len; |
22 | int len; |
23 | va_list args; |
23 | va_list args; |
24 | |
24 | |
25 | bufidx++; |
25 | bufidx++; |
26 | bufidx &= 7; |
26 | bufidx &= 7; |
27 | |
27 | |
28 | va_start(args, format); |
28 | va_start(args, format); |
29 | len = vsnprintf(buf[bufidx], sizeof(buf[bufidx]), format, args); |
29 | len = vsnprintf(buf[bufidx], sizeof(buf[bufidx]), format, args); |
30 | va_end(args); |
30 | va_end(args); |
31 | if (len>sizeof(buf[bufidx])) { |
31 | if (len>sizeof(buf[bufidx])) { |
32 | fprintf(stderr, "[html.c] string truncated: %s\n", format); |
32 | fprintf(stderr, "[html.c] string truncated: %s\n", format); |
33 | exit(1); |
33 | exit(1); |
34 | } |
34 | } |
35 | return buf[bufidx]; |
35 | return buf[bufidx]; |
36 | } |
36 | } |
37 | |
37 | |
| |
38 | void html_raw(const char *data, size_t size) |
| |
39 | { |
| |
40 | write(htmlfd, data, size); |
| |
41 | } |
| |
42 | |
38 | void html(const char *txt) |
43 | void html(const char *txt) |
39 | { |
44 | { |
40 | write(htmlfd, txt, strlen(txt)); |
45 | write(htmlfd, txt, strlen(txt)); |
41 | } |
46 | } |
42 | |
47 | |
43 | void htmlf(const char *format, ...) |
48 | void htmlf(const char *format, ...) |
44 | { |
49 | { |
45 | static char buf[65536]; |
50 | static char buf[65536]; |
46 | va_list args; |
51 | va_list args; |
47 | |
52 | |
48 | va_start(args, format); |
53 | va_start(args, format); |
49 | vsnprintf(buf, sizeof(buf), format, args); |
54 | vsnprintf(buf, sizeof(buf), format, args); |
50 | va_end(args); |
55 | va_end(args); |
51 | html(buf); |
56 | html(buf); |
52 | } |
57 | } |
53 | |
58 | |
54 | void html_status(int code, int more_headers) |
59 | void html_status(int code, int more_headers) |
55 | { |
60 | { |
56 | htmlf("Status: %d\n", code); |
61 | htmlf("Status: %d\n", code); |
57 | if (!more_headers) |
62 | if (!more_headers) |
58 | html("\n"); |
63 | html("\n"); |
59 | } |
64 | } |
60 | |
65 | |
61 | void html_txt(char *txt) |
66 | void html_txt(char *txt) |
62 | { |
67 | { |
63 | char *t = txt; |
68 | char *t = txt; |
64 | while(t && *t){ |
69 | while(t && *t){ |
65 | int c = *t; |
70 | int c = *t; |
66 | if (c=='<' || c=='>' || c=='&') { |
71 | if (c=='<' || c=='>' || c=='&') { |
67 | write(htmlfd, txt, t - txt); |
72 | write(htmlfd, txt, t - txt); |
68 | if (c=='>') |
73 | if (c=='>') |
69 | html(">"); |
74 | html(">"); |
|