summaryrefslogtreecommitdiff
path: root/utf8.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-01-07 21:26:35 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-01-07 21:26:35 (GMT)
commit3d8a54eb37d298c251c0b6823dc06935a611bc33 (patch)
tree416b160751843dfe4be1fd044f8b366ddd9592ac /utf8.c
parent5c8213a7696b3d9e29feda2516e350d03d7bd9a4 (diff)
parent6aaf956b08cfab2dcaa1a1afe4192390d0ef14fd (diff)
downloadgit-3d8a54eb37d298c251c0b6823dc06935a611bc33.zip
git-3d8a54eb37d298c251c0b6823dc06935a611bc33.tar.gz
git-3d8a54eb37d298c251c0b6823dc06935a611bc33.tar.bz2
Merge branch 'jk/dotgit-case-maint-1.8.5' into maint-1.8.5
* jk/dotgit-case-maint-1.8.5: is_hfs_dotgit: loosen over-eager match of \u{..47}
Diffstat (limited to 'utf8.c')
-rw-r--r--utf8.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/utf8.c b/utf8.c
index 2c6442c..9c9fa3a 100644
--- a/utf8.c
+++ b/utf8.c
@@ -630,8 +630,8 @@ int mbs_chrlen(const char **text, size_t *remainder_p, const char *encoding)
}
/*
- * Pick the next char from the stream, folding as an HFS+ filename comparison
- * would. Note that this is _not_ complete by any means. It's just enough
+ * Pick the next char from the stream, ignoring codepoints an HFS+ would.
+ * Note that this is _not_ complete by any means. It's just enough
* to make is_hfs_dotgit() work, and should not be used otherwise.
*/
static ucs_char_t next_hfs_char(const char **in)
@@ -668,12 +668,7 @@ static ucs_char_t next_hfs_char(const char **in)
continue;
}
- /*
- * there's a great deal of other case-folding that occurs,
- * but this is enough to catch anything that will convert
- * to ".git"
- */
- return tolower(out);
+ return out;
}
}
@@ -681,10 +676,23 @@ int is_hfs_dotgit(const char *path)
{
ucs_char_t c;
- if (next_hfs_char(&path) != '.' ||
- next_hfs_char(&path) != 'g' ||
- next_hfs_char(&path) != 'i' ||
- next_hfs_char(&path) != 't')
+ c = next_hfs_char(&path);
+ if (c != '.')
+ return 0;
+ c = next_hfs_char(&path);
+
+ /*
+ * there's a great deal of other case-folding that occurs
+ * in HFS+, but this is enough to catch anything that will
+ * convert to ".git"
+ */
+ if (c != 'g' && c != 'G')
+ return 0;
+ c = next_hfs_char(&path);
+ if (c != 'i' && c != 'I')
+ return 0;
+ c = next_hfs_char(&path);
+ if (c != 't' && c != 'T')
return 0;
c = next_hfs_char(&path);
if (c && !is_dir_sep(c))