summaryrefslogtreecommitdiff
path: root/strcasecmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'strcasecmp.c')
-rw-r--r--strcasecmp.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/strcasecmp.c b/strcasecmp.c
new file mode 100644
index 0000000..e8ff2e9
--- /dev/null
+++ b/strcasecmp.c
@@ -0,0 +1,40 @@
+/* $XFree86: xc/programs/xedit/strcasecmp.c,v 1.3 2002/02/10 02:50:05 paulo Exp $ */
+
+#include <ctype.h>
+#include <sys/types.h>
+
+#ifndef LISP
+#include "xedit.h"
+#endif
+
+/* Just like the BSD version. It assumes that tolower() is ANSI-compliant */
+
+int
+strcasecmp(const char *s1, const char *s2)
+{
+ const unsigned char *us1 = (const unsigned char *)s1;
+ const unsigned char *us2 = (const unsigned char *)s2;
+
+ while (tolower(*us1) == tolower(*us2++))
+ if (*us1++ == '\0')
+ return 0;
+ return tolower(*us1) - tolower(*--us2);
+}
+
+int
+strncasecmp(const char *s1, const char *s2, size_t n)
+{
+ if (n != 0) {
+ const unsigned char *us1 = (const unsigned char *)s1;
+ const unsigned char *us2 = (const unsigned char *)s2;
+
+ do {
+ if (tolower(*us1) != tolower(*us2++))
+ return tolower(*us1) - tolower(*--us2);
+ if (*us1++ == '\0')
+ break;
+ } while (--n != 0);
+ }
+ return 0;
+}
+