# HG changeset patch # User Paul Eggert # Date 1168043268 0 # Node ID 97a9a64ee63cd53bf0d0adec76a00c599cb4b4f7 # Parent 446458ff5d665be3ba319f727896ff62116c2c20 Don't worry about using IRIX 5.3's wctype.h broken definitions; simply work around them. * lib/wctype_.h: Remove test for HAVE_WCTYPE_CTMP_BUG. (iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph, iswlower): (iswprint, iswpunct, iswspace, iswupper, iswxdigit): Undef before declaring. Don't bother to define as macros, since the standard doesn't require it. * m4/wctype.m4 (WCTYPE_H, ABSOLUTE_WCTYPE_H): Simplify, since we no longer worry about IRIX 5.3. (HAVE_WCTYPE_CTMP_BUG): Remove. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-01-05 Paul Eggert + + Don't worry about using IRIX 5.3's wctype.h broken definitions; + simply work around them. + * lib/wctype_.h: Remove test for HAVE_WCTYPE_CTMP_BUG. + (iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph, iswlower): + (iswprint, iswpunct, iswspace, iswupper, iswxdigit): Undef before declaring. + Don't bother to define as macros, since the standard doesn't require it. + * m4/wctype.m4 (WCTYPE_H, ABSOLUTE_WCTYPE_H): Simplify, since we no + longer worry about IRIX 5.3. + (HAVE_WCTYPE_CTMP_BUG): Remove. + 2007-01-04 Paul Eggert * lib/wctype_.h (_ctmp_) [HAVE_WCTYPE_CTMP_BUG]: Now of type wchar_t, diff --git a/lib/wctype_.h b/lib/wctype_.h --- a/lib/wctype_.h +++ b/lib/wctype_.h @@ -49,90 +49,77 @@ # include @ABSOLUTE_WCTYPE_H@ #endif -/* IRIX 5.3 has bugs: its isw* macros refer to an undefined variable - _ctmp_ and to macros like _P. */ -#if @HAVE_WCTYPE_CTMP_BUG@ -# include -wchar_t _ctmp_; -#endif - /* FreeBSD 4.4 to 4.11 has but lacks the functions. Assume all 12 functions are implemented the same way, or not at all. */ +#if ! HAVE_ISWCNTRL -#if !defined iswalnum && !HAVE_ISWCNTRL +/* IRIX 5.3 has macros but no functions, its isw* macros refer to an + undefined variable _ctmp_ and to macros like _P, and they + refer to system functions like _iswctype that are not in the + standard C library. Rather than try to get ancient buggy + implementations like this to work, just disable them. */ +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit + static inline int iswalnum (__wctype_wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); } -# define iswalnum iswalnum -#endif -#if !defined iswalpha && !HAVE_ISWCNTRL static inline int iswalpha (__wctype_wint_t wc) { return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; } -# define iswalpha iswalpha -#endif -#if !defined iswblank && !HAVE_ISWCNTRL static inline int iswblank (__wctype_wint_t wc) { return wc == ' ' || wc == '\t'; } -# define iswblank iswblank -#endif -#if !defined iswcntrl && !HAVE_ISWCNTRL static inline int iswcntrl (__wctype_wint_t wc) { return (wc & ~0x1f) == 0 || wc == 0x7f; } -# define iswcntrl iswcntrl -#endif -#if !defined iswdigit && !HAVE_ISWCNTRL static inline int iswdigit (__wctype_wint_t wc) { return wc >= '0' && wc <= '9'; } -# define iswdigit iswdigit -#endif -#if !defined iswgraph && !HAVE_ISWCNTRL static inline int iswgraph (__wctype_wint_t wc) { return wc >= '!' && wc <= '~'; } -# define iswgraph iswgraph -#endif -#if !defined iswlower && !HAVE_ISWCNTRL static inline int iswlower (__wctype_wint_t wc) { return wc >= 'a' && wc <= 'z'; } -# define iswlower iswlower -#endif -#if !defined iswprint && !HAVE_ISWCNTRL static inline int iswprint (__wctype_wint_t wc) { return wc >= ' ' && wc <= '~'; } -# define iswprint iswprint -#endif -#if !defined iswpunct && !HAVE_ISWCNTRL static inline int iswpunct (__wctype_wint_t wc) { @@ -140,37 +127,27 @@ && !((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); } -# define iswpunct iswpunct -#endif -#if !defined iswspace && !HAVE_ISWCNTRL static inline int iswspace (__wctype_wint_t wc) { return (wc == ' ' || wc == '\t' || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); } -# define iswspace iswspace -#endif -#if !defined iswupper && !HAVE_ISWCNTRL static inline int iswupper (__wctype_wint_t wc) { return wc >= 'A' && wc <= 'Z'; } -# define iswupper iswupper -#endif -#if !defined iswxdigit && !HAVE_ISWCNTRL static inline int iswxdigit (__wctype_wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); } -# define iswxdigit iswxdigit -#endif +# endif /* ! HAVE_ISWCNTRL */ #endif /* _GL_WCTYPE_H */ diff --git a/m4/wctype.m4 b/m4/wctype.m4 --- a/m4/wctype.m4 +++ b/m4/wctype.m4 @@ -16,9 +16,15 @@ AC_REQUIRE([gt_TYPE_WINT_T]) AC_SUBST([HAVE_WINT_T]) + WCTYPE_H=wctype.h if test $ac_cv_header_wctype_h = yes; then - gl_ABSOLUTE_HEADER([wctype.h]) - ABSOLUTE_WCTYPE_H=\"$gl_cv_absolute_wctype_h\" + if test "$ac_cv_func_iswcntrl" = yes; then + WCTYPE_H= + ABSOLUTE_WCTYPE_H=\"does/not/matter.h\" + else + gl_ABSOLUTE_HEADER([wctype.h]) + ABSOLUTE_WCTYPE_H=\"$gl_cv_absolute_wctype_h\" + fi HAVE_WCTYPE_H=1 else ABSOLUTE_WCTYPE_H=\"no/such/file/wctype.h\" @@ -26,35 +32,5 @@ fi AC_SUBST([ABSOLUTE_WCTYPE_H]) AC_SUBST([HAVE_WCTYPE_H]) - - WCTYPE_H=wctype.h - HAVE_WCTYPE_CTMP_BUG=0 - if test $ac_cv_header_wctype_h = yes; then - dnl IRIX 5.3 has a bug: its isw* macros reference an undefined variable - dnl _ctmp_. Test against this bug. - AC_CACHE_CHECK([whether wctype macros need _ctmp_ declared], - [gl_cv_wctype_ctmp_bug], - [gl_cv_wctype_ctmp_bug=no - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[return iswprint (0);]])], - [gl_cv_wctype_ctmp_bug='no, but bare wctype.h does not work'], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include - wchar_t _ctmp_;]], - [[return iswprint (0);]])], - [gl_cv_wctype_ctmp_bug=yes])])]) - case $gl_cv_wctype_ctmp_bug,$ac_cv_func_iswcntrl in #( - yes,*) - HAVE_WCTYPE_CTMP_BUG=1;; #( - no,yes) - WCTYPE_H=;; - esac - fi AC_SUBST([WCTYPE_H]) - AC_SUBST([HAVE_WCTYPE_CTMP_BUG]) ])