summaryrefslogtreecommitdiffabout
path: root/html.c
authorLars Hjemli <hjemli@gmail.com>2008-09-01 20:40:24 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-09-01 20:40:24 (UTC)
commit288d502b3d8e7fa916104b486bbb146521e5c716 (patch) (side-by-side diff)
treeafa132f6c973ab30e0b8ed1201fb691fe91103c0 /html.c
parent2cecf839a06ce951db0d5d95abf79004eff33ca7 (diff)
parent02a545e63454530c1639014d3239c14ced2022c6 (diff)
downloadcgit-288d502b3d8e7fa916104b486bbb146521e5c716.zip
cgit-288d502b3d8e7fa916104b486bbb146521e5c716.tar.gz
cgit-288d502b3d8e7fa916104b486bbb146521e5c716.tar.bz2
Merge branch 'lh/clone'
* lh/clone: Add support for cloning over http Conflicts: cmd.c
Diffstat (limited to 'html.c') (more/less context) (ignore whitespace changes)
-rw-r--r--html.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/html.c b/html.c
index bddb04d..1237076 100644
--- a/html.c
+++ b/html.c
@@ -6,96 +6,103 @@
* (see COPYING for full license text)
*/
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
int htmlfd = STDOUT_FILENO;
char *fmt(const char *format, ...)
{
static char buf[8][1024];
static int bufidx;
int len;
va_list args;
bufidx++;
bufidx &= 7;
va_start(args, format);
len = vsnprintf(buf[bufidx], sizeof(buf[bufidx]), format, args);
va_end(args);
if (len>sizeof(buf[bufidx])) {
fprintf(stderr, "[html.c] string truncated: %s\n", format);
exit(1);
}
return buf[bufidx];
}
void html(const char *txt)
{
write(htmlfd, txt, strlen(txt));
}
void htmlf(const char *format, ...)
{
static char buf[65536];
va_list args;
va_start(args, format);
vsnprintf(buf, sizeof(buf), format, args);
va_end(args);
html(buf);
}
+void html_status(int code, int more_headers)
+{
+ htmlf("Status: %d\n", code);
+ if (!more_headers)
+ html("\n");
+}
+
void html_txt(char *txt)
{
char *t = txt;
while(t && *t){
int c = *t;
if (c=='<' || c=='>' || c=='&') {
write(htmlfd, txt, t - txt);
if (c=='>')
html("&gt;");
else if (c=='<')
html("&lt;");
else if (c=='&')
html("&amp;");
txt = t+1;
}
t++;
}
if (t!=txt)
html(txt);
}
void html_ntxt(int len, char *txt)
{
char *t = txt;
while(t && *t && len--){
int c = *t;
if (c=='<' || c=='>' || c=='&') {
write(htmlfd, txt, t - txt);
if (c=='>')
html("&gt;");
else if (c=='<')
html("&lt;");
else if (c=='&')
html("&amp;");
txt = t+1;
}
t++;
}
if (t!=txt)
write(htmlfd, txt, t - txt);
if (len<0)
html("...");
}
void html_attr(char *txt)
{
char *t = txt;
while(t && *t){