Pull up following revision(s) (requested by martin in ticket #74):

distrib/utils/libhack/strcasecmp.c: revision 1.2
	distrib/utils/libhack/strcasecmp.c: revision 1.3
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).
use unsigned char to prevent sign extension.
This commit is contained in:
msaitoh 2019-08-18 13:12:27 +00:00
parent cd087fb96c
commit b51ae09720
1 changed files with 14 additions and 6 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: strcasecmp.c,v 1.1 2019/07/28 10:21:18 martin Exp $ */
/* $NetBSD: strcasecmp.c,v 1.1.2.1 2019/08/18 13:12:27 msaitoh 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 char 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));
}