aboutsummaryrefslogtreecommitdiffstats
path: root/path.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2014-12-17 11:28:02 -0800
committerJunio C Hamano <gitster@pobox.com>2014-12-17 11:28:54 -0800
commit5e519fb8b09378342e23bd8c075cfb4b8e7b0e4f (patch)
tree54e850e494e9bb6d25d99f82aeb03e1f8ec3faff /path.c
parent76f8611a5fb7e81c1bada0fb190d573a66fc03f6 (diff)
parent83332636f575f00edff8f3afb15a2f96885bf417 (diff)
downloadgit-5e519fb8b09378342e23bd8c075cfb4b8e7b0e4f.tar.gz
Sync with v1.9.5
* maint-1.9: 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.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/path.c b/path.c
index c36f003930..f10c91a927 100644
--- a/path.c
+++ b/path.c
@@ -828,3 +828,36 @@ int offset_1st_component(const char *path)
return 2 + is_dir_sep(path[2]);
return is_dir_sep(path[0]);
}
+
+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;
+ }
+}