This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.25-429-g199fc19


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  199fc19d3aaaf57944ef036e15904febe877fc93 (commit)
      from  4615f5aefeaa45345484a9ce8e3d0ea977c80d80 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=199fc19d3aaaf57944ef036e15904febe877fc93

commit 199fc19d3aaaf57944ef036e15904febe877fc93
Author: Zack Weinberg <zackw@panix.com>
Date:   Sun Nov 20 23:00:02 2016 -0500

    Remove __need macros from stdio.h and wchar.h.
    
    wint_t is a little finicky because it might be defined by stddef.h, which
    belongs to the compiler.
    
    In addition to the _types_, a bunch of other declarations shared between
    wctype.h and wchar.h are factored out to their own header.
    
    	* libio/bits/types/FILE.h, libio/bits/types/__FILE.h
    	* wcsmbs/bits/types/mbstate_t.h, wcsmbs/bits/types/__mbstate_t.h
    	* wcsmbs/bits/types/wint_t.h: New single-type definition files.
    	* wctype/bits/wctype-wchar.h: New file holding declarations shared
    	between wctype.h and wchar.h.
    
    	* libio/Makefile, wcsmbs/Makefile, wctype/Makefile:
    	Install them.
    
    	* include/bits/types/FILE.h, include/bits/types/__FILE.h
    	* include/bits/types/mbstate_t.h, include/bits/types/__mbstate_t.h
    	* include/bits/types/wint_t.h, include/bits/wcsmbs-wchar.h:
    	New wrappers.
    	* include/stdio.h, include/wchar.h, include/wctype.h:
    	No need to handle __need macros.
    
    	* grp/grp.h, gshadow/gshadow.h, hurd/hurd.h, iconv/gconv.h
    	* libio/stdio.h, mach/mach.h, misc/mntent.h, pwd/pwd.h
    	* shadow/shadow.h, stdio-common/printf.h, wcsmbs/uchar.h
    	* wcsmbs/wchar.h, wctype/wctype.h
    	* sysdeps/generic/_G_config.h, sysdeps/unix/sysv/linux/_G_config.h
    	Use the new files instead of __need macros.

diff --git a/ChangeLog b/ChangeLog
index bd530a8..69035e8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2017-06-08  Zack Weinberg  <zackw@panix.com>
+
+	* libio/bits/types/FILE.h, libio/bits/types/__FILE.h
+	* wcsmbs/bits/types/mbstate_t.h, wcsmbs/bits/types/__mbstate_t.h
+	* wcsmbs/bits/types/wint_t.h: New single-type definition files.
+	* wctype/bits/wctype-wchar.h: New file holding declarations shared
+	between wctype.h and wchar.h.
+
+	* libio/Makefile, wcsmbs/Makefile, wctype/Makefile:
+	Install them.
+
+	* include/bits/types/FILE.h, include/bits/types/__FILE.h
+	* include/bits/types/mbstate_t.h, include/bits/types/__mbstate_t.h
+	* include/bits/types/wint_t.h, include/bits/wcsmbs-wchar.h:
+	New wrappers.
+	* include/stdio.h, include/wchar.h, include/wctype.h:
+	No need to handle __need macros.
+
+	* grp/grp.h, gshadow/gshadow.h, hurd/hurd.h, iconv/gconv.h
+	* libio/stdio.h, mach/mach.h, misc/mntent.h, pwd/pwd.h
+	* shadow/shadow.h, stdio-common/printf.h, wcsmbs/uchar.h
+	* wcsmbs/wchar.h, wctype/wctype.h
+	* sysdeps/generic/_G_config.h, sysdeps/unix/sysv/linux/_G_config.h
+	Use the new files instead of __need macros.
+
 2017-06-08  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* string/test-memrchr.c (test_main): Add tests for len == 0
diff --git a/grp/grp.h b/grp/grp.h
index d829e4c..0f833ff 100644
--- a/grp/grp.h
+++ b/grp/grp.h
@@ -49,8 +49,7 @@ struct group
 
 
 #ifdef __USE_MISC
-# define __need_FILE
-# include <stdio.h>
+# include <bits/types/FILE.h>
 #endif
 
 
diff --git a/gshadow/gshadow.h b/gshadow/gshadow.h
index a93b3bd..70ab83d 100644
--- a/gshadow/gshadow.h
+++ b/gshadow/gshadow.h
@@ -21,11 +21,9 @@
 #define _GSHADOW_H	1
 
 #include <features.h>
-
 #include <paths.h>
+#include <bits/types/FILE.h>
 
-#define	__need_FILE
-#include <stdio.h>
 #define __need_size_t
 #include <stddef.h>
 
diff --git a/hurd/hurd.h b/hurd/hurd.h
index e51d3c5..3caa69f 100644
--- a/hurd/hurd.h
+++ b/hurd/hurd.h
@@ -141,8 +141,7 @@ extern struct mutex _hurd_brk_lock;
 
 extern int _hurd_set_brk (vm_address_t newbrk);
 
-#define __need_FILE
-#include <stdio.h>
+#include <bits/types/FILE.h>
 
 /* Calls to get and set basic ports.  */
 
diff --git a/iconv/gconv.h b/iconv/gconv.h
index 71d91a0..db678db 100644
--- a/iconv/gconv.h
+++ b/iconv/gconv.h
@@ -23,9 +23,9 @@
 #define _GCONV_H	1
 
 #include <features.h>
-#define __need_mbstate_t
-#define __need_wint_t
-#include <wchar.h>
+#include <bits/types/__mbstate_t.h>
+#include <bits/types/wint_t.h>
+
 #define __need_size_t
 #define __need_wchar_t
 #include <stddef.h>
diff --git a/include/bits/types/FILE.h b/include/bits/types/FILE.h
new file mode 100644
index 0000000..09b599b
--- /dev/null
+++ b/include/bits/types/FILE.h
@@ -0,0 +1 @@
+#include <libio/bits/types/FILE.h>
diff --git a/include/bits/types/__FILE.h b/include/bits/types/__FILE.h
new file mode 100644
index 0000000..236f60b
--- /dev/null
+++ b/include/bits/types/__FILE.h
@@ -0,0 +1 @@
+#include <libio/bits/types/__FILE.h>
diff --git a/include/bits/types/__mbstate_t.h b/include/bits/types/__mbstate_t.h
new file mode 100644
index 0000000..13e764e
--- /dev/null
+++ b/include/bits/types/__mbstate_t.h
@@ -0,0 +1 @@
+#include <wcsmbs/bits/types/__mbstate_t.h>
diff --git a/include/bits/types/mbstate_t.h b/include/bits/types/mbstate_t.h
new file mode 100644
index 0000000..99ec08a
--- /dev/null
+++ b/include/bits/types/mbstate_t.h
@@ -0,0 +1 @@
+#include <wcsmbs/bits/types/mbstate_t.h>
diff --git a/include/bits/types/wint_t.h b/include/bits/types/wint_t.h
new file mode 100644
index 0000000..f1e373d
--- /dev/null
+++ b/include/bits/types/wint_t.h
@@ -0,0 +1 @@
+#include <wcsmbs/bits/types/wint_t.h>
diff --git a/include/bits/wctype-wchar.h b/include/bits/wctype-wchar.h
new file mode 100644
index 0000000..8273cd7
--- /dev/null
+++ b/include/bits/wctype-wchar.h
@@ -0,0 +1 @@
+#include <wctype/bits/wctype-wchar.h>
diff --git a/include/stdio.h b/include/stdio.h
index ed6593b..f68f633 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -1,8 +1,6 @@
 #ifndef _STDIO_H
-# if defined _ISOMAC || defined __need_FILE || defined __need___FILE
-#  include <libio/stdio.h>
-# else
-#  include <libio/stdio.h>
+# include <libio/stdio.h>
+# ifndef _ISOMAC
 
 /* Now define the internal interfaces.  */
 
@@ -71,11 +69,11 @@ libc_hidden_proto (__isoc99_vfscanf)
 extern FILE *__new_tmpfile (void);
 extern FILE *__old_tmpfile (void);
 
-
-
 #  define __need_size_t
-#  define __need_wint_t
 #  include <stddef.h>
+
+#  include <bits/types/wint_t.h>
+
 /* Generate a unique file name (and possibly open it).  */
 extern int __path_search (char *__tmpl, size_t __tmpl_len,
 			  const char *__dir, const char *__pfx,
@@ -183,5 +181,5 @@ libc_hidden_proto (__obstack_vprintf_chk)
 extern FILE * __fmemopen (void *buf, size_t len, const char *mode);
 libc_hidden_proto (__fmemopen)
 
-# endif
-#endif
+# endif /* not _ISOMAC */
+#endif /* stdio.h */
diff --git a/include/wchar.h b/include/wchar.h
index a773d56..cf76709 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -1,8 +1,6 @@
 #ifndef _WCHAR_H
-#include <wcsmbs/wchar.h>
-
+# include <wcsmbs/wchar.h>
 # ifndef _ISOMAC
-# ifdef _WCHAR_H
 
 extern __typeof (wcscasecmp_l) __wcscasecmp_l;
 extern __typeof (wcsncasecmp_l) __wcsncasecmp_l;
@@ -219,10 +217,4 @@ extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len,
 #  define __mbsinit(state) ((state)->__count == 0)
 
 # endif
-# endif
 #endif
-
-/* Undefine all __need_* constants in case we are included to get those
-   constants but the whole file was already read.  */
-#undef __need_mbstate_t
-#undef __need_wint_t
diff --git a/include/wctype.h b/include/wctype.h
index a71b103..5fd3f86 100644
--- a/include/wctype.h
+++ b/include/wctype.h
@@ -1,30 +1,7 @@
 #ifndef _WCTYPE_H
+#include <wctype/wctype.h>
 
 #ifndef _ISOMAC
-/* We try to get wint_t from <stddef.h>, but not all GCC versions define it
-   there.  So define it ourselves if it remains undefined.  */
-# define __need_wint_t
-# include <stddef.h>
-# ifndef _WINT_T
-/* Integral type unchanged by default argument promotions that can
-   hold any value corresponding to members of the extended character
-   set, as well as at least one value that does not correspond to any
-   member of the extended character set.  */
-#  define _WINT_T
-typedef unsigned int wint_t;
-# endif
-
-/* Need to repeat these prototypes here, as wctype/wctype.h defines all
-   these as macros and thus we couldn't add libc_hidden_proto.  */
-
-extern int iswalpha (wint_t __wc);
-extern int iswalnum (wint_t __wc);
-extern int iswdigit (wint_t __wc);
-extern int iswlower (wint_t __wc);
-extern int iswspace (wint_t __wc);
-extern int iswxdigit (wint_t __wc);
-extern wint_t towlower (wint_t __wc);
-extern wint_t towupper (wint_t __wc);
 
 libc_hidden_proto (iswalpha)
 libc_hidden_proto (iswalnum)
@@ -34,11 +11,7 @@ libc_hidden_proto (iswspace)
 libc_hidden_proto (iswxdigit)
 libc_hidden_proto (towlower)
 libc_hidden_proto (towupper)
-#endif
-
-#include <wctype/wctype.h>
 
-#ifndef _ISOMAC
 /* Internal interfaces.  */
 extern int __iswspace (wint_t __wc);
 extern int __iswctype (wint_t __wc, wctype_t __desc);
diff --git a/libio/Makefile b/libio/Makefile
index be252f7..a002a33 100644
--- a/libio/Makefile
+++ b/libio/Makefile
@@ -23,7 +23,8 @@ subdir	:= libio
 include ../Makeconfig
 
 headers	:= stdio.h libio.h _G_config.h bits/stdio.h \
-	   bits/sys_errlist.h bits/stdio2.h bits/stdio-ldbl.h bits/libio-ldbl.h
+	   bits/sys_errlist.h bits/stdio2.h bits/stdio-ldbl.h bits/libio-ldbl.h \
+	   bits/types/FILE.h bits/types/__FILE.h
 
 routines	:=							      \
 	filedoalloc iofclose iofdopen iofflush iofgetpos iofgets iofopen      \
diff --git a/libio/bits/types/FILE.h b/libio/bits/types/FILE.h
new file mode 100644
index 0000000..f268263
--- /dev/null
+++ b/libio/bits/types/FILE.h
@@ -0,0 +1,9 @@
+#ifndef __FILE_defined
+#define __FILE_defined 1
+
+struct _IO_FILE;
+
+/* The opaque type of streams.  This is the definition used elsewhere.  */
+typedef struct _IO_FILE FILE;
+
+#endif
diff --git a/libio/bits/types/__FILE.h b/libio/bits/types/__FILE.h
new file mode 100644
index 0000000..06dd79b
--- /dev/null
+++ b/libio/bits/types/__FILE.h
@@ -0,0 +1,7 @@
+#ifndef ____FILE_defined
+#define ____FILE_defined 1
+
+struct _IO_FILE;
+typedef struct _IO_FILE __FILE;
+
+#endif
diff --git a/libio/stdio.h b/libio/stdio.h
index 422f39d..47490c8 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -21,48 +21,21 @@
  */
 
 #ifndef _STDIO_H
+#define _STDIO_H	1
 
-#if !defined __need_FILE && !defined __need___FILE
-# define _STDIO_H	1
-# define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
-# include <bits/libc-header-start.h>
+#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
+#include <bits/libc-header-start.h>
 
 __BEGIN_DECLS
 
-# define __need_size_t
-# define __need_NULL
-# include <stddef.h>
+#define __need_size_t
+#define __need_NULL
+#include <stddef.h>
 
-# include <bits/types.h>
-# define __need_FILE
-# define __need___FILE
-#endif /* Don't need FILE.  */
+#include <bits/types.h>
+#include <bits/types/__FILE.h>
+#include <bits/types/FILE.h>
 
-
-#if !defined __FILE_defined && defined __need_FILE
-
-/* Define outside of namespace so the C++ is happy.  */
-struct _IO_FILE;
-
-/* The opaque type of streams.  This is the definition used elsewhere.  */
-typedef struct _IO_FILE FILE;
-
-# define __FILE_defined	1
-#endif /* FILE not defined.  */
-#undef	__need_FILE
-
-
-#if !defined ____FILE_defined && defined __need___FILE
-
-/* The opaque type of streams.  This is the definition used elsewhere.  */
-typedef struct _IO_FILE __FILE;
-
-# define ____FILE_defined	1
-#endif /* __FILE not defined.  */
-#undef	__need___FILE
-
-
-#ifdef	_STDIO_H
 #define _STDIO_USES_IOSTREAM
 
 #include <libio.h>
@@ -895,5 +868,3 @@ extern void funlockfile (FILE *__stream) __THROW;
 __END_DECLS
 
 #endif /* <stdio.h> included.  */
-
-#endif /* !_STDIO_H */
diff --git a/mach/mach.h b/mach/mach.h
index 3ceb7b6..42605af 100644
--- a/mach/mach.h
+++ b/mach/mach.h
@@ -20,10 +20,8 @@
 
 #define	_MACH_H	1
 
-/* We must include this before using __need_FILE with <stdio.h> below.  */
 #include <features.h>
 
-
 /* Get the basic types used by Mach.  */
 #include <mach/mach_types.h>
 
@@ -79,9 +77,7 @@ extern void
 __mach_msg_destroy (mach_msg_header_t *msg),
 mach_msg_destroy (mach_msg_header_t *msg);
 
-
-#define __need_FILE
-#include <stdio.h>
+#include <bits/types/FILE.h>
 
 /* Open a stream on a Mach device.  */
 extern FILE *mach_open_devstream (mach_port_t device_port, const char *mode);
diff --git a/misc/mntent.h b/misc/mntent.h
index 039a454..e54e165 100644
--- a/misc/mntent.h
+++ b/misc/mntent.h
@@ -20,10 +20,8 @@
 #define	_MNTENT_H	1
 
 #include <features.h>
-#define __need_FILE
-#include <stdio.h>
 #include <paths.h>
-
+#include <bits/types/FILE.h>
 
 /* File listing canonical interesting mount points.  */
 #define	MNTTAB		_PATH_MNTTAB	/* Deprecated alias.  */
diff --git a/pwd/pwd.h b/pwd/pwd.h
index fabd950..100f33e 100644
--- a/pwd/pwd.h
+++ b/pwd/pwd.h
@@ -59,8 +59,7 @@ struct passwd
 
 
 #ifdef __USE_MISC
-# define __need_FILE
-# include <stdio.h>
+# include <bits/types/FILE.h>
 #endif
 
 
diff --git a/shadow/shadow.h b/shadow/shadow.h
index 855fe63..f55c946 100644
--- a/shadow/shadow.h
+++ b/shadow/shadow.h
@@ -24,11 +24,11 @@
 
 #include <paths.h>
 
-#define	__need_FILE
-#include <stdio.h>
 #define __need_size_t
 #include <stddef.h>
 
+#include <bits/types/FILE.h>
+
 /* Paths to the user database files.  */
 #define	SHADOW _PATH_SHADOW
 
diff --git a/stdio-common/printf.h b/stdio-common/printf.h
index 6b207d2..9402564 100644
--- a/stdio-common/printf.h
+++ b/stdio-common/printf.h
@@ -22,11 +22,12 @@
 
 __BEGIN_DECLS
 
-#define	__need_FILE
-#include <stdio.h>
+#include <bits/types/FILE.h>
+
 #define	__need_size_t
 #define __need_wchar_t
 #include <stddef.h>
+
 #include <stdarg.h>
 
 
diff --git a/sysdeps/generic/_G_config.h b/sysdeps/generic/_G_config.h
index f44a3d4..c49eed3 100644
--- a/sysdeps/generic/_G_config.h
+++ b/sysdeps/generic/_G_config.h
@@ -13,11 +13,12 @@
 #endif
 #define __need_NULL
 #include <stddef.h>
-#define __need_mbstate_t
+
+#include <bits/types/__mbstate_t.h>
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# define __need_wint_t
+# include <bits/types/wint_t.h>
 #endif
-#include <wchar.h>
+
 typedef struct
 {
   __off_t __pos;
diff --git a/sysdeps/unix/sysv/linux/_G_config.h b/sysdeps/unix/sysv/linux/_G_config.h
index abec245..3bc6cfd 100644
--- a/sysdeps/unix/sysv/linux/_G_config.h
+++ b/sysdeps/unix/sysv/linux/_G_config.h
@@ -13,11 +13,12 @@
 #endif
 #define __need_NULL
 #include <stddef.h>
-#define __need_mbstate_t
+
+#include <bits/types/__mbstate_t.h>
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# define __need_wint_t
+# include <bits/types/wint_t.h>
 #endif
-#include <wchar.h>
+
 typedef struct
 {
   __off_t __pos;
diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile
index d6b214b..08b1de1 100644
--- a/wcsmbs/Makefile
+++ b/wcsmbs/Makefile
@@ -22,7 +22,8 @@ subdir	:= wcsmbs
 
 include ../Makeconfig
 
-headers	:= wchar.h bits/wchar.h bits/wchar2.h bits/wchar-ldbl.h uchar.h
+headers	:= wchar.h bits/wchar.h bits/wchar2.h bits/wchar-ldbl.h uchar.h \
+	   bits/types/__mbstate_t.h bits/types/mbstate_t.h bits/types/wint_t.h
 
 routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
 	    wcsncmp wcsncpy wcspbrk wcsrchr wcsspn wcstok wcsstr wmemchr \
diff --git a/wcsmbs/bits/types/__mbstate_t.h b/wcsmbs/bits/types/__mbstate_t.h
new file mode 100644
index 0000000..1d8a4e2
--- /dev/null
+++ b/wcsmbs/bits/types/__mbstate_t.h
@@ -0,0 +1,23 @@
+#ifndef ____mbstate_t_defined
+#define ____mbstate_t_defined 1
+
+/* Integral type unchanged by default argument promotions that can
+   hold any value corresponding to members of the extended character
+   set, as well as at least one value that does not correspond to any
+   member of the extended character set.  */
+#ifndef __WINT_TYPE__
+# define __WINT_TYPE__ unsigned int
+#endif
+
+/* Conversion state information.  */
+typedef struct
+{
+  int __count;
+  union
+  {
+    __WINT_TYPE__ __wch;
+    char __wchb[4];
+  } __value;		/* Value so far.  */
+} __mbstate_t;
+
+#endif
diff --git a/wcsmbs/bits/types/mbstate_t.h b/wcsmbs/bits/types/mbstate_t.h
new file mode 100644
index 0000000..8d1baa5
--- /dev/null
+++ b/wcsmbs/bits/types/mbstate_t.h
@@ -0,0 +1,8 @@
+#ifndef __mbstate_t_defined
+#define __mbstate_t_defined 1
+
+#include <bits/types/__mbstate_t.h>
+
+typedef __mbstate_t mbstate_t;
+
+#endif
diff --git a/wcsmbs/bits/types/wint_t.h b/wcsmbs/bits/types/wint_t.h
new file mode 100644
index 0000000..fbd63db
--- /dev/null
+++ b/wcsmbs/bits/types/wint_t.h
@@ -0,0 +1,23 @@
+#ifndef __wint_t_defined
+#define __wint_t_defined 1
+
+/* Some versions of stddef.h provide wint_t, even though neither the
+   C nor C++ standards, nor POSIX, specifies this.  We assume that
+   stddef.h will define the macro _WINT_T if and only if it provides
+   wint_t, and conversely, that it will avoid providing wint_t if
+   _WINT_T is already defined.  */
+#ifndef _WINT_T
+#define _WINT_T 1
+
+/* Integral type unchanged by default argument promotions that can
+   hold any value corresponding to members of the extended character
+   set, as well as at least one value that does not correspond to any
+   member of the extended character set.  */
+#ifndef __WINT_TYPE__
+# define __WINT_TYPE__ unsigned int
+#endif
+
+typedef __WINT_TYPE__ wint_t;
+
+#endif /* _WINT_T */
+#endif /* bits/types/wint_t.h */
diff --git a/wcsmbs/uchar.h b/wcsmbs/uchar.h
index a656982..f937519 100644
--- a/wcsmbs/uchar.h
+++ b/wcsmbs/uchar.h
@@ -27,15 +27,8 @@
 
 #define __need_size_t
 #include <stddef.h>
-#define __need_mbstate_t
-#include <wchar.h>
-
-#ifndef __mbstate_t_defined
-/* Public type.  */
-typedef __mbstate_t mbstate_t;
-# define __mbstate_t_defined 1
-#endif
 
+#include <bits/types/mbstate_t.h>
 
 #if defined __GNUC__ && !defined __USE_ISOCXX11
 /* Define the 16-bit and 32-bit character types.  Use the information
diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h
index 79be9fc..d389428 100644
--- a/wcsmbs/wchar.h
+++ b/wcsmbs/wchar.h
@@ -21,82 +21,32 @@
  */
 
 #ifndef _WCHAR_H
+#define _WCHAR_H 1
 
-#if !defined __need_mbstate_t && !defined __need_wint_t
-# define _WCHAR_H 1
-# define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
-# include <bits/libc-header-start.h>
-#endif
+#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
+#include <bits/libc-header-start.h>
 
-#ifdef _WCHAR_H
-/* Get FILE definition.  */
-# define __need___FILE
-# if defined __USE_UNIX98 || defined __USE_XOPEN2K
-#  define __need_FILE
-# endif
-# include <stdio.h>
-/* Get va_list definition.  */
-# define __need___va_list
-# include <stdarg.h>
+#define __need_size_t
+#define __need_wchar_t
+#define __need_NULL
+#include <stddef.h>
 
-# include <bits/wchar.h>
+#define __need___va_list
+#include <stdarg.h>
 
-/* Get size_t, wchar_t, wint_t and NULL from <stddef.h>.  */
-# define __need_size_t
-# define __need_wchar_t
-# define __need_NULL
-#endif
-#if defined _WCHAR_H || defined __need_wint_t || !defined __WINT_TYPE__
-# undef __need_wint_t
-# define __need_wint_t
-# include <stddef.h>
-
-/* We try to get wint_t from <stddef.h>, but not all GCC versions define it
-   there.  So define it ourselves if it remains undefined.  */
-# ifndef _WINT_T
-/* Integral type unchanged by default argument promotions that can
-   hold any value corresponding to members of the extended character
-   set, as well as at least one value that does not correspond to any
-   member of the extended character set.  */
-#  define _WINT_T
-typedef unsigned int wint_t;
-# endif
+#include <bits/wchar.h>
+#include <bits/types/wint_t.h>
+#include <bits/types/mbstate_t.h>
+#include <bits/types/__FILE.h>
 
-/* Tell the caller that we provide correct C++ prototypes.  */
-# if defined __cplusplus && __GNUC_PREREQ (4, 4)
-#  define __CORRECT_ISO_CPP_WCHAR_H_PROTO
-# endif
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+# include <bits/types/FILE.h>
 #endif
 
-#if (defined _WCHAR_H || defined __need_mbstate_t) && !defined ____mbstate_t_defined
-# define ____mbstate_t_defined	1
-/* Conversion state information.  */
-typedef struct
-{
-  int __count;
-  union
-  {
-# ifdef __WINT_TYPE__
-    __WINT_TYPE__ __wch;
-# else
-    wint_t __wch;
-# endif
-    char __wchb[4];
-  } __value;		/* Value so far.  */
-} __mbstate_t;
+/* Tell the caller that we provide correct C++ prototypes.  */
+#if defined __cplusplus && __GNUC_PREREQ (4, 4)
+# define __CORRECT_ISO_CPP_WCHAR_H_PROTO
 #endif
-#undef __need_mbstate_t
-
-
-/* The rest of the file is only used if used if __need_mbstate_t is not
-   defined.  */
-#ifdef _WCHAR_H
-
-# ifndef __mbstate_t_defined
-/* Public type.  */
-typedef __mbstate_t mbstate_t;
-#  define __mbstate_t_defined 1
-# endif
 
 #ifndef WCHAR_MIN
 /* These constants might also be defined in <inttypes.h>.  */
@@ -108,13 +58,18 @@ typedef __mbstate_t mbstate_t;
 # define WEOF (0xffffffffu)
 #endif
 
-/* For XPG4 compliance we have to define the stuff from <wctype.h> here
-   as well.  */
-#if defined __USE_XOPEN && !defined __USE_UNIX98
-# include <wctype.h>
+/* All versions of XPG prior to the publication of ISO C99 required
+   the bulk of <wctype.h>'s declarations to appear in this header
+   (because <wctype.h> did not exist prior to C99).  In POSIX.1-2001
+   those declarations were marked as XSI extensions; in -2008 they
+   were additionally marked as obsolescent.  _GNU_SOURCE mode
+   anticipates the removal of these declarations in the next revision
+   of POSIX.  */
+#if (defined __USE_XOPEN && !defined __USE_GNU \
+     && !(defined __USE_XOPEN2K && !defined __USE_XOPEN2KXSI))
+# include <bits/wctype-wchar.h>
 #endif
 
-
 __BEGIN_DECLS
 
 /* This incomplete type is defined in <time.h> but needed here because
@@ -823,17 +778,6 @@ extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
 			  __locale_t __loc) __THROW;
 # endif
 
-/* The X/Open standard demands that most of the functions defined in
-   the <wctype.h> header must also appear here.  This is probably
-   because some X/Open members wrote their implementation before the
-   ISO C standard was published and introduced the better solution.
-   We have to provide these definitions for compliance reasons but we
-   do this nonsense only if really necessary.  */
-#if defined __USE_UNIX98 && !defined __USE_GNU
-# define __need_iswxxx
-# include <wctype.h>
-#endif
-
 /* Define some macros helping to catch buffer overflows.  */
 #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
 # include <bits/wchar2.h>
@@ -845,11 +789,4 @@ extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
 
 __END_DECLS
 
-#endif	/* _WCHAR_H defined */
-
 #endif /* wchar.h  */
-
-/* Undefine all __need_* constants in case we are included to get those
-   constants but the whole file was already read.  */
-#undef __need_mbstate_t
-#undef __need_wint_t
diff --git a/wctype/Makefile b/wctype/Makefile
index 18756c3..2cb2a6d 100644
--- a/wctype/Makefile
+++ b/wctype/Makefile
@@ -22,7 +22,7 @@ subdir	:= wctype
 
 include ../Makeconfig
 
-headers		:= wctype.h
+headers		:= wctype.h bits/wctype-wchar.h
 routines	:= wcfuncs wctype iswctype wctrans towctrans \
 		   wcfuncs_l wctype_l iswctype_l wctrans_l towctrans_l
 
diff --git a/wctype/bits/wctype-wchar.h b/wctype/bits/wctype-wchar.h
new file mode 100644
index 0000000..df5fd03
--- /dev/null
+++ b/wctype/bits/wctype-wchar.h
@@ -0,0 +1,173 @@
+/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/*
+ *	ISO C99 Standard: 7.25
+ *	Wide character classification and mapping utilities  <wctype.h>
+ */
+
+#ifndef _BITS_WCTYPE_WCHAR_H
+#define _BITS_WCTYPE_WCHAR_H 1
+
+#if !defined _WCTYPE_H && !defined _WCHAR_H
+#error "Never include <bits/wctype-wchar.h> directly; include <wctype.h> or <wchar.h> instead."
+#endif
+
+#include <bits/types.h>
+#include <bits/types/wint_t.h>
+
+/* The definitions in this header are specified to appear in <wctype.h>
+   in ISO C99, but in <wchar.h> in Unix98.  _GNU_SOURCE follows C99.  */
+
+/* Scalar type that can hold values which represent locale-specific
+   character classifications.  */
+typedef unsigned long int wctype_t;
+
+# ifndef _ISwbit
+/* The characteristics are stored always in network byte order (big
+   endian).  We define the bit value interpretations here dependent on the
+   machine's byte order.  */
+
+#  include <endian.h>
+#  if __BYTE_ORDER == __BIG_ENDIAN
+#   define _ISwbit(bit)	(1 << (bit))
+#  else /* __BYTE_ORDER == __LITTLE_ENDIAN */
+#   define _ISwbit(bit)	\
+	((bit) < 8 ? (int) ((1UL << (bit)) << 24)			      \
+	 : ((bit) < 16 ? (int) ((1UL << (bit)) << 8)			      \
+	    : ((bit) < 24 ? (int) ((1UL << (bit)) >> 8)			      \
+	       : (int) ((1UL << (bit)) >> 24))))
+#  endif
+
+enum
+{
+  __ISwupper = 0,			/* UPPERCASE.  */
+  __ISwlower = 1,			/* lowercase.  */
+  __ISwalpha = 2,			/* Alphabetic.  */
+  __ISwdigit = 3,			/* Numeric.  */
+  __ISwxdigit = 4,			/* Hexadecimal numeric.  */
+  __ISwspace = 5,			/* Whitespace.  */
+  __ISwprint = 6,			/* Printing.  */
+  __ISwgraph = 7,			/* Graphical.  */
+  __ISwblank = 8,			/* Blank (usually SPC and TAB).  */
+  __ISwcntrl = 9,			/* Control character.  */
+  __ISwpunct = 10,			/* Punctuation.  */
+  __ISwalnum = 11,			/* Alphanumeric.  */
+
+  _ISwupper = _ISwbit (__ISwupper),	/* UPPERCASE.  */
+  _ISwlower = _ISwbit (__ISwlower),	/* lowercase.  */
+  _ISwalpha = _ISwbit (__ISwalpha),	/* Alphabetic.  */
+  _ISwdigit = _ISwbit (__ISwdigit),	/* Numeric.  */
+  _ISwxdigit = _ISwbit (__ISwxdigit),	/* Hexadecimal numeric.  */
+  _ISwspace = _ISwbit (__ISwspace),	/* Whitespace.  */
+  _ISwprint = _ISwbit (__ISwprint),	/* Printing.  */
+  _ISwgraph = _ISwbit (__ISwgraph),	/* Graphical.  */
+  _ISwblank = _ISwbit (__ISwblank),	/* Blank (usually SPC and TAB).  */
+  _ISwcntrl = _ISwbit (__ISwcntrl),	/* Control character.  */
+  _ISwpunct = _ISwbit (__ISwpunct),	/* Punctuation.  */
+  _ISwalnum = _ISwbit (__ISwalnum)	/* Alphanumeric.  */
+};
+# endif /* Not _ISwbit  */
+
+
+__BEGIN_DECLS
+
+/*
+ * Wide-character classification functions: 7.15.2.1.
+ */
+
+/* Test for any wide character for which `iswalpha' or `iswdigit' is
+   true.  */
+extern int iswalnum (wint_t __wc) __THROW;
+
+/* Test for any wide character for which `iswupper' or 'iswlower' is
+   true, or any wide character that is one of a locale-specific set of
+   wide-characters for which none of `iswcntrl', `iswdigit',
+   `iswpunct', or `iswspace' is true.  */
+extern int iswalpha (wint_t __wc) __THROW;
+
+/* Test for any control wide character.  */
+extern int iswcntrl (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a decimal-digit
+   character.  */
+extern int iswdigit (wint_t __wc) __THROW;
+
+/* Test for any wide character for which `iswprint' is true and
+   `iswspace' is false.  */
+extern int iswgraph (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a lowercase letter
+   or is one of a locale-specific set of wide characters for which
+   none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswlower (wint_t __wc) __THROW;
+
+/* Test for any printing wide character.  */
+extern int iswprint (wint_t __wc) __THROW;
+
+/* Test for any printing wide character that is one of a
+   locale-specific et of wide characters for which neither `iswspace'
+   nor `iswalnum' is true.  */
+extern int iswpunct (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a locale-specific
+   set of wide characters for which none of `iswalnum', `iswgraph', or
+   `iswpunct' is true.  */
+extern int iswspace (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to an uppercase letter
+   or is one of a locale-specific set of wide character for which none
+   of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
+extern int iswupper (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a hexadecimal-digit
+   character equivalent to that performed be the functions described
+   in the previous subclause.  */
+extern int iswxdigit (wint_t __wc) __THROW;
+
+/* Test for any wide character that corresponds to a standard blank
+   wide character or a locale-specific set of wide characters for
+   which `iswalnum' is false.  */
+# ifdef __USE_ISOC99
+extern int iswblank (wint_t __wc) __THROW;
+# endif
+
+/*
+ * Extensible wide-character classification functions: 7.15.2.2.
+ */
+
+/* Construct value that describes a class of wide characters identified
+   by the string argument PROPERTY.  */
+extern wctype_t wctype (const char *__property) __THROW;
+
+/* Determine whether the wide-character WC has the property described by
+   DESC.  */
+extern int iswctype (wint_t __wc, wctype_t __desc) __THROW;
+
+/*
+ * Wide-character case-mapping functions: 7.15.3.1.
+ */
+
+/* Converts an uppercase letter to the corresponding lowercase letter.  */
+extern wint_t towlower (wint_t __wc) __THROW;
+
+/* Converts an lowercase letter to the corresponding uppercase letter.  */
+extern wint_t towupper (wint_t __wc) __THROW;
+
+__END_DECLS
+
+#endif /* bits/wctype-wchar.h.  */
diff --git a/wctype/wctype.h b/wctype/wctype.h
index 73165bb..962aef1 100644
--- a/wctype/wctype.h
+++ b/wctype/wctype.h
@@ -21,186 +21,32 @@
  */
 
 #ifndef _WCTYPE_H
+#define _WCTYPE_H 1
 
 #include <features.h>
 #include <bits/types.h>
-
-#ifndef __need_iswxxx
-# define _WCTYPE_H	1
-
-/* Get wint_t from <wchar.h>.  */
-# define __need_wint_t
-# include <wchar.h>
+#include <bits/types/wint_t.h>
 
 /* Constant expression of type `wint_t' whose value does not correspond
    to any member of the extended character set.  */
-# ifndef WEOF
-#  define WEOF (0xffffffffu)
-# endif
+#ifndef WEOF
+# define WEOF (0xffffffffu)
 #endif
-#undef __need_iswxxx
-
-
-/* The following part is also used in the <wcsmbs.h> header when compiled
-   in the Unix98 compatibility mode.  */
-#ifndef __iswxxx_defined
-# define __iswxxx_defined	1
-
-/* Scalar type that can hold values which represent locale-specific
-   character classifications.  */
-typedef unsigned long int wctype_t;
-
-# ifndef _ISwbit
-/* The characteristics are stored always in network byte order (big
-   endian).  We define the bit value interpretations here dependent on the
-   machine's byte order.  */
-
-#  include <endian.h>
-#  if __BYTE_ORDER == __BIG_ENDIAN
-#   define _ISwbit(bit)	(1 << (bit))
-#  else /* __BYTE_ORDER == __LITTLE_ENDIAN */
-#   define _ISwbit(bit)	\
-	((bit) < 8 ? (int) ((1UL << (bit)) << 24)			      \
-	 : ((bit) < 16 ? (int) ((1UL << (bit)) << 8)			      \
-	    : ((bit) < 24 ? (int) ((1UL << (bit)) >> 8)			      \
-	       : (int) ((1UL << (bit)) >> 24))))
-#  endif
-
-enum
-{
-  __ISwupper = 0,			/* UPPERCASE.  */
-  __ISwlower = 1,			/* lowercase.  */
-  __ISwalpha = 2,			/* Alphabetic.  */
-  __ISwdigit = 3,			/* Numeric.  */
-  __ISwxdigit = 4,			/* Hexadecimal numeric.  */
-  __ISwspace = 5,			/* Whitespace.  */
-  __ISwprint = 6,			/* Printing.  */
-  __ISwgraph = 7,			/* Graphical.  */
-  __ISwblank = 8,			/* Blank (usually SPC and TAB).  */
-  __ISwcntrl = 9,			/* Control character.  */
-  __ISwpunct = 10,			/* Punctuation.  */
-  __ISwalnum = 11,			/* Alphanumeric.  */
-
-  _ISwupper = _ISwbit (__ISwupper),	/* UPPERCASE.  */
-  _ISwlower = _ISwbit (__ISwlower),	/* lowercase.  */
-  _ISwalpha = _ISwbit (__ISwalpha),	/* Alphabetic.  */
-  _ISwdigit = _ISwbit (__ISwdigit),	/* Numeric.  */
-  _ISwxdigit = _ISwbit (__ISwxdigit),	/* Hexadecimal numeric.  */
-  _ISwspace = _ISwbit (__ISwspace),	/* Whitespace.  */
-  _ISwprint = _ISwbit (__ISwprint),	/* Printing.  */
-  _ISwgraph = _ISwbit (__ISwgraph),	/* Graphical.  */
-  _ISwblank = _ISwbit (__ISwblank),	/* Blank (usually SPC and TAB).  */
-  _ISwcntrl = _ISwbit (__ISwcntrl),	/* Control character.  */
-  _ISwpunct = _ISwbit (__ISwpunct),	/* Punctuation.  */
-  _ISwalnum = _ISwbit (__ISwalnum)	/* Alphanumeric.  */
-};
-# endif /* Not _ISwbit  */
 
-
-__BEGIN_DECLS
+/* Some definitions from this header also appear in <wchar.h> in
+   Unix98 mode.  */
+#include <bits/wctype-wchar.h>
 
 /*
- * Wide-character classification functions: 7.15.2.1.
- */
-
-/* Test for any wide character for which `iswalpha' or `iswdigit' is
-   true.  */
-extern int iswalnum (wint_t __wc) __THROW;
-
-/* Test for any wide character for which `iswupper' or 'iswlower' is
-   true, or any wide character that is one of a locale-specific set of
-   wide-characters for which none of `iswcntrl', `iswdigit',
-   `iswpunct', or `iswspace' is true.  */
-extern int iswalpha (wint_t __wc) __THROW;
-
-/* Test for any control wide character.  */
-extern int iswcntrl (wint_t __wc) __THROW;
-
-/* Test for any wide character that corresponds to a decimal-digit
-   character.  */
-extern int iswdigit (wint_t __wc) __THROW;
-
-/* Test for any wide character for which `iswprint' is true and
-   `iswspace' is false.  */
-extern int iswgraph (wint_t __wc) __THROW;
-
-/* Test for any wide character that corresponds to a lowercase letter
-   or is one of a locale-specific set of wide characters for which
-   none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
-extern int iswlower (wint_t __wc) __THROW;
-
-/* Test for any printing wide character.  */
-extern int iswprint (wint_t __wc) __THROW;
-
-/* Test for any printing wide character that is one of a
-   locale-specific et of wide characters for which neither `iswspace'
-   nor `iswalnum' is true.  */
-extern int iswpunct (wint_t __wc) __THROW;
-
-/* Test for any wide character that corresponds to a locale-specific
-   set of wide characters for which none of `iswalnum', `iswgraph', or
-   `iswpunct' is true.  */
-extern int iswspace (wint_t __wc) __THROW;
-
-/* Test for any wide character that corresponds to an uppercase letter
-   or is one of a locale-specific set of wide character for which none
-   of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
-extern int iswupper (wint_t __wc) __THROW;
-
-/* Test for any wide character that corresponds to a hexadecimal-digit
-   character equivalent to that performed be the functions described
-   in the previous subclause.  */
-extern int iswxdigit (wint_t __wc) __THROW;
-
-/* Test for any wide character that corresponds to a standard blank
-   wide character or a locale-specific set of wide characters for
-   which `iswalnum' is false.  */
-# ifdef __USE_ISOC99
-extern int iswblank (wint_t __wc) __THROW;
-# endif
-
-/*
- * Extensible wide-character classification functions: 7.15.2.2.
+ * Extensible wide-character mapping functions: 7.15.3.2.
  */
 
-/* Construct value that describes a class of wide characters identified
-   by the string argument PROPERTY.  */
-extern wctype_t wctype (const char *__property) __THROW;
-
-/* Determine whether the wide-character WC has the property described by
-   DESC.  */
-extern int iswctype (wint_t __wc, wctype_t __desc) __THROW;
-
-
-/*
- * Wide-character case-mapping functions: 7.15.3.1.
- */
+__BEGIN_DECLS
 
 /* Scalar type that can hold values which represent locale-specific
    character mappings.  */
 typedef const __int32_t *wctrans_t;
 
-/* Converts an uppercase letter to the corresponding lowercase letter.  */
-extern wint_t towlower (wint_t __wc) __THROW;
-
-/* Converts an lowercase letter to the corresponding uppercase letter.  */
-extern wint_t towupper (wint_t __wc) __THROW;
-
-__END_DECLS
-
-#endif	/* need iswxxx.  */
-
-
-/* The remaining definitions and declarations must not appear in the
-   <wchar.h> header.  */
-#ifdef _WCTYPE_H
-
-/*
- * Extensible wide-character mapping functions: 7.15.3.2.
- */
-
-__BEGIN_DECLS
-
 /* Construct value that describes a mapping between wide characters
    identified by the string argument PROPERTY.  */
 extern wctrans_t wctrans (const char *__property) __THROW;
@@ -276,7 +122,6 @@ extern wctype_t wctype_l (const char *__property, __locale_t __locale)
 extern int iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale)
      __THROW;
 
-
 /*
  * Wide-character case-mapping functions.
  */
@@ -300,6 +145,4 @@ extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc,
 
 __END_DECLS
 
-#endif	/* __WCTYPE_H defined.  */
-
 #endif /* wctype.h  */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                           |   25 +++++
 grp/grp.h                           |    3 +-
 gshadow/gshadow.h                   |    4 +-
 hurd/hurd.h                         |    3 +-
 iconv/gconv.h                       |    6 +-
 include/bits/types/FILE.h           |    1 +
 include/bits/types/__FILE.h         |    1 +
 include/bits/types/__mbstate_t.h    |    1 +
 include/bits/types/mbstate_t.h      |    1 +
 include/bits/types/wint_t.h         |    1 +
 include/bits/wctype-wchar.h         |    1 +
 include/stdio.h                     |   16 ++--
 include/wchar.h                     |   10 +--
 include/wctype.h                    |   29 +------
 libio/Makefile                      |    3 +-
 libio/bits/types/FILE.h             |    9 ++
 libio/bits/types/__FILE.h           |    7 ++
 libio/stdio.h                       |   47 ++--------
 mach/mach.h                         |    6 +-
 misc/mntent.h                       |    4 +-
 pwd/pwd.h                           |    3 +-
 shadow/shadow.h                     |    4 +-
 stdio-common/printf.h               |    5 +-
 sysdeps/generic/_G_config.h         |    7 +-
 sysdeps/unix/sysv/linux/_G_config.h |    7 +-
 wcsmbs/Makefile                     |    3 +-
 wcsmbs/bits/types/__mbstate_t.h     |   23 +++++
 wcsmbs/bits/types/mbstate_t.h       |    8 ++
 wcsmbs/bits/types/wint_t.h          |   23 +++++
 wcsmbs/uchar.h                      |    9 +--
 wcsmbs/wchar.h                      |  119 ++++++------------------
 wctype/Makefile                     |    2 +-
 wctype/bits/wctype-wchar.h          |  173 ++++++++++++++++++++++++++++++++++
 wctype/wctype.h                     |  175 ++---------------------------------
 34 files changed, 357 insertions(+), 382 deletions(-)
 create mode 100644 include/bits/types/FILE.h
 create mode 100644 include/bits/types/__FILE.h
 create mode 100644 include/bits/types/__mbstate_t.h
 create mode 100644 include/bits/types/mbstate_t.h
 create mode 100644 include/bits/types/wint_t.h
 create mode 100644 include/bits/wctype-wchar.h
 create mode 100644 libio/bits/types/FILE.h
 create mode 100644 libio/bits/types/__FILE.h
 create mode 100644 wcsmbs/bits/types/__mbstate_t.h
 create mode 100644 wcsmbs/bits/types/mbstate_t.h
 create mode 100644 wcsmbs/bits/types/wint_t.h
 create mode 100644 wctype/bits/wctype-wchar.h


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]