summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dix/strcasecmp.c21
-rw-r--r--include/dix.h7
2 files changed, 26 insertions, 2 deletions
diff --git a/dix/strcasecmp.c b/dix/strcasecmp.c
index 58f0961e6..8f7c5c402 100644
--- a/dix/strcasecmp.c
+++ b/dix/strcasecmp.c
@@ -33,7 +33,7 @@
#ifdef NEED_STRCASECMP
int
-xstrcasecmp(char *str1,char *str2)
+xstrcasecmp(const char *str1, const char *str2)
{
const u_char *us1 = (const u_char *)str1, *us2 = (const u_char *)str2;
@@ -46,3 +46,22 @@ xstrcasecmp(char *str1,char *str2)
return (tolower(*us1) - tolower(*us2));
}
#endif
+
+#ifdef NEED_STRNCASECMP
+int
+xstrncasecmp(const char *s1, const char *s2, size_t n)
+{
+ if (n != 0) {
+ const u_char *us1 = (const u_char *)s1, *us2 = (const u_char *)s2;
+
+ do {
+ if (tolower(*us1) != tolower(*us2++))
+ return (tolower(*us1) - tolower(*--us2));
+ if (*us1++ == '\0')
+ break;
+ } while (--n != 0);
+ }
+
+ return 0;
+}
+#endif
diff --git a/include/dix.h b/include/dix.h
index 300718dd9..a8c2b3b5a 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -601,7 +601,12 @@ typedef struct {
/* strcasecmp.c */
#if NEED_STRCASECMP
#define strcasecmp xstrcasecmp
-extern int xstrcasecmp(char *s1, char *s2);
+extern int xstrcasecmp(const char *s1, const char *s2);
+#endif
+
+#if NEED_STRNCASECMP
+#define strncasecmp xstrncasecmp
+extern int xstrncasecmp(const char *s1, const char *s2, size_t n);
#endif
extern int XItoCoreType(int xi_type);