#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
+#include <errno.h>
int htmlfd = STDOUT_FILENO;
return buf[bufidx];
}
+void html_raw(const char *data, size_t size)
+{
+ write(htmlfd, data, size);
+}
+
void html(const char *txt)
{
write(htmlfd, txt, strlen(txt));
html(buf);
}
+void html_status(int code, const char *msg, int more_headers)
+{
+ htmlf("Status: %d %s\n", code, msg);
+ if (!more_headers)
+ html("\n");
+}
+
void html_txt(char *txt)
{
char *t = txt;
char *t = txt;
while(t && *t){
int c = *t;
- if (c=='<' || c=='>' || c=='\'') {
+ if (c=='<' || c=='>' || c=='\'' || c=='\"') {
write(htmlfd, txt, t - txt);
if (c=='>')
html(">");
else if (c=='<')
html("<");
else if (c=='\'')
- html(""e;");
+ html("'");
+ else if (c=='"')
+ html(""");
+ txt = t+1;
+ }
+ t++;
+ }
+ if (t!=txt)
+ html(txt);
+}
+
+void html_url_path(char *txt)
+{
+ char *t = txt;
+ while(t && *t){
+ int c = *t;
+ if (c=='"' || c=='#' || c=='\'' || c=='?') {
+ write(htmlfd, txt, t - txt);
+ write(htmlfd, fmt("%%%2x", c), 3);
+ txt = t+1;
+ }
+ t++;
+ }
+ if (t!=txt)
+ html(txt);
+}
+
+void html_url_arg(char *txt)
+{
+ char *t = txt;
+ while(t && *t){
+ int c = *t;
+ if (c=='"' || c=='#' || c=='%' || c=='&' || c=='\'' || c=='+' || c=='?') {
+ write(htmlfd, txt, t - txt);
+ write(htmlfd, fmt("%%%2x", c), 3);
txt = t+1;
}
t++;
char buf[4096];
size_t len;
- if (!(f = fopen(filename, "r")))
+ if (!(f = fopen(filename, "r"))) {
+ fprintf(stderr, "[cgit] Failed to include file %s: %s (%d).\n",
+ filename, strerror(errno), errno);
return -1;
+ }
while((len = fread(buf, 1, 4096, f)) > 0)
write(htmlfd, buf, len);
fclose(f);