static int prepare_repo_cmd(struct cgit_context *ctx)
{
- char *tmp;
unsigned char sha1[20];
int nongit = 0;
int rc;
setenv("GIT_DIR", ctx->repo->path, 1);
setup_git_directory_gently(&nongit);
if (nongit) {
+ const char *name = ctx->repo->name;
rc = errno;
ctx->page.title = fmt("%s - %s", ctx->cfg.root_title,
"config error");
- tmp = fmt("Failed to open %s: %s",
- ctx->repo->name,
- rc ? strerror(rc) : "Not a valid git repository");
ctx->repo = NULL;
cgit_print_http_headers(ctx);
cgit_print_docstart(ctx);
cgit_print_pageheader(ctx);
- cgit_print_error(tmp);
+ cgit_print_error("Failed to open %s: %s", name,
+ rc ? strerror(rc) : "Not a valid git repository");
cgit_print_docend();
return 1;
}
}
if (get_sha1(ctx->qry.head, sha1)) {
- tmp = xstrdup(ctx->qry.head);
+ char *tmp = xstrdup(ctx->qry.head);
ctx->qry.head = ctx->repo->defbranch;
ctx->page.status = 404;
ctx->page.statusmsg = "Not found";
cgit_print_http_headers(ctx);
cgit_print_docstart(ctx);
cgit_print_pageheader(ctx);
- cgit_print_error(fmt("Invalid branch: %s", tmp));
+ cgit_print_error("Invalid branch: %s", tmp);
cgit_print_docend();
return 1;
}
cgit_print_http_headers(ctx);
cgit_print_docstart(ctx);
cgit_print_pageheader(ctx);
- cgit_print_error(fmt("No repository selected"));
+ cgit_print_error("No repository selected");
cgit_print_docend();
return;
}
err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root,
ctx.qry.raw, ttl, process_request, &ctx);
if (err)
- cgit_print_error(fmt("Error processing page: %s (%d)",
- strerror(err), err));
+ cgit_print_error("Error processing page: %s (%d)",
+ strerror(err), err);
return err;
}
if (hex) {
if (get_sha1_hex(hex, sha1)) {
- cgit_print_error(fmt("Bad hex value: %s", hex));
+ cgit_print_error("Bad hex value: %s", hex);
return;
}
} else {
if (get_sha1(head, sha1)) {
- cgit_print_error(fmt("Bad ref: %s", head));
+ cgit_print_error("Bad ref: %s", head);
return;
}
}
}
if (type == OBJ_BAD) {
- cgit_print_error(fmt("Bad object name: %s", hex));
+ cgit_print_error("Bad object name: %s", hex);
return;
}
buf = read_sha1_file(sha1, &type, &size);
if (!buf) {
- cgit_print_error(fmt("Error reading object %s", hex));
+ cgit_print_error("Error reading object %s", hex);
return;
}
hex = ctx.qry.head;
if (get_sha1(hex, sha1)) {
- cgit_print_error(fmt("Bad object id: %s", hex));
+ cgit_print_error("Bad object id: %s", hex);
return;
}
commit = lookup_commit_reference(sha1);
if (!commit) {
- cgit_print_error(fmt("Bad commit reference: %s", hex));
+ cgit_print_error("Bad commit reference: %s", hex);
return;
}
info = cgit_parse_commit(commit);
get_sha1(new_rev, new_rev_sha1);
type = sha1_object_info(new_rev_sha1, &size);
if (type == OBJ_BAD) {
- cgit_print_error(fmt("Bad object name: %s", new_rev));
+ cgit_print_error("Bad object name: %s", new_rev);
return;
}
commit = lookup_commit_reference(new_rev_sha1);
if (!commit || parse_commit(commit)) {
- cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(new_rev_sha1)));
+ cgit_print_error("Bad commit: %s", sha1_to_hex(new_rev_sha1));
return;
}
if (!is_null_sha1(old_rev_sha1)) {
type = sha1_object_info(old_rev_sha1, &size);
if (type == OBJ_BAD) {
- cgit_print_error(fmt("Bad object name: %s", sha1_to_hex(old_rev_sha1)));
+ cgit_print_error("Bad object name: %s", sha1_to_hex(old_rev_sha1));
return;
}
commit2 = lookup_commit_reference(old_rev_sha1);
if (!commit2 || parse_commit(commit2)) {
- cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(old_rev_sha1)));
+ cgit_print_error("Bad commit: %s", sha1_to_hex(old_rev_sha1));
return;
}
}
hex = ctx.qry.head;
if (get_sha1(hex, sha1)) {
- cgit_print_error(fmt("Bad object id: %s", hex));
+ cgit_print_error("Bad object id: %s", hex);
return;
}
commit = lookup_commit_reference(sha1);
if (!commit) {
- cgit_print_error(fmt("Bad commit reference: %s", hex));
+ cgit_print_error("Bad commit reference: %s", hex);
return;
}
info = cgit_parse_commit(commit);
tm->tm_hour, tm->tm_min, tm->tm_sec);
}
-void cgit_print_error(const char *msg)
+void cgit_print_error(const char *fmt, ...)
{
+ va_list ap;
+ va_start(ap, fmt);
+ cgit_vprint_error(fmt, ap);
+ va_end(ap);
+}
+
+void cgit_vprint_error(const char *fmt, va_list ap)
+{
+ va_list cp;
html("<div class='error'>");
- html_txt(msg);
+ va_copy(cp, ap);
+ html_vtxtf(fmt, cp);
+ va_end(cp);
html("</div>\n");
}
extern void cgit_submodule_link(const char *class, char *path,
const char *rev);
-extern void cgit_print_error(const char *msg);
+__attribute__((format (printf,1,2)))
+extern void cgit_print_error(const char *fmt, ...);
+__attribute__((format (printf,1,0)))
+extern void cgit_vprint_error(const char *fmt, va_list ap);
extern void cgit_print_date(time_t secs, const char *format, int local_time);
extern void cgit_print_age(time_t t, time_t max_relative, const char *format);
extern void cgit_print_http_headers(struct cgit_context *ctx);
unsigned char sha1[20];
if (get_sha1(hex, sha1)) {
- cgit_print_error(fmt("Bad object id: %s", hex));
+ cgit_print_error("Bad object id: %s", hex);
return 1;
}
if (!lookup_commit_reference(sha1)) {
- cgit_print_error(fmt("Not a commit reference: %s", hex));
+ cgit_print_error("Not a commit reference: %s", hex);
return 1;
}
ctx.page.mimetype = xstrdup(format->mimetype);
return NULL;
}
-static void show_error(char *msg)
+__attribute__((format (printf, 1, 2)))
+static void show_error(char *fmt, ...)
{
+ va_list ap;
+
ctx.page.mimetype = "text/html";
cgit_print_http_headers(&ctx);
cgit_print_docstart(&ctx);
cgit_print_pageheader(&ctx);
- cgit_print_error(msg);
+ va_start(ap, fmt);
+ cgit_vprint_error(fmt, ap);
+ va_end(ap);
cgit_print_docend();
}
f = get_format(filename);
if (!f) {
- show_error(xstrdup(fmt("Unsupported snapshot format: %s",
- filename)));
+ show_error("Unsupported snapshot format: %s", filename);
return;
}
i = cgit_find_stats_period(code, &period);
if (!i) {
- cgit_print_error(fmt("Unknown statistics type: %c", code[0]));
+ cgit_print_error("Unknown statistics type: %c", code[0]);
return;
}
if (i > ctx->repo->max_stats) {
- cgit_print_error(fmt("Statistics type disabled: %s",
- period->name));
+ cgit_print_error("Statistics type disabled: %s", period->name);
return;
}
authors = collect_stats(ctx, period);
revname = ctx.qry.head;
if (get_sha1(fmt("refs/tags/%s", revname), sha1)) {
- cgit_print_error(fmt("Bad tag reference: %s", revname));
+ cgit_print_error("Bad tag reference: %s", revname);
return;
}
obj = parse_object(sha1);
if (!obj) {
- cgit_print_error(fmt("Bad object id: %s", sha1_to_hex(sha1)));
+ cgit_print_error("Bad object id: %s", sha1_to_hex(sha1));
return;
}
if (obj->type == OBJ_TAG) {
tag = lookup_tag(sha1);
if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) {
- cgit_print_error(fmt("Bad tag object: %s", revname));
+ cgit_print_error("Bad tag object: %s", revname);
return;
}
html("<table class='commit-info'>\n");
type = sha1_object_info(sha1, &size);
if (type == OBJ_BAD) {
- cgit_print_error(fmt("Bad object name: %s",
- sha1_to_hex(sha1)));
+ cgit_print_error("Bad object name: %s", sha1_to_hex(sha1));
return;
}
buf = read_sha1_file(sha1, &type, &size);
if (!buf) {
- cgit_print_error(fmt("Error reading object %s",
- sha1_to_hex(sha1)));
+ cgit_print_error("Error reading object %s", sha1_to_hex(sha1));
return;
}
tree = parse_tree_indirect(sha1);
if (!tree) {
- cgit_print_error(fmt("Not a tree object: %s",
- sha1_to_hex(sha1)));
+ cgit_print_error("Not a tree object: %s", sha1_to_hex(sha1));
return;
}
rev = ctx.qry.head;
if (get_sha1(rev, sha1)) {
- cgit_print_error(fmt("Invalid revision name: %s", rev));
+ cgit_print_error("Invalid revision name: %s", rev);
return;
}
commit = lookup_commit_reference(sha1);
if (!commit || parse_commit(commit)) {
- cgit_print_error(fmt("Invalid commit reference: %s", rev));
+ cgit_print_error("Invalid commit reference: %s", rev);
return;
}