bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

wctype simplification for IRIX 5.3


From: Paul Eggert
Subject: wctype simplification for IRIX 5.3
Date: Fri, 05 Jan 2007 16:29:32 -0800
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux)

I installed this, in response to the recent bug reports for IRIX 5.3
by Georg Schwarz.

2007-01-05  Paul Eggert  <address@hidden>

        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.

Index: lib/wctype_.h
===================================================================
RCS file: /cvsroot/gnulib/gnulib/lib/wctype_.h,v
retrieving revision 1.4
diff -u -p -r1.4 wctype_.h
--- lib/wctype_.h       4 Jan 2007 19:21:42 -0000       1.4
+++ lib/wctype_.h       6 Jan 2007 00:27:45 -0000
@@ -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: m4/wctype.m4
===================================================================
RCS file: /cvsroot/gnulib/gnulib/m4/wctype.m4,v
retrieving revision 1.4
diff -u -p -r1.4 wctype.m4
--- m4/wctype.m4        4 Jan 2007 19:21:42 -0000       1.4
+++ m4/wctype.m4        6 Jan 2007 00:27:45 -0000
@@ -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])
 ])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]