Ensure that wint_t gets defined on IRIX 5.3.
authorBruno Haible <bruno@clisp.org>
Sat, 20 Sep 2008 12:51:52 +0000 (14:51 +0200)
committerBruno Haible <bruno@clisp.org>
Sat, 20 Sep 2008 12:51:52 +0000 (14:51 +0200)
ChangeLog
doc/posix-headers/wchar.texi
doc/posix-headers/wctype.texi
lib/wchar.in.h
lib/wctype.in.h
m4/wchar.m4
modules/wchar
tests/test-wchar.c
tests/test-wctype.c

index 8580810..91db857 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2008-09-20  Bruno Haible  <bruno@clisp.org>
+
+       Ensure that wint_t gets defined on IRIX 5.3.
+       * lib/wchar.in.h (wint_t): Define if not defined by the system.
+       * lib/wctype.in.h (wint_t): Likewise.
+       (__wctype_wint_t): Remove type.
+       (isw*): Use wint_t instead of __wctype_wint_t.
+       * m4/wchar.m4 (gl_WCHAR_H): Invoke gt_TYPE_WINT_T and set HAVE_WINT_T.
+       * modules/wchar (Files): Add m4/wint_t.m4.
+       (Makefile.am): Substitute HAVE_WINT_T.
+       * tests/test-wchar.c: Check that wchar_t and wint_t are defined.
+       * tests/test-wctype.c: Check that wint_t is defined.
+       * doc/posix-headers/wchar.texi: Mention the IRIX 5 problem.
+       * doc/posix-headers/wctype.texi: Likewise.
+       Reported by Tom G. Christensen <tgc@jupiterrise.com>.
+
 2008-09-18  Bruno Haible  <bruno@clisp.org>
 
        * gnulib-tool (func_exit): Update comment.
index 163109f..5e121e8 100644 (file)
@@ -13,6 +13,9 @@ Linux uClibc built without wide character support.
 @item
 This header file is not self-contained on some platforms:
 OSF/1 with Desktop Toolkit C, BSD/OS 4.0.1.
+@item
+The type @code{wint_t} is missing on some platforms:
+IRIX 5.3.
 @end itemize
 
 Portability problems not fixed by Gnulib:
index 24e1be1..ff56cba 100644 (file)
@@ -14,6 +14,9 @@ HP-UX 11.00, BeOS.
 This header file is not self-contained on some platforms:
 Solaris 2.5, OSF/1 with Desktop Toolkit C, BSD/OS 4.0.1.
 @item
+The type @code{wint_t} is missing on some platforms:
+IRIX 5.3.
+@item
 The functions @code{isw*} are missing on some platforms:
 FreeBSD 4.11.
 @item
index 8ed292c..606a70a 100644 (file)
@@ -63,6 +63,12 @@ extern "C" {
 #endif
 
 
+/* Define wint_t.  (Also done in wctype.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+#endif
+
+
 /* Return the number of screen columns needed for WC.  */
 #if @GNULIB_WCWIDTH@
 # if @REPLACE_WCWIDTH@
index fc1b5c0..e3ed367 100644 (file)
 #ifndef _GL_WCTYPE_H
 #define _GL_WCTYPE_H
 
-#if @HAVE_WINT_T@
-typedef wint_t __wctype_wint_t;
-#else
-typedef int __wctype_wint_t;
+/* Define wint_t.  (Also done in wchar.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
 #endif
 
 /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
@@ -98,56 +97,56 @@ typedef int __wctype_wint_t;
 #  endif
 
 static inline int
-iswalnum (__wctype_wint_t wc)
+iswalnum (wint_t wc)
 {
   return ((wc >= '0' && wc <= '9')
          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
 }
 
 static inline int
-iswalpha (__wctype_wint_t wc)
+iswalpha (wint_t wc)
 {
   return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
 }
 
 static inline int
-iswblank (__wctype_wint_t wc)
+iswblank (wint_t wc)
 {
   return wc == ' ' || wc == '\t';
 }
 
 static inline int
-iswcntrl (__wctype_wint_t wc)
+iswcntrl (wint_t wc)
 {
   return (wc & ~0x1f) == 0 || wc == 0x7f;
 }
 
 static inline int
-iswdigit (__wctype_wint_t wc)
+iswdigit (wint_t wc)
 {
   return wc >= '0' && wc <= '9';
 }
 
 static inline int
-iswgraph (__wctype_wint_t wc)
+iswgraph (wint_t wc)
 {
   return wc >= '!' && wc <= '~';
 }
 
 static inline int
-iswlower (__wctype_wint_t wc)
+iswlower (wint_t wc)
 {
   return wc >= 'a' && wc <= 'z';
 }
 
 static inline int
-iswprint (__wctype_wint_t wc)
+iswprint (wint_t wc)
 {
   return wc >= ' ' && wc <= '~';
 }
 
 static inline int
-iswpunct (__wctype_wint_t wc)
+iswpunct (wint_t wc)
 {
   return (wc >= '!' && wc <= '~'
          && !((wc >= '0' && wc <= '9')
@@ -155,20 +154,20 @@ iswpunct (__wctype_wint_t wc)
 }
 
 static inline int
-iswspace (__wctype_wint_t wc)
+iswspace (wint_t wc)
 {
   return (wc == ' ' || wc == '\t'
          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
 }
 
 static inline int
-iswupper (__wctype_wint_t wc)
+iswupper (wint_t wc)
 {
   return wc >= 'A' && wc <= 'Z';
 }
 
 static inline int
-iswxdigit (__wctype_wint_t wc)
+iswxdigit (wint_t wc)
 {
   return ((wc >= '0' && wc <= '9')
          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
index 70b1248..c1ed2c6 100644 (file)
@@ -1,13 +1,13 @@
 dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
 
-dnl Copyright (C) 2007 Free Software Foundation, Inc.
+dnl Copyright (C) 2007-2008 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl Written by Eric Blake.
 
-# wchar.m4 serial 4
+# wchar.m4 serial 5
 
 AC_DEFUN([gl_WCHAR_H],
 [
@@ -18,7 +18,16 @@ AC_DEFUN([gl_WCHAR_H],
 wchar_t w;]],
       [gl_cv_header_wchar_h_standalone=yes],
       [gl_cv_header_wchar_h_standalone=no])])
-  if test $gl_cv_header_wchar_h_standalone != yes; then
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  if test $gl_cv_header_wchar_h_standalone != yes || test $gt_cv_c_wint_t != yes; then
     WCHAR_H=wchar.h
   fi
 
index 423558d..381f475 100644 (file)
@@ -4,6 +4,7 @@ A <wchar.h> that works around platform issues.
 Files:
 lib/wchar.in.h
 m4/wchar.m4
+m4/wint_t.m4
 
 Depends-on:
 include_next
@@ -25,6 +26,7 @@ wchar.h: wchar.in.h
              -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
              -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
              -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+             -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
              -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
              -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
              -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
index 85b15b5..19da7d9 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of <wchar.h> substitute.
-   Copyright (C) 2007 Free Software Foundation, Inc.
+   Copyright (C) 2007-2008 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include <wchar.h>
 
+/* Check that the types wchar_t and wint_t are defined.  */
+wchar_t a = 'c';
+wint_t b = 'x';
+
 int
 main ()
 {
index 287a583..c2d8601 100644 (file)
@@ -20,6 +20,9 @@
 
 #include <wctype.h>
 
+/* Check that the type wint_t is defined.  */
+wint_t a = 'x';
+
 int
 main ()
 {