(EXTRA_DIST): Add strcasecmp.c.
[coreutils.git] / lib / memcasecmp.c
blobac4d7a9f5321a5d8041c58b1399e655a88bdbc09
1 /* Case-insensitive buffer comparator.
2 Copyright (C) 1996 Free Software Foundation, Inc.
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2, or (at your option)
7 any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
18 /* Jim Meyering (meyering@na-net.ornl.gov) */
20 #ifdef HAVE_CONFIG_H
21 # include <config.h>
22 #endif
24 #include <sys/types.h>
25 #include <ctype.h>
27 #if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
28 #define ISASCII(c) 1
29 #else
30 #define ISASCII(c) isascii(c)
31 #endif
32 #define ISUPPER(c) (ISASCII (c) && isupper (c))
34 #if _LIBC || STDC_HEADERS
35 # define TOLOWER(c) tolower (c)
36 #else
37 # define TOLOWER(c) (ISUPPER (c) ? tolower (c) : (c))
38 #endif
40 #include "memcasecmp.h"
42 /* Like memcmp, but ignore differences in case. */
44 int
45 memcasecmp (vs1, vs2, n)
46 const void *vs1;
47 const void *vs2;
48 size_t n;
50 unsigned int i;
51 unsigned char *s1 = (unsigned char *) vs1;
52 unsigned char *s2 = (unsigned char *) vs2;
53 for (i = 0; i < n; i++)
55 unsigned char u1 = *s1++;
56 unsigned char u2 = *s2++;
57 if (TOLOWER (u1) != TOLOWER (u2))
58 return TOLOWER (u1) - TOLOWER (u2);
60 return 0;