diff options
author | Junio C Hamano <gitster@pobox.com> | 2014-12-17 11:46:57 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-12-17 11:46:57 -0800 |
commit | 77933f4449b8d6aa7529d627f3c7b55336f491db (patch) | |
tree | 91ce62aba00c10c6f2f4346f404f64dec00b5c3a /path.c | |
parent | 8213d87a83867809f490e8d683ebbaa857547189 (diff) | |
parent | 8e36a6d5752ced382ecd46a5f2cd94276f79451c (diff) | |
download | git-77933f4449b8d6aa7529d627f3c7b55336f491db.tar.gz |
Sync with v2.1.4
* maint-2.1:
Git 2.1.4
Git 2.0.5
Git 1.9.5
Git 1.8.5.6
fsck: complain about NTFS ".git" aliases in trees
read-cache: optionally disallow NTFS .git variants
path: add is_ntfs_dotgit() helper
fsck: complain about HFS+ ".git" aliases in trees
read-cache: optionally disallow HFS+ .git variants
utf8: add is_hfs_dotgit() helper
fsck: notice .git case-insensitively
t1450: refactor ".", "..", and ".git" fsck tests
verify_dotfile(): reject .git case-insensitively
read-tree: add tests for confusing paths like ".." and ".git"
unpack-trees: propagate errors adding entries to the index
Diffstat (limited to 'path.c')
-rw-r--r-- | path.c | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -823,3 +823,36 @@ int daemon_avoid_alias(const char *p) } } } + +static int only_spaces_and_periods(const char *path, size_t len, size_t skip) +{ + if (len < skip) + return 0; + len -= skip; + path += skip; + while (len-- > 0) { + char c = *(path++); + if (c != ' ' && c != '.') + return 0; + } + return 1; +} + +int is_ntfs_dotgit(const char *name) +{ + int len; + + for (len = 0; ; len++) + if (!name[len] || name[len] == '\\' || is_dir_sep(name[len])) { + if (only_spaces_and_periods(name, len, 4) && + !strncasecmp(name, ".git", 4)) + return 1; + if (only_spaces_and_periods(name, len, 5) && + !strncasecmp(name, "git~1", 5)) + return 1; + if (name[len] != '\\') + return 0; + name += len + 1; + len = -1; + } +} |