summaryrefslogtreecommitdiff
path: root/lib/memcasecmp.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2006-07-09 16:59:05 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2006-07-09 16:59:05 +0000
commitcb052e4f6cc723bc408f32963e921705f3286c94 (patch)
treed6f6172f7cff8f5c44f9ae557a525e4b1baf277b /lib/memcasecmp.c
parent28edf6a75ef4f95e18da5b506bdcf122a53ca3ec (diff)
downloadcoreutils-cb052e4f6cc723bc408f32963e921705f3286c94.tar.xz
Update from gnulib.
Diffstat (limited to 'lib/memcasecmp.c')
-rw-r--r--lib/memcasecmp.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/lib/memcasecmp.c b/lib/memcasecmp.c
index b0a492590..9aebb3e9c 100644
--- a/lib/memcasecmp.c
+++ b/lib/memcasecmp.c
@@ -1,5 +1,5 @@
/* Case-insensitive buffer comparator.
- Copyright (C) 1996, 1997, 2000, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 2000, 2003, 2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,23 +21,11 @@
# include <config.h>
#endif
-#include <ctype.h>
-
-#if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
-# define IN_CTYPE_DOMAIN(Char) 1
-#else
-# define IN_CTYPE_DOMAIN(Char) isascii (Char)
-#endif
-#define ISLOWER(Char) (IN_CTYPE_DOMAIN (Char) && islower (Char))
-
-#if _LIBC || STDC_HEADERS
-# define TOUPPER(Char) toupper (Char)
-#else
-# define TOUPPER(Char) (ISLOWER (Char) ? toupper (Char) : (Char))
-#endif
-
#include "memcasecmp.h"
+#include <ctype.h>
+#include <limits.h>
+
/* Like memcmp, but ignore differences in case.
Convert to upper case (not lower) before comparing so that
join -i works with sort -f. */
@@ -52,7 +40,10 @@ memcasecmp (const void *vs1, const void *vs2, size_t n)
{
unsigned char u1 = s1[i];
unsigned char u2 = s2[i];
- int diff = TOUPPER (u1) - TOUPPER (u2);
+ int U1 = toupper (u1);
+ int U2 = toupper (u2);
+ int diff = (UCHAR_MAX <= INT_MAX ? U1 - U2
+ : U1 < U2 ? -1 : U2 < U1);
if (diff)
return diff;
}