summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2006-07-05 23:35:19 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2006-07-05 23:35:19 +0000
commit4fde4952d5a3db51a122f96a31bfcd6879399fea (patch)
tree96f8f5e436f51ebf978bc613bab31e6be7238631 /lib
parent75dbe3666dfbb5e83dfc0647620292f905e74b36 (diff)
downloadgnulib-4fde4952d5a3db51a122f96a31bfcd6879399fea.tar.gz
* lib/memcasecmp.c: Include <limits.h>.
(memcasecmp): Don't assume UCHAR_MAX <= INT_MAX. * lib/strtod.c (strtod): Don't assume isspace works on negative chars. Don't assume isdigit succeeds only on '0' through '9'. * lib/exclude.c (IN_CTYPE_DOMAIN, is_space): Remove; no longer needed. All uses of is_space replaced by isspace. * lib/fnmatch.c (ISASCII): Remove; no longer needed. All uses removed. (ISPRINT, ISDIGIT, ISALNUM, ISALPHA, ISCNTRL, ISLOWER, ISPUNCT): (ISSPACE, ISUPPER, ISXDIGIT): Remove; no longer needed. All uses replaced by isprint etc. * lib/getdate.y (IN_CTYPE_DOMAIN, ISSPACE, ISALPHA, ISLOWER): Likewise. * lib/getusershell.c (IN_CTYPE_DOMAIN, ISSPACE): Likewise. * lib/memcasecmp.c (IN_CTYPE_DOMAIN, ISLOWER, TOUPPER): Likewise. * lib/strtod.c (IN_CTYPE_DOMAIN, ISSPACE, ISDIGIT, TOLOWER): Likewise. * lib/strtol.c (IN_CTYPE_DOMAIN): Likewise. * lib/xstrtol.c (IN_CTYPE_DOMAIN, ISSPACE): Likewise. * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL): Use AC_CHECK_DECLS_ONCE rather than AC_CHECK_DECLS for strtoimax and strtoumax. * m4/getusershell.m4 (gl_PREREQ_GETUSERSHELL): Remove; no longer needed. All uses removed. * m4/strtol.m4 (gl_PREREQ_STRTOL): Likewise. * m4/strtoul.m4 (gl_PREREQ_STRTOUL): Likewise. * m4/exclude.m4 (gl_EXCLUDE): Don't check for isascii; no longer needed. * m4/getdate.m4 (gl_GETDATE): Likewise. * m4/getusershell.m4 (gl_PREREQ_GETUSERSHELL): Likewise. * m4/memcasecmp.m4 (gl_MEMCASECMP): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Likewise. * m4/strtol.m4 (gl_PREREQ_STRTOL): Likewise. * m4/strtoul.m4 (gl_PREREQ_STRTOUL): Likewise. * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL): Likewise. * m4/exclude.m4 (gl_EXCLUDE): Don't require AC_C_INLINE; no longer needed. * m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Don't require AC_HEADER_STDC; no longer needed. * m4/exclude.m4 (gl_EXCLUDE): Likewise. * m4/getdate.m4 (gl_GETDATE): Likewise. * m4/getusershell.m4 (gl_PREREQ_GETUSERSHELL): Likewise. * m4/memcasecmp.m4 (gl_MEMCASECMP): Likewise. * m4/strtod.m4 (gl_FUNC_STRTOD): Likewise. * m4/strtol.m4 (gl_PREREQ_STRTOL): Likewise. * m4/xstrtol.m4 (gl_PREREQ_XSTRTOL): Likewise.
Diffstat (limited to 'lib')
-rw-r--r--lib/ChangeLog22
-rw-r--r--lib/exclude.c16
-rw-r--r--lib/fnmatch.c23
-rw-r--r--lib/fnmatch_loop.c20
-rw-r--r--lib/getdate.y21
-rw-r--r--lib/getusershell.c16
-rw-r--r--lib/memcasecmp.c25
-rw-r--r--lib/strtod.c16
-rw-r--r--lib/strtol.c11
-rw-r--r--lib/xstrtol.c12
10 files changed, 63 insertions, 119 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 36ee58bb7c..2e132d507f 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,25 @@
+2006-07-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * memcasecmp.c: Include <limits.h>.
+ (memcasecmp): Don't assume UCHAR_MAX <= INT_MAX.
+ * strtod.c (strtod): Don't assume isspace works on negative chars.
+ Don't assume isdigit succeeds only on '0' through '9'.
+
+2006-07-05 Derek R. Price <derek@ximbiot.com>
+
+ * exclude.c (IN_CTYPE_DOMAIN, is_space): Remove; no longer needed.
+ All uses of is_space replaced by isspace.
+ * fnmatch.c (ISASCII): Remove; no longer needed. All uses removed.
+ (ISPRINT, ISDIGIT, ISALNUM, ISALPHA, ISCNTRL, ISLOWER, ISPUNCT):
+ (ISSPACE, ISUPPER, ISXDIGIT): Remove; no longer needed. All uses
+ replaced by isprint etc.
+ * getdate.y (IN_CTYPE_DOMAIN, ISSPACE, ISALPHA, ISLOWER): Likewise.
+ * getusershell.c (IN_CTYPE_DOMAIN, ISSPACE): Likewise.
+ * memcasecmp.c (IN_CTYPE_DOMAIN, ISLOWER, TOUPPER): Likewise.
+ * strtod.c (IN_CTYPE_DOMAIN, ISSPACE, ISDIGIT, TOLOWER): Likewise.
+ * strtol.c (IN_CTYPE_DOMAIN): Likewise.
+ * xstrtol.c (IN_CTYPE_DOMAIN, ISSPACE): Likewise.
+
2006-07-05 Eric Blake <ebb9@byu.net>
* getaddrinfo.h (NI_NUMERICHOST, NI_NUMERICSERV): Define if
diff --git a/lib/exclude.c b/lib/exclude.c
index 6bd7339f45..f5978a966e 100644
--- a/lib/exclude.c
+++ b/lib/exclude.c
@@ -43,18 +43,6 @@
# include "unlocked-io.h"
#endif
-#if STDC_HEADERS || (! defined isascii && ! HAVE_ISASCII)
-# define IN_CTYPE_DOMAIN(c) true
-#else
-# define IN_CTYPE_DOMAIN(c) isascii (c)
-#endif
-
-static inline bool
-is_space (unsigned char c)
-{
- return IN_CTYPE_DOMAIN (c) && isspace (c);
-}
-
/* Non-GNU systems lack these options, so we don't need to check them. */
#ifndef FNM_CASEFOLD
# define FNM_CASEFOLD 0
@@ -244,12 +232,12 @@ add_exclude_file (void (*add_func) (struct exclude *, char const *, int),
{
char *pattern_end = p;
- if (is_space (line_end))
+ if (isspace ((unsigned char) line_end))
{
for (; ; pattern_end--)
if (pattern_end == pattern)
goto next_pattern;
- else if (! is_space (pattern_end[-1]))
+ else if (! isspace ((unsigned char) pattern_end[-1]))
break;
}
diff --git a/lib/fnmatch.c b/lib/fnmatch.c
index c5a4e40713..4fc19b4fe0 100644
--- a/lib/fnmatch.c
+++ b/lib/fnmatch.c
@@ -86,34 +86,17 @@ extern int fnmatch (const char *pattern, const char *string, int flags);
#if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU
-# if defined STDC_HEADERS || !defined isascii
-# define ISASCII(c) 1
-# else
-# define ISASCII(c) isascii(c)
-# endif
-
# ifdef isblank
-# define ISBLANK(c) (ISASCII (c) && isblank (c))
+# define ISBLANK(c) isblank (c)
# else
# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
# endif
# ifdef isgraph
-# define ISGRAPH(c) (ISASCII (c) && isgraph (c))
+# define ISGRAPH(c) isgraph (c)
# else
-# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
+# define ISGRAPH(c) (isprint (c) && !isspace (c))
# endif
-# define ISPRINT(c) (ISASCII (c) && isprint (c))
-# define ISDIGIT(c) (ISASCII (c) && isdigit (c))
-# define ISALNUM(c) (ISASCII (c) && isalnum (c))
-# define ISALPHA(c) (ISASCII (c) && isalpha (c))
-# define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
-# define ISLOWER(c) (ISASCII (c) && islower (c))
-# define ISPUNCT(c) (ISASCII (c) && ispunct (c))
-# define ISSPACE(c) (ISASCII (c) && isspace (c))
-# define ISUPPER(c) (ISASCII (c) && isupper (c))
-# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
-
# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
# if defined _LIBC || WIDE_CHAR_SUPPORT
diff --git a/lib/fnmatch_loop.c b/lib/fnmatch_loop.c
index 2b5897c44b..d86899b6db 100644
--- a/lib/fnmatch_loop.c
+++ b/lib/fnmatch_loop.c
@@ -288,18 +288,18 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end,
goto matched;
# endif
#else
- if ((STREQ (str, L_("alnum")) && ISALNUM ((UCHAR) *n))
- || (STREQ (str, L_("alpha")) && ISALPHA ((UCHAR) *n))
+ if ((STREQ (str, L_("alnum")) && isalnum ((UCHAR) *n))
+ || (STREQ (str, L_("alpha")) && isalpha ((UCHAR) *n))
|| (STREQ (str, L_("blank")) && ISBLANK ((UCHAR) *n))
- || (STREQ (str, L_("cntrl")) && ISCNTRL ((UCHAR) *n))
- || (STREQ (str, L_("digit")) && ISDIGIT ((UCHAR) *n))
+ || (STREQ (str, L_("cntrl")) && iscntrl ((UCHAR) *n))
+ || (STREQ (str, L_("digit")) && isdigit ((UCHAR) *n))
|| (STREQ (str, L_("graph")) && ISGRAPH ((UCHAR) *n))
- || (STREQ (str, L_("lower")) && ISLOWER ((UCHAR) *n))
- || (STREQ (str, L_("print")) && ISPRINT ((UCHAR) *n))
- || (STREQ (str, L_("punct")) && ISPUNCT ((UCHAR) *n))
- || (STREQ (str, L_("space")) && ISSPACE ((UCHAR) *n))
- || (STREQ (str, L_("upper")) && ISUPPER ((UCHAR) *n))
- || (STREQ (str, L_("xdigit")) && ISXDIGIT ((UCHAR) *n)))
+ || (STREQ (str, L_("lower")) && islower ((UCHAR) *n))
+ || (STREQ (str, L_("print")) && isprint ((UCHAR) *n))
+ || (STREQ (str, L_("punct")) && ispunct ((UCHAR) *n))
+ || (STREQ (str, L_("space")) && isspace ((UCHAR) *n))
+ || (STREQ (str, L_("upper")) && isupper ((UCHAR) *n))
+ || (STREQ (str, L_("xdigit")) && isxdigit ((UCHAR) *n)))
goto matched;
#endif
c = *p++;
diff --git a/lib/getdate.y b/lib/getdate.y
index 0185048251..534e2681ef 100644
--- a/lib/getdate.y
+++ b/lib/getdate.y
@@ -68,15 +68,6 @@
#include "setenv.h"
#include "xalloc.h"
-#if STDC_HEADERS || (! defined isascii && ! HAVE_ISASCII)
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) isascii (c)
-#endif
-
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
-#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
/* ISDIGIT differs from isdigit, as follows:
- Its arg may be any int or unsigned int; it need not be an unsigned char.
@@ -896,7 +887,7 @@ lookup_word (parser_control const *pc, char *word)
for (p = word; *p; p++)
{
unsigned char ch = *p;
- if (ISLOWER (ch))
+ if (islower (ch))
*p = toupper (ch);
}
@@ -962,7 +953,7 @@ yylex (YYSTYPE *lvalp, parser_control *pc)
for (;;)
{
- while (c = *pc->input, ISSPACE (c))
+ while (c = *pc->input, isspace (c))
pc->input++;
if (ISDIGIT (c) || c == '-' || c == '+')
@@ -973,7 +964,7 @@ yylex (YYSTYPE *lvalp, parser_control *pc)
if (c == '-' || c == '+')
{
sign = c == '-' ? -1 : 1;
- while (c = *++pc->input, ISSPACE (c))
+ while (c = *++pc->input, isspace (c))
continue;
if (! ISDIGIT (c))
/* skip the '-' sign */
@@ -1077,7 +1068,7 @@ yylex (YYSTYPE *lvalp, parser_control *pc)
}
}
- if (ISALPHA (c))
+ if (isalpha (c))
{
char buff[20];
char *p = buff;
@@ -1089,7 +1080,7 @@ yylex (YYSTYPE *lvalp, parser_control *pc)
*p++ = c;
c = *++pc->input;
}
- while (ISALPHA (c) || c == '.');
+ while (isalpha (c) || c == '.');
*p = '\0';
tp = lookup_word (pc, buff);
@@ -1201,7 +1192,7 @@ get_date (struct timespec *result, char const *p, struct timespec const *now)
if (! tmp)
return false;
- while (c = *p, ISSPACE (c))
+ while (c = *p, isspace (c))
p++;
if (strncmp (p, "TZ=\"", 4) == 0)
diff --git a/lib/getusershell.c b/lib/getusershell.c
index ec35aa241c..a75d4fd486 100644
--- a/lib/getusershell.c
+++ b/lib/getusershell.c
@@ -1,7 +1,7 @@
/* getusershell.c -- Return names of valid user shells.
- Copyright (C) 1991, 1997, 2000, 2001, 2003, 2004, 2005 Free Software
- Foundation, Inc.
+ Copyright (C) 1991, 1997, 2000, 2001, 2003, 2004, 2005, 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
@@ -43,14 +43,6 @@
# include "unlocked-io.h"
#endif
-#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-
static size_t readname (char **, size_t *, FILE *);
#if ! defined ADDITIONAL_DEFAULT_SHELLS && defined __MSDOS__
@@ -152,14 +144,14 @@ readname (char **name, size_t *size, FILE *stream)
size_t name_index = 0;
/* Skip blank space. */
- while ((c = getc (stream)) != EOF && ISSPACE (c))
+ while ((c = getc (stream)) != EOF && isspace (c))
/* Do nothing. */ ;
for (;;)
{
if (*size <= name_index)
*name = x2nrealloc (*name, size, sizeof **name);
- if (c == EOF || ISSPACE (c))
+ if (c == EOF || isspace (c))
break;
(*name)[name_index++] = c;
c = getc (stream);
diff --git a/lib/memcasecmp.c b/lib/memcasecmp.c
index b0a492590c..9aebb3e9c0 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;
}
diff --git a/lib/strtod.c b/lib/strtod.c
index b8aab679e9..a59858ad5b 100644
--- a/lib/strtod.c
+++ b/lib/strtod.c
@@ -22,16 +22,6 @@
#include <ctype.h>
-#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
-#define TOLOWER(c) (IN_CTYPE_DOMAIN (c) ? tolower(c) : (c))
-
#include <math.h>
#include <float.h>
@@ -64,7 +54,7 @@ strtod (const char *nptr, char **endptr)
s = nptr;
/* Eat whitespace. */
- while (ISSPACE (*s))
+ while (isspace ((unsigned char) *s))
++s;
/* Get the sign. */
@@ -78,7 +68,7 @@ strtod (const char *nptr, char **endptr)
exponent = 0;
for (;; ++s)
{
- if (ISDIGIT (*s))
+ if ('0' <= *s && *s <= '9')
{
got_digit = 1;
@@ -111,7 +101,7 @@ strtod (const char *nptr, char **endptr)
if (!got_digit)
goto noconv;
- if (TOLOWER (*s) == 'e')
+ if (tolower (*s) == 'e')
{
/* Get the exponent specified after the `e' or `E'. */
int save = errno;
diff --git a/lib/strtol.c b/lib/strtol.c
index eda2d26998..cdcd15a318 100644
--- a/lib/strtol.c
+++ b/lib/strtol.c
@@ -208,11 +208,6 @@
# define TOUPPER(Ch) towupper (Ch)
# endif
#else
-# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
-# define IN_CTYPE_DOMAIN(c) 1
-# else
-# define IN_CTYPE_DOMAIN(c) isascii(c)
-# endif
# define L_(Ch) Ch
# define UCHAR_TYPE unsigned char
# define STRING_TYPE char
@@ -221,9 +216,9 @@
# define ISALPHA(Ch) __isalpha_l ((Ch), loc)
# define TOUPPER(Ch) __toupper_l ((Ch), loc)
# else
-# define ISSPACE(Ch) (IN_CTYPE_DOMAIN (Ch) && isspace (Ch))
-# define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch))
-# define TOUPPER(Ch) (IN_CTYPE_DOMAIN (Ch) ? toupper (Ch) : (Ch))
+# define ISSPACE(Ch) isspace (Ch)
+# define ISALPHA(Ch) isalpha (Ch)
+# define TOUPPER(Ch) toupper (Ch)
# endif
#endif
diff --git a/lib/xstrtol.c b/lib/xstrtol.c
index d01db3ca9e..e7fb068105 100644
--- a/lib/xstrtol.c
+++ b/lib/xstrtol.c
@@ -1,6 +1,6 @@
/* A more useful interface to strtol.
- Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+ Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
@@ -51,14 +51,6 @@
# define STRTOL_T_MAXIMUM TYPE_MAXIMUM (__strtol_t)
#endif
-#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-
#if !HAVE_DECL_STRTOIMAX && !defined strtoimax
intmax_t strtoimax ();
#endif
@@ -112,7 +104,7 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
{
const char *q = s;
unsigned char ch = *q;
- while (ISSPACE (ch))
+ while (isspace (ch))
ch = *++q;
if (ch == '-')
return LONGINT_INVALID;