diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/memcasecmp.c | 32 | ||||
-rw-r--r-- | lib/memcasecmp.h | 9 |
2 files changed, 41 insertions, 0 deletions
diff --git a/lib/memcasecmp.c b/lib/memcasecmp.c new file mode 100644 index 000000000..547902895 --- /dev/null +++ b/lib/memcasecmp.c @@ -0,0 +1,32 @@ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <sys/types.h> +#include <ctype.h> + +#if _LIBC || STDC_HEADERS +# define TOLOWER(c) tolower (c) +#else +# define TOLOWER(c) (ISUPPER (c) ? tolower (c) : (c)) +#endif + +#include "memcasecmp.h" + +/* Like memcmp, but ignore differences in case. */ + +int +memcasecmp (const void *vs1, const void *vs2, size_t n) +{ + unsigned int i; + unsigned char *s1 = (unsigned char *) vs1; + unsigned char *s2 = (unsigned char *) vs2; + for (i = 0; i < n; i++) + { + unsigned char u1 = *s1++; + unsigned char u2 = *s2++; + if (TOLOWER (u1) != TOLOWER (u2)) + return TOLOWER (u1) - TOLOWER (u2); + } + return 0; +} diff --git a/lib/memcasecmp.h b/lib/memcasecmp.h new file mode 100644 index 000000000..764fb8a8f --- /dev/null +++ b/lib/memcasecmp.h @@ -0,0 +1,9 @@ +#undef __P +#if defined (__STDC__) && __STDC__ +#define __P(args) args +#else +#define __P(args) () +#endif + +int + memcasecmp __P((const void *vs1, const void *vs2, size_t n)); |