mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-30 02:50:25 +08:00
2009-04-23 Mike Burgess <wizardsguild@earthlink.net>
* libc/string/strcasecmp.c: Optimized rewrite. * libc/string/strncasecmp.c: Fix description. * libc/string/strlwr.c: Avoid passing signed char to tolower. * libc/string/strupr.c: Avoid passing signed char to tolower.
This commit is contained in:
parent
bbb9d4fde3
commit
5921804481
@ -1,3 +1,10 @@
|
||||
2009-04-23 Mike Burgess <wizardsguild@earthlink.net>
|
||||
|
||||
* libc/string/strcasecmp.c: Optimized rewrite.
|
||||
* libc/string/strncasecmp.c: Fix description.
|
||||
* libc/string/strlwr.c: Avoid passing signed char to tolower.
|
||||
* libc/string/strupr.c: Avoid passing signed char to tolower.
|
||||
|
||||
2009-04-23 Paul Brook <paul@codesourcery.com>
|
||||
Kazu Hirata <kazu@codesourcery.com>
|
||||
|
||||
|
@ -22,7 +22,7 @@ DESCRIPTION
|
||||
RETURNS
|
||||
|
||||
If <<*<[a]>>> sorts lexicographically after <<*<[b]>>> (after
|
||||
both are converted to uppercase), <<strcasecmp>> returns a
|
||||
both are converted to lowercase), <<strcasecmp>> returns a
|
||||
number greater than zero. If the two strings match,
|
||||
<<strcasecmp>> returns zero. If <<*<[a]>>> sorts
|
||||
lexicographically before <<*<[b]>>>, <<strcasecmp>> returns a
|
||||
@ -35,7 +35,7 @@ PORTABILITY
|
||||
tolower() from elsewhere in this library.
|
||||
|
||||
QUICKREF
|
||||
strcasecmp
|
||||
strcasecmp
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
@ -46,11 +46,15 @@ _DEFUN (strcasecmp, (s1, s2),
|
||||
_CONST char *s1 _AND
|
||||
_CONST char *s2)
|
||||
{
|
||||
while (*s1 != '\0' && tolower(*s1) == tolower(*s2))
|
||||
_CONST unsigned char *ucs1 = (_CONST unsigned char *) s1;
|
||||
_CONST unsigned char *ucs2 = (_CONST unsigned char *) s2;
|
||||
int d = 0;
|
||||
for ( ; ; )
|
||||
{
|
||||
s1++;
|
||||
s2++;
|
||||
_CONST int c1 = tolower(*ucs1++);
|
||||
_CONST int c2 = tolower(*ucs2++);
|
||||
if (((d = c1 - c2) != 0) || (c2 == '\0'))
|
||||
break;
|
||||
}
|
||||
|
||||
return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2);
|
||||
return d;
|
||||
}
|
||||
|
@ -34,17 +34,13 @@ QUICKREF
|
||||
#include <ctype.h>
|
||||
|
||||
char *
|
||||
strlwr (a)
|
||||
char *a;
|
||||
_DEFUN (strlwr, (s),
|
||||
char *s)
|
||||
{
|
||||
char *ret = a;
|
||||
|
||||
while (*a != '\0')
|
||||
unsigned char *ucs = (unsigned char *) s;
|
||||
for ( ; *ucs != '\0'; ucs++)
|
||||
{
|
||||
if (isupper (*a))
|
||||
*a = tolower (*a);
|
||||
++a;
|
||||
*ucs = tolower(*ucs);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return s;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ DESCRIPTION
|
||||
RETURNS
|
||||
|
||||
If <<*<[a]>>> sorts lexicographically after <<*<[b]>>> (after
|
||||
both are converted to uppercase), <<strncasecmp>> returns a
|
||||
both are converted to lowercase), <<strncasecmp>> returns a
|
||||
number greater than zero. If the two strings are equivalent,
|
||||
<<strncasecmp>> returns zero. If <<*<[a]>>> sorts
|
||||
lexicographically before <<*<[b]>>>, <<strncasecmp>> returns a
|
||||
|
@ -27,23 +27,20 @@ PORTABILITY
|
||||
<<strupr>> requires no supporting OS subroutines.
|
||||
|
||||
QUICKREF
|
||||
strupr */
|
||||
strupr
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
char *
|
||||
strupr (a)
|
||||
char *a;
|
||||
_DEFUN (strupr, (s),
|
||||
char *s)
|
||||
{
|
||||
char *ret = a;
|
||||
|
||||
while (*a != '\0')
|
||||
unsigned char *ucs = (unsigned char *) s;
|
||||
for ( ; *ucs != '\0'; ucs++)
|
||||
{
|
||||
if (islower (*a))
|
||||
*a = toupper (*a);
|
||||
++a;
|
||||
*ucs = toupper(*ucs);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return s;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user