From 6353beb60ceafbc743bde96684d666582195192f Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 27 Feb 2026 15:28:17 +0100 Subject: Add http_strcasecmp(3) POSIX.1-2008 does not any locale-specific version of strcasecmp(3), so conversions to lowercase depend on the system locale. Since HTTP header fields must be checked without case sensitivity and not depend on the system locale, a specialised function that forces the "POSIX" locale is required. --- http.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'http.c') diff --git a/http.c b/http.c index c3c36b2..451ec88 100644 --- a/http.c +++ b/http.c @@ -2975,6 +2975,32 @@ end: return ret; } +int http_strcasecmp(const char *s1, const char *s2) +{ + int ret = -1; + const locale_t l = newlocale(LC_CTYPE_MASK, "POSIX", (locale_t)0); + + if (l == (locale_t)0) + { + fprintf(stderr, "%s: newlocale(3): %s\n", __func__, strerror(errno)); + goto end; + } + + while (*s1 && *s2) + if (tolower_l(*s1++, l) != tolower_l(*s2++, l)) + { + ret = 1; + goto end; + } + + ret = !!*s1 || !!*s2; +end: + if (l != (locale_t)0) + freelocale(l); + + return ret; +} + int http_strncasecmp(const char *s1, const char *s2, const size_t n) { int ret = -1; -- cgit v1.2.3