|
diff --git a/html.c b/html.c index eaabf72..1305910 100644 --- a/ html.c+++ b/ html.c |
|
@@ -82,119 +82,119 @@ void htmlf(const char *format, ...) |
82 | html(buf); |
82 | html(buf); |
83 | } |
83 | } |
84 | |
84 | |
85 | void html_status(int code, const char *msg, int more_headers) |
85 | void html_status(int code, const char *msg, int more_headers) |
86 | { |
86 | { |
87 | htmlf("Status: %d %s\n", code, msg); |
87 | htmlf("Status: %d %s\n", code, msg); |
88 | if (!more_headers) |
88 | if (!more_headers) |
89 | html("\n"); |
89 | html("\n"); |
90 | } |
90 | } |
91 | |
91 | |
92 | void html_txt(const char *txt) |
92 | void html_txt(const char *txt) |
93 | { |
93 | { |
94 | const char *t = txt; |
94 | const char *t = txt; |
95 | while(t && *t){ |
95 | while(t && *t){ |
96 | int c = *t; |
96 | int c = *t; |
97 | if (c=='<' || c=='>' || c=='&') { |
97 | if (c=='<' || c=='>' || c=='&') { |
98 | write(htmlfd, txt, t - txt); |
98 | html_raw(txt, t - txt); |
99 | if (c=='>') |
99 | if (c=='>') |
100 | html(">"); |
100 | html(">"); |
101 | else if (c=='<') |
101 | else if (c=='<') |
102 | html("<"); |
102 | html("<"); |
103 | else if (c=='&') |
103 | else if (c=='&') |
104 | html("&"); |
104 | html("&"); |
105 | txt = t+1; |
105 | txt = t+1; |
106 | } |
106 | } |
107 | t++; |
107 | t++; |
108 | } |
108 | } |
109 | if (t!=txt) |
109 | if (t!=txt) |
110 | html(txt); |
110 | html(txt); |
111 | } |
111 | } |
112 | |
112 | |
113 | void html_ntxt(int len, const char *txt) |
113 | void html_ntxt(int len, const char *txt) |
114 | { |
114 | { |
115 | const char *t = txt; |
115 | const char *t = txt; |
116 | while(t && *t && len--){ |
116 | while(t && *t && len--){ |
117 | int c = *t; |
117 | int c = *t; |
118 | if (c=='<' || c=='>' || c=='&') { |
118 | if (c=='<' || c=='>' || c=='&') { |
119 | write(htmlfd, txt, t - txt); |
119 | html_raw(txt, t - txt); |
120 | if (c=='>') |
120 | if (c=='>') |
121 | html(">"); |
121 | html(">"); |
122 | else if (c=='<') |
122 | else if (c=='<') |
123 | html("<"); |
123 | html("<"); |
124 | else if (c=='&') |
124 | else if (c=='&') |
125 | html("&"); |
125 | html("&"); |
126 | txt = t+1; |
126 | txt = t+1; |
127 | } |
127 | } |
128 | t++; |
128 | t++; |
129 | } |
129 | } |
130 | if (t!=txt) |
130 | if (t!=txt) |
131 | write(htmlfd, txt, t - txt); |
131 | html_raw(txt, t - txt); |
132 | if (len<0) |
132 | if (len<0) |
133 | html("..."); |
133 | html("..."); |
134 | } |
134 | } |
135 | |
135 | |
136 | void html_attr(const char *txt) |
136 | void html_attr(const char *txt) |
137 | { |
137 | { |
138 | const char *t = txt; |
138 | const char *t = txt; |
139 | while(t && *t){ |
139 | while(t && *t){ |
140 | int c = *t; |
140 | int c = *t; |
141 | if (c=='<' || c=='>' || c=='\'' || c=='\"') { |
141 | if (c=='<' || c=='>' || c=='\'' || c=='\"') { |
142 | write(htmlfd, txt, t - txt); |
142 | html_raw(txt, t - txt); |
143 | if (c=='>') |
143 | if (c=='>') |
144 | html(">"); |
144 | html(">"); |
145 | else if (c=='<') |
145 | else if (c=='<') |
146 | html("<"); |
146 | html("<"); |
147 | else if (c=='\'') |
147 | else if (c=='\'') |
148 | html("'"); |
148 | html("'"); |
149 | else if (c=='"') |
149 | else if (c=='"') |
150 | html("""); |
150 | html("""); |
151 | txt = t+1; |
151 | txt = t+1; |
152 | } |
152 | } |
153 | t++; |
153 | t++; |
154 | } |
154 | } |
155 | if (t!=txt) |
155 | if (t!=txt) |
156 | html(txt); |
156 | html(txt); |
157 | } |
157 | } |
158 | |
158 | |
159 | void html_url_path(const char *txt) |
159 | void html_url_path(const char *txt) |
160 | { |
160 | { |
161 | const char *t = txt; |
161 | const char *t = txt; |
162 | while(t && *t){ |
162 | while(t && *t){ |
163 | int c = *t; |
163 | int c = *t; |
164 | const char *e = url_escape_table[c]; |
164 | const char *e = url_escape_table[c]; |
165 | if (e && c!='+' && c!='&' && c!='+') { |
165 | if (e && c!='+' && c!='&' && c!='+') { |
166 | write(htmlfd, txt, t - txt); |
166 | html_raw(txt, t - txt); |
167 | write(htmlfd, e, 3); |
167 | html_raw(e, 3); |
168 | txt = t+1; |
168 | txt = t+1; |
169 | } |
169 | } |
170 | t++; |
170 | t++; |
171 | } |
171 | } |
172 | if (t!=txt) |
172 | if (t!=txt) |
173 | html(txt); |
173 | html(txt); |
174 | } |
174 | } |
175 | |
175 | |
176 | void html_url_arg(const char *txt) |
176 | void html_url_arg(const char *txt) |
177 | { |
177 | { |
178 | const char *t = txt; |
178 | const char *t = txt; |
179 | while(t && *t){ |
179 | while(t && *t){ |
180 | int c = *t; |
180 | int c = *t; |
181 | const char *e = url_escape_table[c]; |
181 | const char *e = url_escape_table[c]; |
182 | if (e) { |
182 | if (e) { |
183 | write(htmlfd, txt, t - txt); |
183 | html_raw(txt, t - txt); |
184 | write(htmlfd, e, 3); |
184 | html_raw(e, 3); |
185 | txt = t+1; |
185 | txt = t+1; |
186 | } |
186 | } |
187 | t++; |
187 | t++; |
188 | } |
188 | } |
189 | if (t!=txt) |
189 | if (t!=txt) |
190 | html(txt); |
190 | html(txt); |
191 | } |
191 | } |
192 | |
192 | |
193 | void html_hidden(const char *name, const char *value) |
193 | void html_hidden(const char *name, const char *value) |
194 | { |
194 | { |
195 | html("<input type='hidden' name='"); |
195 | html("<input type='hidden' name='"); |
196 | html_attr(name); |
196 | html_attr(name); |
197 | html("' value='"); |
197 | html("' value='"); |
198 | html_attr(value); |
198 | html_attr(value); |
199 | html("'/>"); |
199 | html("'/>"); |
200 | } |
200 | } |
@@ -236,33 +236,33 @@ void html_fileperm(unsigned short mode) |
236 | htmlf("%c%c%c", (mode & 4 ? 'r' : '-'), |
236 | htmlf("%c%c%c", (mode & 4 ? 'r' : '-'), |
237 | (mode & 2 ? 'w' : '-'), (mode & 1 ? 'x' : '-')); |
237 | (mode & 2 ? 'w' : '-'), (mode & 1 ? 'x' : '-')); |
238 | } |
238 | } |
239 | |
239 | |
240 | int html_include(const char *filename) |
240 | int html_include(const char *filename) |
241 | { |
241 | { |
242 | FILE *f; |
242 | FILE *f; |
243 | char buf[4096]; |
243 | char buf[4096]; |
244 | size_t len; |
244 | size_t len; |
245 | |
245 | |
246 | if (!(f = fopen(filename, "r"))) { |
246 | if (!(f = fopen(filename, "r"))) { |
247 | fprintf(stderr, "[cgit] Failed to include file %s: %s (%d).\n", |
247 | fprintf(stderr, "[cgit] Failed to include file %s: %s (%d).\n", |
248 | filename, strerror(errno), errno); |
248 | filename, strerror(errno), errno); |
249 | return -1; |
249 | return -1; |
250 | } |
250 | } |
251 | while((len = fread(buf, 1, 4096, f)) > 0) |
251 | while((len = fread(buf, 1, 4096, f)) > 0) |
252 | write(htmlfd, buf, len); |
252 | html_raw(buf, len); |
253 | fclose(f); |
253 | fclose(f); |
254 | return 0; |
254 | return 0; |
255 | } |
255 | } |
256 | |
256 | |
257 | int hextoint(char c) |
257 | int hextoint(char c) |
258 | { |
258 | { |
259 | if (c >= 'a' && c <= 'f') |
259 | if (c >= 'a' && c <= 'f') |
260 | return 10 + c - 'a'; |
260 | return 10 + c - 'a'; |
261 | else if (c >= 'A' && c <= 'F') |
261 | else if (c >= 'A' && c <= 'F') |
262 | return 10 + c - 'A'; |
262 | return 10 + c - 'A'; |
263 | else if (c >= '0' && c <= '9') |
263 | else if (c >= '0' && c <= '9') |
264 | return c - '0'; |
264 | return c - '0'; |
265 | else |
265 | else |
266 | return -1; |
266 | return -1; |
267 | } |
267 | } |
268 | |
268 | |
|