changeset 7784:97a9a64ee63c

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.
author Paul Eggert <eggert@cs.ucla.edu>
date Sat, 06 Jan 2007 00:27:48 +0000
parents 446458ff5d66
children 3246679850d5
files ChangeLog lib/wctype_.h m4/wctype.m4
diffstat 3 files changed, 40 insertions(+), 75 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2007-01-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	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  <eggert@cs.ucla.edu>
 
 	* lib/wctype_.h (_ctmp_) [HAVE_WCTYPE_CTMP_BUG]: Now of type wchar_t,
--- 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 <ctype.h> macros like _P.  */
-#if @HAVE_WCTYPE_CTMP_BUG@
-# include <ctype.h>
-wchar_t _ctmp_;
-#endif
-
 /* FreeBSD 4.4 to 4.11 has <wctype.h> 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 <ctype.h> 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 */
--- 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 <wctype.h>
-	    ]],
-	    [[return iswprint (0);]])],
-	 [gl_cv_wctype_ctmp_bug='no, but bare wctype.h does not work'],
-	 [AC_COMPILE_IFELSE(
-	    [AC_LANG_PROGRAM(
-	       [[#include <wctype.h>
-		 #include <ctype.h>
-		 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])
 ])