blob: 2c471be72d079aaff6e90d76a30390f0c02c2d22 [file] [log] [blame]
From 7a710d9e6490b95ac80b0339fd54c10339b7258a Mon Sep 17 00:00:00 2001
From: Jeff King <peff@peff.net>
Date: Sun, 13 May 2018 12:57:14 -0400
Subject: skip_prefix: add case-insensitive variant
commit 41a80924aec0e94309786837b6f954a3b3f19b71 upstream.
We have the convenient skip_prefix() helper, but if you want
to do case-insensitive matching, you're stuck doing it by
hand. We could add an extra parameter to the function to
let callers ask for this, but the function is small and
somewhat performance-critical. Let's just re-implement it
for the case-insensitive version.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
git-compat-util.h | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/git-compat-util.h b/git-compat-util.h
index 87237b092b..b67e7d9fa0 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -945,6 +945,23 @@ static inline int sane_iscase(int x, int is_lower)
return (x & 0x20) == 0;
}
+/*
+ * Like skip_prefix, but compare case-insensitively. Note that the comparison
+ * is done via tolower(), so it is strictly ASCII (no multi-byte characters or
+ * locale-specific conversions).
+ */
+static inline int skip_iprefix(const char *str, const char *prefix,
+ const char **out)
+{
+ do {
+ if (!*prefix) {
+ *out = str;
+ return 1;
+ }
+ } while (tolower(*str++) == tolower(*prefix++));
+ return 0;
+}
+
static inline int strtoul_ui(char const *s, int base, unsigned int *result)
{
unsigned long ul;
--
2.17.0.921.gf22659ad46