diff options
| author | martin <martin@NetBSD.org> | 2019-08-12 09:34:53 +0000 |
|---|---|---|
| committer | martin <martin@NetBSD.org> | 2019-08-12 09:34:53 +0000 |
| commit | bb99db39868bb9507c75600aabb823ab45edef2c (patch) | |
| tree | 0b12048b44012dd7b96832a2433dbfbd77ecb5ed /distrib/utils/libhack | |
| parent | 8f7c6995c1f31fa55035c570d252866b9440771b (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.c | 20 |
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)); } |
