summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2008-06-11 15:09:46 +0300
committerDaniel Stone <daniel@fooishbar.org>2008-07-16 01:38:22 +0300
commit11f9e3520249a603b95e64503ee759998ff17feb (patch)
treefffdba60e0d63a25ee4b819de5546c63dd31ab71
parentae38151ddda9984effca5bb7c582540061201dce (diff)
DIX: Add strncasecmp from FreeBSD, make strcasecmp args const
Add strncasecmp (as we're now using it) in case someone doesn't have it, and also change strncasecmp args to be const, in accordance with everything else.
-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);