mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 14:20:07 +00:00
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.
This commit is contained in:
parent
4615f5aefe
commit
199fc19d3a
25
ChangeLog
25
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
|
||||
|
@ -49,8 +49,7 @@ struct group
|
||||
|
||||
|
||||
#ifdef __USE_MISC
|
||||
# define __need_FILE
|
||||
# include <stdio.h>
|
||||
# include <bits/types/FILE.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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. */
|
||||
|
||||
|
@ -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>
|
||||
|
1
include/bits/types/FILE.h
Normal file
1
include/bits/types/FILE.h
Normal file
@ -0,0 +1 @@
|
||||
#include <libio/bits/types/FILE.h>
|
1
include/bits/types/__FILE.h
Normal file
1
include/bits/types/__FILE.h
Normal file
@ -0,0 +1 @@
|
||||
#include <libio/bits/types/__FILE.h>
|
1
include/bits/types/__mbstate_t.h
Normal file
1
include/bits/types/__mbstate_t.h
Normal file
@ -0,0 +1 @@
|
||||
#include <wcsmbs/bits/types/__mbstate_t.h>
|
1
include/bits/types/mbstate_t.h
Normal file
1
include/bits/types/mbstate_t.h
Normal file
@ -0,0 +1 @@
|
||||
#include <wcsmbs/bits/types/mbstate_t.h>
|
1
include/bits/types/wint_t.h
Normal file
1
include/bits/types/wint_t.h
Normal file
@ -0,0 +1 @@
|
||||
#include <wcsmbs/bits/types/wint_t.h>
|
1
include/bits/wctype-wchar.h
Normal file
1
include/bits/wctype-wchar.h
Normal file
@ -0,0 +1 @@
|
||||
#include <wctype/bits/wctype-wchar.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 */
|
||||
|
@ -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;
|
||||
@ -218,11 +216,5 @@ extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len,
|
||||
# define mbsinit(state) ((state)->__count == 0)
|
||||
# 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
|
||||
|
@ -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);
|
||||
|
@ -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 \
|
||||
|
9
libio/bits/types/FILE.h
Normal file
9
libio/bits/types/FILE.h
Normal file
@ -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
|
7
libio/bits/types/__FILE.h
Normal file
7
libio/bits/types/__FILE.h
Normal file
@ -0,0 +1,7 @@
|
||||
#ifndef ____FILE_defined
|
||||
#define ____FILE_defined 1
|
||||
|
||||
struct _IO_FILE;
|
||||
typedef struct _IO_FILE __FILE;
|
||||
|
||||
#endif
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -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. */
|
||||
|
@ -59,8 +59,7 @@ struct passwd
|
||||
|
||||
|
||||
#ifdef __USE_MISC
|
||||
# define __need_FILE
|
||||
# include <stdio.h>
|
||||
# include <bits/types/FILE.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 \
|
||||
|
23
wcsmbs/bits/types/__mbstate_t.h
Normal file
23
wcsmbs/bits/types/__mbstate_t.h
Normal file
@ -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
|
8
wcsmbs/bits/types/mbstate_t.h
Normal file
8
wcsmbs/bits/types/mbstate_t.h
Normal file
@ -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
|
23
wcsmbs/bits/types/wint_t.h
Normal file
23
wcsmbs/bits/types/wint_t.h
Normal file
@ -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 */
|
@ -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
|
||||
|
125
wcsmbs/wchar.h
125
wcsmbs/wchar.h
@ -21,83 +21,33 @@
|
||||
*/
|
||||
|
||||
#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>
|
||||
#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
|
||||
#include <bits/libc-header-start.h>
|
||||
|
||||
#define __need_size_t
|
||||
#define __need_wchar_t
|
||||
#define __need_NULL
|
||||
#include <stddef.h>
|
||||
|
||||
#define __need___va_list
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <bits/wchar.h>
|
||||
#include <bits/types/wint_t.h>
|
||||
#include <bits/types/mbstate_t.h>
|
||||
#include <bits/types/__FILE.h>
|
||||
|
||||
#if defined __USE_UNIX98 || defined __USE_XOPEN2K
|
||||
# include <bits/types/FILE.h>
|
||||
#endif
|
||||
|
||||
#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>
|
||||
|
||||
# include <bits/wchar.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
|
||||
|
||||
/* 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 __cplusplus && __GNUC_PREREQ (4, 4)
|
||||
# define __CORRECT_ISO_CPP_WCHAR_H_PROTO
|
||||
#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;
|
||||
#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>. */
|
||||
# define WCHAR_MIN __WCHAR_MIN
|
||||
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
173
wctype/bits/wctype-wchar.h
Normal file
173
wctype/bits/wctype-wchar.h
Normal file
@ -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. */
|
179
wctype/wctype.h
179
wctype/wctype.h
@ -21,179 +21,21 @@
|
||||
*/
|
||||
|
||||
#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
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/* 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
|
||||
/* Some definitions from this header also appear in <wchar.h> in
|
||||
Unix98 mode. */
|
||||
#include <bits/wctype-wchar.h>
|
||||
|
||||
/*
|
||||
* Extensible wide-character mapping functions: 7.15.3.2.
|
||||
@ -201,6 +43,10 @@ __END_DECLS
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Scalar type that can hold values which represent locale-specific
|
||||
character mappings. */
|
||||
typedef const __int32_t *wctrans_t;
|
||||
|
||||
/* 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 */
|
||||
|
Loading…
Reference in New Issue
Block a user