/* html.c: helper functions for html output
*
- * Copyright (C) 2006 Lars Hjemli
+ * Copyright (C) 2006-2014 cgit Development Team <cgit@lists.zx2c4.com>
*
* Licensed under GNU General Public License v2
* (see COPYING for full license text)
*/
+#include "cgit.h"
#include "html.h"
#include <unistd.h>
#include <stdio.h>
"%fe", "%ff"
};
-static int htmlfd = STDOUT_FILENO;
-
char *fmt(const char *format, ...)
{
static char buf[8][1024];
return buf[bufidx];
}
+char *fmtalloc(const char *format, ...)
+{
+ struct strbuf sb = STRBUF_INIT;
+ va_list args;
+
+ va_start(args, format);
+ strbuf_vaddf(&sb, format, args);
+ va_end(args);
+
+ return strbuf_detach(&sb, NULL);
+}
+
void html_raw(const char *data, size_t size)
{
- if (write(htmlfd, data, size) != size)
- fprintf(stderr, "[html.c] html output truncated.\n");
+ if (write(STDOUT_FILENO, data, size) != size)
+ die_errno("write error on html output");
}
void html(const char *txt)
void htmlf(const char *format, ...)
{
- static char buf[65536];
va_list args;
+ struct strbuf buf = STRBUF_INIT;
va_start(args, format);
- vsnprintf(buf, sizeof(buf), format, args);
+ strbuf_vaddf(&buf, format, args);
va_end(args);
- html(buf);
+ html(buf.buf);
+ strbuf_release(&buf);
+}
+
+void html_txtf(const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ html_vtxtf(format, args);
+ va_end(args);
+}
+
+void html_vtxtf(const char *format, va_list ap)
+{
+ va_list cp;
+ struct strbuf buf = STRBUF_INIT;
+
+ va_copy(cp, ap);
+ strbuf_vaddf(&buf, format, cp);
+ va_end(cp);
+ html_txt(buf.buf);
+ strbuf_release(&buf);
}
void html_status(int code, const char *msg, int more_headers)
html("...");
}
+void html_attrf(const char *fmt, ...)
+{
+ va_list ap;
+ struct strbuf sb = STRBUF_INIT;
+
+ va_start(ap, fmt);
+ strbuf_vaddf(&sb, fmt, ap);
+ va_end(ap);
+
+ html_attr(sb.buf);
+ strbuf_release(&sb);
+}
+
void html_attr(const char *txt)
{
const char *t = txt;
if (!txt_)
return 0;
- o = t = txt = strdup(txt_);
- if (t == NULL) {
- printf("Out of memory\n");
- exit(1);
- }
+ o = t = txt = xstrdup(txt_);
while ((c=*t) != '\0') {
if (c == '=') {
*t = '\0';