return "http://";
}
-const char *cgit_hosturl(void)
+char *cgit_hosturl(void)
{
if (ctx.env.http_host)
- return ctx.env.http_host;
+ return xstrdup(ctx.env.http_host);
if (!ctx.env.server_name)
return NULL;
if (!ctx.env.server_port || atoi(ctx.env.server_port) == 80)
- return ctx.env.server_name;
+ return xstrdup(ctx.env.server_name);
return fmtalloc("%s:%s", ctx.env.server_name, ctx.env.server_port);
}
if (always_root || page)
html_attr(cgit_rooturl());
- else
- html_attr(cgit_currenturl());
+ else {
+ char *currenturl = cgit_currenturl();
+ html_attr(currenturl);
+ free(currenturl);
+ }
if (page) {
htmlf("?p=%s", page);
{
char *page, *shortrev, *fullrev, *name;
- fullrev = sha1_to_hex(obj->sha1);
+ fullrev = oid_to_hex(&obj->oid);
shortrev = xstrdup(fullrev);
shortrev[10] = '\0';
if (obj->type == OBJ_COMMIT) {
htmlf("Content-Type: %s\n", ctx.page.mimetype);
if (ctx.page.size)
htmlf("Content-Length: %zd\n", ctx.page.size);
- if (ctx.page.filename)
- htmlf("Content-Disposition: inline; filename=\"%s\"\n",
- ctx.page.filename);
+ if (ctx.page.filename) {
+ html("Content-Disposition: inline; filename=\"");
+ html_header_arg_in_quotes(ctx.page.filename);
+ html("\"\n");
+ }
if (!ctx.env.authenticated)
html("Cache-Control: no-cache, no-store\n");
htmlf("Last-Modified: %s\n", http_date(ctx.page.modified));
void cgit_redirect(const char *url, bool permanent)
{
htmlf("Status: %d %s\n", permanent ? 301 : 302, permanent ? "Moved" : "Found");
- htmlf("Location: %s\n\n", url);
+ html("Location: ");
+ html_url_path(url);
+ html("\n\n");
exit(0);
}
return;
}
- const char *host = cgit_hosturl();
+ char *host = cgit_hosturl();
html(cgit_doctype);
html("<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>\n");
html("<head>\n");
html("<link rel='alternate' title='Atom feed' href='");
html(cgit_httpscheme());
- html_attr(cgit_hosturl());
+ html_attr(host);
fileurl = cgit_fileurl(ctx.repo->url, "atom", ctx.qry.vpath,
sb.buf);
html_attr(fileurl);
html("<body>\n");
if (ctx.cfg.header)
html_include(ctx.cfg.header);
+ free(host);
}
void cgit_print_docend(void)
static const char *hc(const char *page)
{
+ if (!ctx.qry.page)
+ return NULL;
+
return strcmp(ctx.qry.page, page) ? NULL : "active";
}
html("<input type='submit' value='search'/>\n");
html("</form>\n");
} else if (ctx.env.authenticated) {
+ char *currenturl = cgit_currenturl();
site_link(NULL, "index", NULL, hc("repolist"), NULL, NULL, 0, 1);
if (ctx.cfg.root_readme)
site_link("about", "about", NULL, hc("about"),
NULL, NULL, 0, 1);
html("</td><td class='form'>");
html("<form method='get' action='");
- html_attr(cgit_currenturl());
+ html_attr(currenturl);
html("'>\n");
html("<input type='text' name='q' size='10' value='");
html_attr(ctx.qry.search);
html("'/>\n");
html("<input type='submit' value='search'/>\n");
html("</form>");
+ free(currenturl);
}
html("</td></tr></table>\n");
if (ctx.env.authenticated && ctx.qry.vpath) {