diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2022-03-17 10:57:50 +0100 |
---|---|---|
committer | Johannes Schindelin <johannes.schindelin@gmx.de> | 2022-03-24 00:31:36 +0100 |
commit | 93fbff09eb8ed9e728a61623a15a53a46a762639 (patch) | |
tree | 708e878ae901e2fb073a1ca546768442c76ee20b /path.c | |
parent | Git 2.34.1 (diff) | |
parent | Git 2.33.2 (diff) | |
download | git-93fbff09eb8ed9e728a61623a15a53a46a762639.tar.xz git-93fbff09eb8ed9e728a61623a15a53a46a762639.zip |
Sync with 2.33.2
* maint-2.33:
Git 2.33.2
Git 2.32.1
Git 2.31.2
GIT-VERSION-GEN: bump to v2.33.1
Git 2.30.3
setup_git_directory(): add an owner check for the top-level directory
Add a function to determine whether a path is owned by the current user
Diffstat (limited to 'path.c')
-rw-r--r-- | path.c | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -1225,11 +1225,15 @@ int longest_ancestor_length(const char *path, struct string_list *prefixes) const char *ceil = prefixes->items[i].string; int len = strlen(ceil); - if (len == 1 && ceil[0] == '/') - len = 0; /* root matches anything, with length 0 */ - else if (!strncmp(path, ceil, len) && path[len] == '/') - ; /* match of length len */ - else + /* + * For root directories (`/`, `C:/`, `//server/share/`) + * adjust the length to exclude the trailing slash. + */ + if (len > 0 && ceil[len - 1] == '/') + len--; + + if (strncmp(path, ceil, len) || + path[len] != '/' || !path[len + 1]) continue; /* no match */ if (len > max_len) |