Don't worry about using IRIX 5.3's wctype.h broken definitions;
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 6 Jan 2007 00:27:48 +0000 (00:27 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 6 Jan 2007 00:27:48 +0000 (00:27 +0000)
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.

ChangeLog
lib/wctype_.h
m4/wctype.m4

index 43f901680c15325102c9887c586953ce100b9351..99c5b04fdf89c4b2c3412617031ac5d488da021b 100644 (file)
--- 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,
index 312be2d0e91f6012f437e235db50d3253cd28281..93f8ef6e60a01f350e1992737b2d3c0d1a278b79 100644 (file)
@@ -49,90 +49,77 @@ typedef int __wctype_wint_t;
 # 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
+
+/* 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
 
-#if !defined iswalnum && !HAVE_ISWCNTRL
 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 @@ iswpunct (__wctype_wint_t wc)
          && !((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 */
index 05cd83a83d836c4df719a8842cf70c58260db018..d8aa554b1613f55818b266d076f1ef58c782484d 100644 (file)
@@ -16,9 +16,15 @@ AC_DEFUN([gl_WCTYPE_H],
   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 @@ AC_DEFUN([gl_WCTYPE_H],
   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])
 ])