Diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/scan-tree.c | 17 |
1 file changed, 7 insertions, 10 deletions
diff --git a/source/scan-tree.c b/source/scan-tree.c index ed50769..be37805 100644 --- a/source/scan-tree.c +++ b/source/scan-tree.c @@ -185,23 +185,20 @@ static void add_repo(const char *base, struct strbuf *path) // Drop the trailing slash added above, or the "/.git" suffix test // below never matches and a working tree is named "repo/.git". - if (relpath.len && relpath.buf[relpath.len - 1] == '/') - strbuf_setlen(&relpath, relpath.len - 1); - if (relpath.len >= 5 && !strcmp(relpath.buf + relpath.len - 5, "/.git")) - strbuf_setlen(&relpath, relpath.len - 5); - else if (!strcmp(relpath.buf, ".git")) + strbuf_strip_suffix(&relpath, "/"); + if (!strbuf_strip_suffix(&relpath, "/.git") && !strcmp(relpath.buf, ".git")) strbuf_setlen(&relpath, 0); // The scan root may itself be the repository, leaving nothing after // the base, so that one is named after its directory. if (!relpath.len) { - const char *end = path->buf + pathlen - 1, *start; + size_t len = pathlen - 1; + const char *start; - if (end - path->buf >= 5 && !strncmp(end - 5, "/.git", 5)) - end -= 5; - start = end; + strip_suffix_mem(path->buf, &len, "/.git"); + start = path->buf + len; while (start > path->buf && start[-1] != '/') start--; - strbuf_add(&relpath, start, end - start); + strbuf_add(&relpath, start, path->buf + len - start); } current_repo = cgit_add_repo(relpath.buf); |
