summaryrefslogtreecommitdiff
path: root/distrib/utils/libhack
diff options
context:
space:
mode:
authormartin <martin@NetBSD.org>2019-08-12 09:34:53 +0000
committermartin <martin@NetBSD.org>2019-08-12 09:34:53 +0000
commitbb99db39868bb9507c75600aabb823ab45edef2c (patch)
tree0b12048b44012dd7b96832a2433dbfbd77ecb5ed /distrib/utils/libhack
parent8f7c6995c1f31fa55035c570d252866b9440771b (diff)
Make this at least work for ASCII strings (there are way more users
than libcurses in various crunched environments, so the original assumption of a very limited set of inputs was wrong).
Diffstat (limited to 'distrib/utils/libhack')
-rw-r--r--distrib/utils/libhack/strcasecmp.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/distrib/utils/libhack/strcasecmp.c b/distrib/utils/libhack/strcasecmp.c
index a0a830793f7..7fea515424f 100644
--- a/distrib/utils/libhack/strcasecmp.c
+++ b/distrib/utils/libhack/strcasecmp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: strcasecmp.c,v 1.1 2019/07/28 10:21:18 martin Exp $ */
+/* $NetBSD: strcasecmp.c,v 1.2 2019/08/12 09:34:53 martin Exp $ */
/*
* Written by Martin Husemann <martin@NetBSD.org>
@@ -8,13 +8,21 @@
#include <strings.h>
/*
- * Cheap and dirty strcasecmp() - implements just enough
- * for our libcurses in crunched environments: since we
- * know all compared strings are fixed, uppercase, and plain ASCII,
- * just use strcmp()
+ * Simple strcasecmp, try to avoid pulling in real locales
*/
int
strcasecmp(const char *s1, const char *s2)
{
- return strcmp(s1, s2);
+ unsigned int c1, c2;
+
+ do {
+ c1 = *s1++;
+ c2 = *s2++;
+ if (c1 >= 'A' && c1 <= 'Z')
+ c1 += 'a' - 'A';
+ if (c2 >= 'A' && c2 <= 'Z')
+ c2 += 'a' - 'A';
+ } while (c1 == c2 && c1 != 0 && c2 != 0);
+
+ return ((c1 == c2) ? 0 : ((c1 > c2) ? 1 : -1));
}