![]()
From: Rev. Bob 'Bob' Crispen (crispen@hiwaay.net)
Date: Tue Jan 02 2001 - 18:16:01 CST
The voices are telling me that Hypermail said on Tuesday, January 02, 2001:
> I have this function in curl that looks like:
> int strequal(const char *first, const char *second)
> {
> #if defined(HAVE_STRCASECMP)
> return !strcasecmp(first, second);
> #elif defined(HAVE_STRCMPI)
> return !strcmpi(first, second);
> #elif defined(HAVE_STRICMP)
> return !stricmp(first, second);
> #else
> while (*first && *second) {
> if (toupper(*first) != toupper(*second)) {
> break;
> }
> first++;
> second++;
> }
> return toupper(*first) == toupper(*second);
> #endif
> }
> Now, this returns a non-compatible return code but as can be seen, that is
> easily fixed should we consider this a good thing...
Yeah. Just another point, and perhaps there are no libc.a's out there
that do this any more, but I've run into systems (I believe IRIX but
don't quote me) where you'd better do an isalpha() before you call
toupper().
And using the words of the gnu libc.a, you need to return
(int)((unsigned char)*first) - (int)((unsigned char)*second);
Actually, I did it a quick and dirty way (ignoring the possibility
that both strcasecmp and stricmp were missing):
#ifndef HAVE_STRCASECMP
#define strcasecmp stricmp
#endif
But now that I think of it, my instincts may have been right.
Defining it as a macro gives us only one point of maintenance so that
the next guy who comes along and wants to use a scrcasecmp() won't
have to remember to put that in his code.
And just to add to the amusement, I've seen the function called
strcmpi() somewhere.
-- Rev. Bob "Bob" Crispen crispen at hiwaay dot net "Good morning, doctors. I have taken the liberty of removing Windows 95 from my hard drive." -Arthur C. Clake, on what he imagines HAL's first words to be
![]()