1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
/** BEGIN COPYRIGHT BLOCK
* Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
* Copyright (C) 2005 Red Hat, Inc.
* All rights reserved.
*
* License: GPL (version 3 or any later version).
* See LICENSE for details.
* END COPYRIGHT BLOCK **/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
/* Header file used to declare functions which we beat on heavily as intrinsic */
#if defined(HPUX)
#define INLINE_DIRECTIVE __inline
#elif defined(LINUX)
#define INLINE_DIRECTIVE __inline__
#else
#define INLINE_DIRECTIVE
#endif
__attribute__((nonnull (1, 2))) INLINE_DIRECTIVE static int
strcmpi_fast(const char *dst, const char *src)
{
int f, l;
do {
if (((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z'))
f -= ('A' - 'a');
if (((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z'))
l -= ('A' - 'a');
} while (f && (f == l));
return (f - l);
}
#ifdef strcasecmp
#undef strcasecmp
#endif
#define strcasecmp(x, y) strcmpi_fast(x, y)
#ifdef strcmpi
#undef strcmpi
#endif
#define strcmpi(x, y) strcmpi_fast(x, y)
INLINE_DIRECTIVE static int
tolower_fast(int c)
{
if ((c >= 'A') && (c <= 'Z'))
c = c + ('a' - 'A');
return c;
}
#ifdef tolower
#undef tolower
#endif
#define tolower(x) tolower_fast(x)
INLINE_DIRECTIVE static int
toupper_fast(int c)
{
if ((c >= 'a') && (c <= 'z'))
c = c - ('a' - 'A');
return c;
}
#ifdef toupper
#undef toupper
#endif
#define toupper(x) toupper_fast(x)
__attribute__((nonnull (1, 2))) INLINE_DIRECTIVE static int
strncasecmp_fast(const char *dst, const char *src, int n)
{
int f, l, x = 0;
do {
if (((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z'))
f -= ('A' - 'a');
if (((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z'))
l -= ('A' - 'a');
} while (f && (f == l) && ++x < n);
return (f - l);
}
#ifdef strncasecmp
#undef strncasecmp
#endif
#define strncasecmp(x, y, z) strncasecmp_fast(x, y, z)
|