changeset 7747:c847540b5de5

Fix bug reported by Bruno Haible in <http://lists.gnu.org/archive/html/bug-gnulib/2006-12/msg00228.html> where quotearg.c didn't compile on Mac OS X 10.2 because it lacks <wchar.h> and wint_t. * lib/wctype_.h (__wctype_wint_t): New type. Include <stdio.h>, <time.h>, <wchar.h> only if HAVE_WINT_T. (iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph): (iswlower, iswprint, iswpunct, iswspace, iswupper, ixwxdigit): Arg is now of type __wctype_wint_t, not wint_t. * m4/wctype.m4 (gl_WCTYPE_H): Require gt_TYPE_WINT_T, and substitute HAVE_WINT_T. * modules/wctype (Files): Add m4/wint_t.m4. (wctype.h): Substitute HAVE_WINT_T.
author Paul Eggert <eggert@cs.ucla.edu>
date Sun, 24 Dec 2006 07:55:08 +0000
parents 577c75e46325
children 13a0cdc745f8
files ChangeLog lib/wctype_.h m4/wctype.m4 modules/wctype
diffstat 4 files changed, 41 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2006-12-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix bug reported by Bruno Haible in
+	<http://lists.gnu.org/archive/html/bug-gnulib/2006-12/msg00228.html>
+	where quotearg.c didn't compile on Mac OS X 10.2 because it
+	lacks <wchar.h> and wint_t.
+	* lib/wctype_.h (__wctype_wint_t): New type.
+	Include <stdio.h>, <time.h>, <wchar.h> only if HAVE_WINT_T.
+	(iswalnum, iswalpha, iswblank, iswcntrl, iswdigit, iswgraph):
+	(iswlower, iswprint, iswpunct, iswspace, iswupper, ixwxdigit):
+	Arg is now of type __wctype_wint_t, not wint_t.
+	* m4/wctype.m4 (gl_WCTYPE_H): Require gt_TYPE_WINT_T, and
+	substitute HAVE_WINT_T.
+	* modules/wctype (Files): Add m4/wint_t.m4.
+	(wctype.h): Substitute HAVE_WINT_T.
+
 2006-12-23  Bruno Haible  <bruno@clisp.org>
 
 	* lib/safe-read.h [C++]: Wrap declarations in extern "C".
--- a/lib/wctype_.h
+++ b/lib/wctype_.h
@@ -29,14 +29,19 @@
 #ifndef _GL_WCTYPE_H
 #define _GL_WCTYPE_H
 
+#if @HAVE_WINT_T@ - 0
 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
    Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
    <wchar.h>.
    BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
    <wchar.h>.  */
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+typedef wint_t __wctype_wint_t;
+#else
+typedef int __wctype_wint_t;
+#endif
 
 /* Include the original <wctype.h> if it exists.
    BeOS 5 has the functions but no <wctype.h>.  */
@@ -55,7 +60,7 @@
 
 #if !defined iswalnum && !HAVE_ISWCNTRL
 static inline int
-iswalnum (wint_t wc)
+iswalnum (__wctype_wint_t wc)
 {
   return ((wc >= '0' && wc <= '9')
 	  || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
@@ -65,7 +70,7 @@
 
 #if !defined iswalpha && !HAVE_ISWCNTRL
 static inline int
-iswalpha (wint_t wc)
+iswalpha (__wctype_wint_t wc)
 {
   return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
 }
@@ -74,7 +79,7 @@
 
 #if !defined iswblank && !HAVE_ISWCNTRL
 static inline int
-iswblank (wint_t wc)
+iswblank (__wctype_wint_t wc)
 {
   return wc == ' ' || wc == '\t';
 }
@@ -83,7 +88,7 @@
 
 #if !defined iswcntrl && !HAVE_ISWCNTRL
 static inline int
-iswcntrl (wint_t wc)
+iswcntrl (__wctype_wint_t wc)
 {
   return (wc & ~0x1f) == 0 || wc == 0x7f;
 }
@@ -92,7 +97,7 @@
 
 #if !defined iswdigit && !HAVE_ISWCNTRL
 static inline int
-iswdigit (wint_t wc)
+iswdigit (__wctype_wint_t wc)
 {
   return wc >= '0' && wc <= '9';
 }
@@ -101,7 +106,7 @@
 
 #if !defined iswgraph && !HAVE_ISWCNTRL
 static inline int
-iswgraph (wint_t wc)
+iswgraph (__wctype_wint_t wc)
 {
   return wc >= '!' && wc <= '~';
 }
@@ -110,7 +115,7 @@
 
 #if !defined iswlower && !HAVE_ISWCNTRL
 static inline int
-iswlower (wint_t wc)
+iswlower (__wctype_wint_t wc)
 {
   return wc >= 'a' && wc <= 'z';
 }
@@ -119,7 +124,7 @@
 
 #if !defined iswprint && !HAVE_ISWCNTRL
 static inline int
-iswprint (wint_t wc)
+iswprint (__wctype_wint_t wc)
 {
   return wc >= ' ' && wc <= '~';
 }
@@ -128,7 +133,7 @@
 
 #if !defined iswpunct && !HAVE_ISWCNTRL
 static inline int
-iswpunct (wint_t wc)
+iswpunct (__wctype_wint_t wc)
 {
   return (wc >= '!' && wc <= '~'
 	  && !((wc >= '0' && wc <= '9')
@@ -139,7 +144,7 @@
 
 #if !defined iswspace && !HAVE_ISWCNTRL
 static inline int
-iswspace (wint_t wc)
+iswspace (__wctype_wint_t wc)
 {
   return (wc == ' ' || wc == '\t'
 	  || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
@@ -149,7 +154,7 @@
 
 #if !defined iswupper && !HAVE_ISWCNTRL
 static inline int
-iswupper (wint_t wc)
+iswupper (__wctype_wint_t wc)
 {
   return wc >= 'A' && wc <= 'Z';
 }
@@ -158,7 +163,7 @@
 
 #if !defined iswxdigit && !HAVE_ISWCNTRL
 static inline int
-iswxdigit (wint_t wc)
+iswxdigit (__wctype_wint_t wc)
 {
   return ((wc >= '0' && wc <= '9')
 	  || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
--- a/m4/wctype.m4
+++ b/m4/wctype.m4
@@ -13,6 +13,9 @@
   AC_CHECK_HEADERS_ONCE([wctype.h])
   AC_REQUIRE([AC_C_INLINE])
 
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  AC_SUBST([HAVE_WINT_T])
+
   if test $ac_cv_header_wctype_h = yes; then
     gl_ABSOLUTE_HEADER([wctype.h])
     ABSOLUTE_WCTYPE_H=\"$gl_cv_absolute_wctype_h\"
--- a/modules/wctype
+++ b/modules/wctype
@@ -4,6 +4,7 @@
 Files:
 lib/wctype_.h
 m4/wctype.m4
+m4/wint_t.m4
 
 Depends-on:
 
@@ -21,6 +22,7 @@
 	  sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
 	      -e 's|@''ABSOLUTE_WCTYPE_H''@|$(ABSOLUTE_WCTYPE_H)|g' \
 	      -e 's/@''HAVE_WCTYPE_CTMP_BUG''@/$(HAVE_WCTYPE_CTMP_BUG)/g' \
+	      -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
 	      < $(srcdir)/wctype_.h; \
 	} > $@-t
 	mv $@-t $@