X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/54d37dc154f5308459df0a90c81dabd0245b6c17..2c9f56f3e1c754f60ccffbc6c745b9d5a81ea005:/ui-shared.c diff --git a/ui-shared.c b/ui-shared.c index a63dcb0..b53c56d 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -133,20 +133,25 @@ const char *cgit_repobasename(const char *reponame) static char rvbuf[1024]; int p; const char *rv; - strncpy(rvbuf, reponame, sizeof(rvbuf)); - if (rvbuf[sizeof(rvbuf)-1]) + size_t len; + + len = strlcpy(rvbuf, reponame, sizeof(rvbuf)); + if (len >= sizeof(rvbuf)) die("cgit_repobasename: truncated repository name '%s'", reponame); - p = strlen(rvbuf)-1; + p = len - 1; /* strip trailing slashes */ - while (p && rvbuf[p] == '/') rvbuf[p--] = 0; + while (p && rvbuf[p] == '/') + rvbuf[p--] = '\0'; /* strip trailing .git */ if (p >= 3 && starts_with(&rvbuf[p-3], ".git")) { - p -= 3; rvbuf[p--] = 0; + p -= 3; + rvbuf[p--] = '\0'; } /* strip more trailing slashes if any */ - while ( p && rvbuf[p] == '/') rvbuf[p--] = 0; + while (p && rvbuf[p] == '/') + rvbuf[p--] = '\0'; /* find last slash in the remaining string */ - rv = strrchr(rvbuf,'/'); + rv = strrchr(rvbuf, '/'); if (rv) return ++rv; return rvbuf; @@ -775,6 +780,8 @@ void cgit_print_docstart(void) cgit_add_clone_urls(print_rel_vcs_link); if (ctx.cfg.head_include) html_include(ctx.cfg.head_include); + if (ctx.repo && ctx.repo->extra_head_content) + html(ctx.repo->extra_head_content); html("\n"); html("\n"); if (ctx.cfg.header) @@ -1112,7 +1119,7 @@ void cgit_compose_snapshot_prefix(struct strbuf *filename, const char *base, void cgit_print_snapshot_links(const struct cgit_repo *repo, const char *ref, const char *separator) { - const struct cgit_snapshot_format* f; + const struct cgit_snapshot_format *f; struct strbuf filename = STRBUF_INIT; const char *basename; size_t prefixlen; @@ -1137,6 +1144,13 @@ void cgit_print_snapshot_links(const struct cgit_repo *repo, const char *ref, cgit_snapshot_link("sig", NULL, NULL, NULL, NULL, filename.buf); html(")"); + } else if (starts_with(f->suffix, ".tar") && cgit_snapshot_get_sig(ref, &cgit_snapshot_formats[0])) { + strbuf_setlen(&filename, strlen(filename.buf) - strlen(f->suffix)); + strbuf_addstr(&filename, ".tar.asc"); + html(" ("); + cgit_snapshot_link("sig", NULL, NULL, NULL, NULL, + filename.buf); + html(")"); } html(separator); } @@ -1145,7 +1159,7 @@ void cgit_print_snapshot_links(const struct cgit_repo *repo, const char *ref, void cgit_set_title_from_path(const char *path) { - size_t path_len, path_index, path_last_end; + size_t path_len, path_index, path_last_end, line_len; char *new_title; if (!path) @@ -1162,14 +1176,18 @@ void cgit_set_title_from_path(const char *path) continue; } strncat(new_title, &path[path_index + 1], path_last_end - path_index - 1); - strcat(new_title, "\\"); + line_len = strlen(new_title); + new_title[line_len++] = '\\'; + new_title[line_len] = '\0'; path_last_end = path_index; } } if (path_last_end) strncat(new_title, path, path_last_end); - strcat(new_title, " - "); - strcat(new_title, ctx.page.title); + line_len = strlen(new_title); + memcpy(&new_title[line_len], " - ", 3); + new_title[line_len + 3] = '\0'; + strncat(new_title, ctx.page.title, sizeof(new_title) - strlen(new_title) - 1); ctx.page.title = new_title; }