xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/wchar.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* Copyright (C) 1995-2004,2005,2006,2007 Free Software Foundation, Inc.
2*53ee8cc1Swenshuai.xi    This file is part of the GNU C Library.
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi    The GNU C Library is free software; you can redistribute it and/or
5*53ee8cc1Swenshuai.xi    modify it under the terms of the GNU Lesser General Public
6*53ee8cc1Swenshuai.xi    License as published by the Free Software Foundation; either
7*53ee8cc1Swenshuai.xi    version 2.1 of the License, or (at your option) any later version.
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi    The GNU C Library is distributed in the hope that it will be useful,
10*53ee8cc1Swenshuai.xi    but WITHOUT ANY WARRANTY; without even the implied warranty of
11*53ee8cc1Swenshuai.xi    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*53ee8cc1Swenshuai.xi    Lesser General Public License for more details.
13*53ee8cc1Swenshuai.xi 
14*53ee8cc1Swenshuai.xi    You should have received a copy of the GNU Lesser General Public
15*53ee8cc1Swenshuai.xi    License along with the GNU C Library; if not, write to the Free
16*53ee8cc1Swenshuai.xi    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17*53ee8cc1Swenshuai.xi    02111-1307 USA.  */
18*53ee8cc1Swenshuai.xi 
19*53ee8cc1Swenshuai.xi /*
20*53ee8cc1Swenshuai.xi  *      ISO C99 Standard: 7.24
21*53ee8cc1Swenshuai.xi  *	Extended multibyte and wide character utilities	<wchar.h>
22*53ee8cc1Swenshuai.xi  */
23*53ee8cc1Swenshuai.xi 
24*53ee8cc1Swenshuai.xi #ifndef _WCHAR_H
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi #if !defined __need_mbstate_t && !defined __need_wint_t
27*53ee8cc1Swenshuai.xi # define _WCHAR_H 1
28*53ee8cc1Swenshuai.xi # include <features.h>
29*53ee8cc1Swenshuai.xi #endif
30*53ee8cc1Swenshuai.xi 
31*53ee8cc1Swenshuai.xi #ifdef _WCHAR_H
32*53ee8cc1Swenshuai.xi /* Get FILE definition.  */
33*53ee8cc1Swenshuai.xi # define __need___FILE
34*53ee8cc1Swenshuai.xi # if defined __USE_UNIX98 || defined __USE_XOPEN2K
35*53ee8cc1Swenshuai.xi #  define __need_FILE
36*53ee8cc1Swenshuai.xi # endif
37*53ee8cc1Swenshuai.xi # include <stdio.h>
38*53ee8cc1Swenshuai.xi /* Get va_list definition.  */
39*53ee8cc1Swenshuai.xi # define __need___va_list
40*53ee8cc1Swenshuai.xi # include <stdarg.h>
41*53ee8cc1Swenshuai.xi 
42*53ee8cc1Swenshuai.xi # include <bits/wchar.h>
43*53ee8cc1Swenshuai.xi 
44*53ee8cc1Swenshuai.xi /* Get size_t, wchar_t, wint_t and NULL from <stddef.h>.  */
45*53ee8cc1Swenshuai.xi # define __need_size_t
46*53ee8cc1Swenshuai.xi # define __need_wchar_t
47*53ee8cc1Swenshuai.xi # define __need_NULL
48*53ee8cc1Swenshuai.xi #endif
49*53ee8cc1Swenshuai.xi #if defined _WCHAR_H || defined __need_wint_t || !defined __WINT_TYPE__
50*53ee8cc1Swenshuai.xi # undef __need_wint_t
51*53ee8cc1Swenshuai.xi # define __need_wint_t
52*53ee8cc1Swenshuai.xi # include <stddef.h>
53*53ee8cc1Swenshuai.xi 
54*53ee8cc1Swenshuai.xi /* We try to get wint_t from <stddef.h>, but not all GCC versions define it
55*53ee8cc1Swenshuai.xi    there.  So define it ourselves if it remains undefined.  */
56*53ee8cc1Swenshuai.xi # ifndef _WINT_T
57*53ee8cc1Swenshuai.xi /* Integral type unchanged by default argument promotions that can
58*53ee8cc1Swenshuai.xi    hold any value corresponding to members of the extended character
59*53ee8cc1Swenshuai.xi    set, as well as at least one value that does not correspond to any
60*53ee8cc1Swenshuai.xi    member of the extended character set.  */
61*53ee8cc1Swenshuai.xi #  define _WINT_T
62*53ee8cc1Swenshuai.xi typedef unsigned int wint_t;
63*53ee8cc1Swenshuai.xi # else
64*53ee8cc1Swenshuai.xi /* Work around problems with the <stddef.h> file which doesn't put
65*53ee8cc1Swenshuai.xi    wint_t in the std namespace.  */
66*53ee8cc1Swenshuai.xi #  if defined __cplusplus && defined _GLIBCPP_USE_NAMESPACES \
67*53ee8cc1Swenshuai.xi       && defined __WINT_TYPE__
68*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
69*53ee8cc1Swenshuai.xi typedef __WINT_TYPE__ wint_t;
70*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
71*53ee8cc1Swenshuai.xi #  endif
72*53ee8cc1Swenshuai.xi # endif
73*53ee8cc1Swenshuai.xi #endif
74*53ee8cc1Swenshuai.xi 
75*53ee8cc1Swenshuai.xi #if (defined _WCHAR_H || defined __need_mbstate_t) && !defined __mbstate_t_defined
76*53ee8cc1Swenshuai.xi # define __mbstate_t_defined	1
77*53ee8cc1Swenshuai.xi /* Conversion state information.  */
78*53ee8cc1Swenshuai.xi typedef struct
79*53ee8cc1Swenshuai.xi {
80*53ee8cc1Swenshuai.xi   int __count;
81*53ee8cc1Swenshuai.xi   union
82*53ee8cc1Swenshuai.xi   {
83*53ee8cc1Swenshuai.xi # ifdef __WINT_TYPE__
84*53ee8cc1Swenshuai.xi     __WINT_TYPE__ __wch;
85*53ee8cc1Swenshuai.xi # else
86*53ee8cc1Swenshuai.xi     wint_t __wch;
87*53ee8cc1Swenshuai.xi # endif
88*53ee8cc1Swenshuai.xi     char __wchb[4];
89*53ee8cc1Swenshuai.xi   } __value;		/* Value so far.  */
90*53ee8cc1Swenshuai.xi } __mbstate_t;
91*53ee8cc1Swenshuai.xi #endif
92*53ee8cc1Swenshuai.xi #undef __need_mbstate_t
93*53ee8cc1Swenshuai.xi 
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi /* The rest of the file is only used if used if __need_mbstate_t is not
96*53ee8cc1Swenshuai.xi    defined.  */
97*53ee8cc1Swenshuai.xi #ifdef _WCHAR_H
98*53ee8cc1Swenshuai.xi 
99*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
100*53ee8cc1Swenshuai.xi /* Public type.  */
101*53ee8cc1Swenshuai.xi typedef __mbstate_t mbstate_t;
102*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
103*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
104*53ee8cc1Swenshuai.xi __USING_NAMESPACE_C99(mbstate_t)
105*53ee8cc1Swenshuai.xi #endif
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi #ifndef WCHAR_MIN
108*53ee8cc1Swenshuai.xi /* These constants might also be defined in <inttypes.h>.  */
109*53ee8cc1Swenshuai.xi # define WCHAR_MIN __WCHAR_MIN
110*53ee8cc1Swenshuai.xi # define WCHAR_MAX __WCHAR_MAX
111*53ee8cc1Swenshuai.xi #endif
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi #ifndef WEOF
114*53ee8cc1Swenshuai.xi # define WEOF (0xffffffffu)
115*53ee8cc1Swenshuai.xi #endif
116*53ee8cc1Swenshuai.xi 
117*53ee8cc1Swenshuai.xi /* For XPG4 compliance we have to define the stuff from <wctype.h> here
118*53ee8cc1Swenshuai.xi    as well.  */
119*53ee8cc1Swenshuai.xi #if defined __USE_XOPEN && !defined __USE_UNIX98
120*53ee8cc1Swenshuai.xi # include <wctype.h>
121*53ee8cc1Swenshuai.xi #endif
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi __BEGIN_DECLS
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
127*53ee8cc1Swenshuai.xi /* This incomplete type is defined in <time.h> but needed here because
128*53ee8cc1Swenshuai.xi    of `wcsftime'.  */
129*53ee8cc1Swenshuai.xi struct tm;
130*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
131*53ee8cc1Swenshuai.xi /* XXX We have to clean this up at some point.  Since tm is in the std
132*53ee8cc1Swenshuai.xi    namespace but wcsftime is in __c99 the type wouldn't be found
133*53ee8cc1Swenshuai.xi    without inserting it in the global namespace.  */
134*53ee8cc1Swenshuai.xi __USING_NAMESPACE_STD(tm)
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
138*53ee8cc1Swenshuai.xi /* Copy SRC to DEST.  */
139*53ee8cc1Swenshuai.xi extern wchar_t *wcscpy (wchar_t *__restrict __dest,
140*53ee8cc1Swenshuai.xi 			__const wchar_t *__restrict __src) __THROW;
141*53ee8cc1Swenshuai.xi /* Copy no more than N wide-characters of SRC to DEST.  */
142*53ee8cc1Swenshuai.xi extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
143*53ee8cc1Swenshuai.xi 			 __const wchar_t *__restrict __src, size_t __n)
144*53ee8cc1Swenshuai.xi      __THROW;
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi /* Append SRC onto DEST.  */
147*53ee8cc1Swenshuai.xi extern wchar_t *wcscat (wchar_t *__restrict __dest,
148*53ee8cc1Swenshuai.xi 			__const wchar_t *__restrict __src) __THROW;
149*53ee8cc1Swenshuai.xi /* Append no more than N wide-characters of SRC onto DEST.  */
150*53ee8cc1Swenshuai.xi extern wchar_t *wcsncat (wchar_t *__restrict __dest,
151*53ee8cc1Swenshuai.xi 			 __const wchar_t *__restrict __src, size_t __n)
152*53ee8cc1Swenshuai.xi      __THROW;
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi /* Compare S1 and S2.  */
155*53ee8cc1Swenshuai.xi extern int wcscmp (__const wchar_t *__s1, __const wchar_t *__s2)
156*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
157*53ee8cc1Swenshuai.xi /* Compare N wide-characters of S1 and S2.  */
158*53ee8cc1Swenshuai.xi extern int wcsncmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)
159*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
160*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
163*53ee8cc1Swenshuai.xi /* Compare S1 and S2, ignoring case.  */
164*53ee8cc1Swenshuai.xi extern int wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2) __THROW;
165*53ee8cc1Swenshuai.xi 
166*53ee8cc1Swenshuai.xi /* Compare no more than N chars of S1 and S2, ignoring case.  */
167*53ee8cc1Swenshuai.xi extern int wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2,
168*53ee8cc1Swenshuai.xi 			size_t __n) __THROW;
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi /* Similar to the two functions above but take the information from
171*53ee8cc1Swenshuai.xi    the provided locale and not the global locale.  */
172*53ee8cc1Swenshuai.xi # include <xlocale.h>
173*53ee8cc1Swenshuai.xi 
174*53ee8cc1Swenshuai.xi extern int wcscasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
175*53ee8cc1Swenshuai.xi 			 __locale_t __loc) __THROW;
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi extern int wcsncasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
178*53ee8cc1Swenshuai.xi 			  size_t __n, __locale_t __loc) __THROW;
179*53ee8cc1Swenshuai.xi #endif
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
182*53ee8cc1Swenshuai.xi /* Compare S1 and S2, both interpreted as appropriate to the
183*53ee8cc1Swenshuai.xi    LC_COLLATE category of the current locale.  */
184*53ee8cc1Swenshuai.xi extern int wcscoll (__const wchar_t *__s1, __const wchar_t *__s2) __THROW;
185*53ee8cc1Swenshuai.xi /* Transform S2 into array pointed to by S1 such that if wcscmp is
186*53ee8cc1Swenshuai.xi    applied to two transformed strings the result is the as applying
187*53ee8cc1Swenshuai.xi    `wcscoll' to the original strings.  */
188*53ee8cc1Swenshuai.xi extern size_t wcsxfrm (wchar_t *__restrict __s1,
189*53ee8cc1Swenshuai.xi 		       __const wchar_t *__restrict __s2, size_t __n) __THROW;
190*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
191*53ee8cc1Swenshuai.xi 
192*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
193*53ee8cc1Swenshuai.xi /* Similar to the two functions above but take the information from
194*53ee8cc1Swenshuai.xi    the provided locale and not the global locale.  */
195*53ee8cc1Swenshuai.xi 
196*53ee8cc1Swenshuai.xi /* Compare S1 and S2, both interpreted as appropriate to the
197*53ee8cc1Swenshuai.xi    LC_COLLATE category of the given locale.  */
198*53ee8cc1Swenshuai.xi extern int wcscoll_l (__const wchar_t *__s1, __const wchar_t *__s2,
199*53ee8cc1Swenshuai.xi 		      __locale_t __loc) __THROW;
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi /* Transform S2 into array pointed to by S1 such that if wcscmp is
202*53ee8cc1Swenshuai.xi    applied to two transformed strings the result is the as applying
203*53ee8cc1Swenshuai.xi    `wcscoll' to the original strings.  */
204*53ee8cc1Swenshuai.xi extern size_t wcsxfrm_l (wchar_t *__s1, __const wchar_t *__s2,
205*53ee8cc1Swenshuai.xi 			 size_t __n, __locale_t __loc) __THROW;
206*53ee8cc1Swenshuai.xi 
207*53ee8cc1Swenshuai.xi /* Duplicate S, returning an identical malloc'd string.  */
208*53ee8cc1Swenshuai.xi extern wchar_t *wcsdup (__const wchar_t *__s) __THROW __attribute_malloc__;
209*53ee8cc1Swenshuai.xi #endif
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
212*53ee8cc1Swenshuai.xi /* Find the first occurrence of WC in WCS.  */
213*53ee8cc1Swenshuai.xi extern wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
214*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
215*53ee8cc1Swenshuai.xi /* Find the last occurrence of WC in WCS.  */
216*53ee8cc1Swenshuai.xi extern wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
217*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
218*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
219*53ee8cc1Swenshuai.xi 
220*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
221*53ee8cc1Swenshuai.xi /* This function is similar to `wcschr'.  But it returns a pointer to
222*53ee8cc1Swenshuai.xi    the closing NUL wide character in case C is not found in S.  */
223*53ee8cc1Swenshuai.xi extern wchar_t *wcschrnul (__const wchar_t *__s, wchar_t __wc)
224*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
225*53ee8cc1Swenshuai.xi #endif
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
228*53ee8cc1Swenshuai.xi /* Return the length of the initial segmet of WCS which
229*53ee8cc1Swenshuai.xi    consists entirely of wide characters not in REJECT.  */
230*53ee8cc1Swenshuai.xi extern size_t wcscspn (__const wchar_t *__wcs, __const wchar_t *__reject)
231*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
232*53ee8cc1Swenshuai.xi /* Return the length of the initial segmet of WCS which
233*53ee8cc1Swenshuai.xi    consists entirely of wide characters in  ACCEPT.  */
234*53ee8cc1Swenshuai.xi extern size_t wcsspn (__const wchar_t *__wcs, __const wchar_t *__accept)
235*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
236*53ee8cc1Swenshuai.xi /* Find the first occurrence in WCS of any character in ACCEPT.  */
237*53ee8cc1Swenshuai.xi extern wchar_t *wcspbrk (__const wchar_t *__wcs, __const wchar_t *__accept)
238*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
239*53ee8cc1Swenshuai.xi /* Find the first occurrence of NEEDLE in HAYSTACK.  */
240*53ee8cc1Swenshuai.xi extern wchar_t *wcsstr (__const wchar_t *__haystack, __const wchar_t *__needle)
241*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
242*53ee8cc1Swenshuai.xi 
243*53ee8cc1Swenshuai.xi /* Divide WCS into tokens separated by characters in DELIM.  */
244*53ee8cc1Swenshuai.xi extern wchar_t *wcstok (wchar_t *__restrict __s,
245*53ee8cc1Swenshuai.xi 			__const wchar_t *__restrict __delim,
246*53ee8cc1Swenshuai.xi 			wchar_t **__restrict __ptr) __THROW;
247*53ee8cc1Swenshuai.xi 
248*53ee8cc1Swenshuai.xi /* Return the number of wide characters in S.  */
249*53ee8cc1Swenshuai.xi extern size_t wcslen (__const wchar_t *__s) __THROW __attribute_pure__;
250*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
251*53ee8cc1Swenshuai.xi 
252*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN
253*53ee8cc1Swenshuai.xi /* Another name for `wcsstr' from XPG4.  */
254*53ee8cc1Swenshuai.xi extern wchar_t *wcswcs (__const wchar_t *__haystack, __const wchar_t *__needle)
255*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
256*53ee8cc1Swenshuai.xi #endif
257*53ee8cc1Swenshuai.xi 
258*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
259*53ee8cc1Swenshuai.xi /* Return the number of wide characters in S, but at most MAXLEN.  */
260*53ee8cc1Swenshuai.xi extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen)
261*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
262*53ee8cc1Swenshuai.xi #endif
263*53ee8cc1Swenshuai.xi 
264*53ee8cc1Swenshuai.xi 
265*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
266*53ee8cc1Swenshuai.xi /* Search N wide characters of S for C.  */
267*53ee8cc1Swenshuai.xi extern wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c, size_t __n)
268*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
269*53ee8cc1Swenshuai.xi 
270*53ee8cc1Swenshuai.xi /* Compare N wide characters of S1 and S2.  */
271*53ee8cc1Swenshuai.xi extern int wmemcmp (__const wchar_t *__restrict __s1,
272*53ee8cc1Swenshuai.xi 		    __const wchar_t *__restrict __s2, size_t __n)
273*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__;
274*53ee8cc1Swenshuai.xi 
275*53ee8cc1Swenshuai.xi /* Copy N wide characters of SRC to DEST.  */
276*53ee8cc1Swenshuai.xi extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
277*53ee8cc1Swenshuai.xi 			 __const wchar_t *__restrict __s2, size_t __n) __THROW;
278*53ee8cc1Swenshuai.xi 
279*53ee8cc1Swenshuai.xi /* Copy N wide characters of SRC to DEST, guaranteeing
280*53ee8cc1Swenshuai.xi    correct behavior for overlapping strings.  */
281*53ee8cc1Swenshuai.xi extern wchar_t *wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n)
282*53ee8cc1Swenshuai.xi      __THROW;
283*53ee8cc1Swenshuai.xi 
284*53ee8cc1Swenshuai.xi /* Set N wide characters of S to C.  */
285*53ee8cc1Swenshuai.xi extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) __THROW;
286*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
287*53ee8cc1Swenshuai.xi 
288*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
289*53ee8cc1Swenshuai.xi /* Copy N wide characters of SRC to DEST and return pointer to following
290*53ee8cc1Swenshuai.xi    wide character.  */
291*53ee8cc1Swenshuai.xi extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
292*53ee8cc1Swenshuai.xi 			  __const wchar_t *__restrict __s2, size_t __n)
293*53ee8cc1Swenshuai.xi      __THROW;
294*53ee8cc1Swenshuai.xi #endif
295*53ee8cc1Swenshuai.xi 
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
298*53ee8cc1Swenshuai.xi /* Determine whether C constitutes a valid (one-byte) multibyte
299*53ee8cc1Swenshuai.xi    character.  */
300*53ee8cc1Swenshuai.xi extern wint_t btowc (int __c) __THROW;
301*53ee8cc1Swenshuai.xi 
302*53ee8cc1Swenshuai.xi /* Determine whether C corresponds to a member of the extended
303*53ee8cc1Swenshuai.xi    character set whose multibyte representation is a single byte.  */
304*53ee8cc1Swenshuai.xi extern int wctob (wint_t __c) __THROW;
305*53ee8cc1Swenshuai.xi 
306*53ee8cc1Swenshuai.xi /* Determine whether PS points to an object representing the initial
307*53ee8cc1Swenshuai.xi    state.  */
308*53ee8cc1Swenshuai.xi extern int mbsinit (__const mbstate_t *__ps) __THROW __attribute_pure__;
309*53ee8cc1Swenshuai.xi 
310*53ee8cc1Swenshuai.xi /* Write wide character representation of multibyte character pointed
311*53ee8cc1Swenshuai.xi    to by S to PWC.  */
312*53ee8cc1Swenshuai.xi extern size_t mbrtowc (wchar_t *__restrict __pwc,
313*53ee8cc1Swenshuai.xi 		       __const char *__restrict __s, size_t __n,
314*53ee8cc1Swenshuai.xi 		       mbstate_t *__p) __THROW;
315*53ee8cc1Swenshuai.xi 
316*53ee8cc1Swenshuai.xi /* Write multibyte representation of wide character WC to S.  */
317*53ee8cc1Swenshuai.xi extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
318*53ee8cc1Swenshuai.xi 		       mbstate_t *__restrict __ps) __THROW;
319*53ee8cc1Swenshuai.xi 
320*53ee8cc1Swenshuai.xi /* Return number of bytes in multibyte character pointed to by S.  */
321*53ee8cc1Swenshuai.xi extern size_t __mbrlen (__const char *__restrict __s, size_t __n,
322*53ee8cc1Swenshuai.xi 			mbstate_t *__restrict __ps) __THROW;
323*53ee8cc1Swenshuai.xi extern size_t mbrlen (__const char *__restrict __s, size_t __n,
324*53ee8cc1Swenshuai.xi 		      mbstate_t *__restrict __ps) __THROW;
325*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
326*53ee8cc1Swenshuai.xi 
327*53ee8cc1Swenshuai.xi #ifdef __USE_EXTERN_INLINES
328*53ee8cc1Swenshuai.xi /* Define inline function as optimization.  */
329*53ee8cc1Swenshuai.xi 
330*53ee8cc1Swenshuai.xi /* We can use the BTOWC and WCTOB optimizations since we know that all
331*53ee8cc1Swenshuai.xi    locales must use ASCII encoding for the values in the ASCII range
332*53ee8cc1Swenshuai.xi    and because the wchar_t encoding is always ISO 10646.  */
333*53ee8cc1Swenshuai.xi extern wint_t __btowc_alias (int __c) __asm ("btowc");
334*53ee8cc1Swenshuai.xi __extern_inline wint_t
__NTH(btowc (int __c))335*53ee8cc1Swenshuai.xi __NTH (btowc (int __c))
336*53ee8cc1Swenshuai.xi { return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f'
337*53ee8cc1Swenshuai.xi 	  ? (wint_t) __c : __btowc_alias (__c)); }
338*53ee8cc1Swenshuai.xi 
339*53ee8cc1Swenshuai.xi extern int __wctob_alias (wint_t __c) __asm ("wctob");
340*53ee8cc1Swenshuai.xi __extern_inline int
__NTH(wctob (wint_t __wc))341*53ee8cc1Swenshuai.xi __NTH (wctob (wint_t __wc))
342*53ee8cc1Swenshuai.xi { return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f'
343*53ee8cc1Swenshuai.xi 	  ? (int) __wc : __wctob_alias (__wc)); }
344*53ee8cc1Swenshuai.xi 
345*53ee8cc1Swenshuai.xi __extern_inline size_t
__NTH(mbrlen (__const char * __restrict __s,size_t __n,mbstate_t * __restrict __ps))346*53ee8cc1Swenshuai.xi __NTH (mbrlen (__const char *__restrict __s, size_t __n,
347*53ee8cc1Swenshuai.xi 	       mbstate_t *__restrict __ps))
348*53ee8cc1Swenshuai.xi { return (__ps != NULL
349*53ee8cc1Swenshuai.xi 	  ? mbrtowc (NULL, __s, __n, __ps) : __mbrlen (__s, __n, NULL)); }
350*53ee8cc1Swenshuai.xi #endif
351*53ee8cc1Swenshuai.xi 
352*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
353*53ee8cc1Swenshuai.xi /* Write wide character representation of multibyte character string
354*53ee8cc1Swenshuai.xi    SRC to DST.  */
355*53ee8cc1Swenshuai.xi extern size_t mbsrtowcs (wchar_t *__restrict __dst,
356*53ee8cc1Swenshuai.xi 			 __const char **__restrict __src, size_t __len,
357*53ee8cc1Swenshuai.xi 			 mbstate_t *__restrict __ps) __THROW;
358*53ee8cc1Swenshuai.xi 
359*53ee8cc1Swenshuai.xi /* Write multibyte character representation of wide character string
360*53ee8cc1Swenshuai.xi    SRC to DST.  */
361*53ee8cc1Swenshuai.xi extern size_t wcsrtombs (char *__restrict __dst,
362*53ee8cc1Swenshuai.xi 			 __const wchar_t **__restrict __src, size_t __len,
363*53ee8cc1Swenshuai.xi 			 mbstate_t *__restrict __ps) __THROW;
364*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
365*53ee8cc1Swenshuai.xi 
366*53ee8cc1Swenshuai.xi 
367*53ee8cc1Swenshuai.xi #ifdef	__USE_GNU
368*53ee8cc1Swenshuai.xi /* Write wide character representation of at most NMC bytes of the
369*53ee8cc1Swenshuai.xi    multibyte character string SRC to DST.  */
370*53ee8cc1Swenshuai.xi extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
371*53ee8cc1Swenshuai.xi 			  __const char **__restrict __src, size_t __nmc,
372*53ee8cc1Swenshuai.xi 			  size_t __len, mbstate_t *__restrict __ps) __THROW;
373*53ee8cc1Swenshuai.xi 
374*53ee8cc1Swenshuai.xi /* Write multibyte character representation of at most NWC characters
375*53ee8cc1Swenshuai.xi    from the wide character string SRC to DST.  */
376*53ee8cc1Swenshuai.xi extern size_t wcsnrtombs (char *__restrict __dst,
377*53ee8cc1Swenshuai.xi 			  __const wchar_t **__restrict __src,
378*53ee8cc1Swenshuai.xi 			  size_t __nwc, size_t __len,
379*53ee8cc1Swenshuai.xi 			  mbstate_t *__restrict __ps) __THROW;
380*53ee8cc1Swenshuai.xi #endif	/* use GNU */
381*53ee8cc1Swenshuai.xi 
382*53ee8cc1Swenshuai.xi 
383*53ee8cc1Swenshuai.xi /* The following functions are extensions found in X/Open CAE.  */
384*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN
385*53ee8cc1Swenshuai.xi /* Determine number of column positions required for C.  */
386*53ee8cc1Swenshuai.xi extern int wcwidth (wchar_t __c) __THROW;
387*53ee8cc1Swenshuai.xi 
388*53ee8cc1Swenshuai.xi /* Determine number of column positions required for first N wide
389*53ee8cc1Swenshuai.xi    characters (or fewer if S ends before this) in S.  */
390*53ee8cc1Swenshuai.xi extern int wcswidth (__const wchar_t *__s, size_t __n) __THROW;
391*53ee8cc1Swenshuai.xi #endif	/* Use X/Open.  */
392*53ee8cc1Swenshuai.xi 
393*53ee8cc1Swenshuai.xi 
394*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
395*53ee8cc1Swenshuai.xi /* Convert initial portion of the wide string NPTR to `double'
396*53ee8cc1Swenshuai.xi    representation.  */
397*53ee8cc1Swenshuai.xi extern double wcstod (__const wchar_t *__restrict __nptr,
398*53ee8cc1Swenshuai.xi 		      wchar_t **__restrict __endptr) __THROW;
399*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
400*53ee8cc1Swenshuai.xi 
401*53ee8cc1Swenshuai.xi #ifdef __USE_ISOC99
402*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
403*53ee8cc1Swenshuai.xi /* Likewise for `float' and `long double' sizes of floating-point numbers.  */
404*53ee8cc1Swenshuai.xi extern float wcstof (__const wchar_t *__restrict __nptr,
405*53ee8cc1Swenshuai.xi 		     wchar_t **__restrict __endptr) __THROW;
406*53ee8cc1Swenshuai.xi extern long double wcstold (__const wchar_t *__restrict __nptr,
407*53ee8cc1Swenshuai.xi 			    wchar_t **__restrict __endptr) __THROW;
408*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
409*53ee8cc1Swenshuai.xi #endif /* C99 */
410*53ee8cc1Swenshuai.xi 
411*53ee8cc1Swenshuai.xi 
412*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
413*53ee8cc1Swenshuai.xi /* Convert initial portion of wide string NPTR to `long int'
414*53ee8cc1Swenshuai.xi    representation.  */
415*53ee8cc1Swenshuai.xi extern long int wcstol (__const wchar_t *__restrict __nptr,
416*53ee8cc1Swenshuai.xi 			wchar_t **__restrict __endptr, int __base) __THROW;
417*53ee8cc1Swenshuai.xi 
418*53ee8cc1Swenshuai.xi /* Convert initial portion of wide string NPTR to `unsigned long int'
419*53ee8cc1Swenshuai.xi    representation.  */
420*53ee8cc1Swenshuai.xi extern unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
421*53ee8cc1Swenshuai.xi 				  wchar_t **__restrict __endptr, int __base)
422*53ee8cc1Swenshuai.xi      __THROW;
423*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
424*53ee8cc1Swenshuai.xi 
425*53ee8cc1Swenshuai.xi #if defined __USE_ISOC99 || (defined __GNUC__ && defined __USE_GNU)
426*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
427*53ee8cc1Swenshuai.xi /* Convert initial portion of wide string NPTR to `long long int'
428*53ee8cc1Swenshuai.xi    representation.  */
429*53ee8cc1Swenshuai.xi __extension__
430*53ee8cc1Swenshuai.xi extern long long int wcstoll (__const wchar_t *__restrict __nptr,
431*53ee8cc1Swenshuai.xi 			      wchar_t **__restrict __endptr, int __base)
432*53ee8cc1Swenshuai.xi      __THROW;
433*53ee8cc1Swenshuai.xi 
434*53ee8cc1Swenshuai.xi /* Convert initial portion of wide string NPTR to `unsigned long long int'
435*53ee8cc1Swenshuai.xi    representation.  */
436*53ee8cc1Swenshuai.xi __extension__
437*53ee8cc1Swenshuai.xi extern unsigned long long int wcstoull (__const wchar_t *__restrict __nptr,
438*53ee8cc1Swenshuai.xi 					wchar_t **__restrict __endptr,
439*53ee8cc1Swenshuai.xi 					int __base) __THROW;
440*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
441*53ee8cc1Swenshuai.xi #endif /* ISO C99 or GCC and GNU.  */
442*53ee8cc1Swenshuai.xi 
443*53ee8cc1Swenshuai.xi #if defined __GNUC__ && defined __USE_GNU
444*53ee8cc1Swenshuai.xi /* Convert initial portion of wide string NPTR to `long long int'
445*53ee8cc1Swenshuai.xi    representation.  */
446*53ee8cc1Swenshuai.xi __extension__
447*53ee8cc1Swenshuai.xi extern long long int wcstoq (__const wchar_t *__restrict __nptr,
448*53ee8cc1Swenshuai.xi 			     wchar_t **__restrict __endptr, int __base)
449*53ee8cc1Swenshuai.xi      __THROW;
450*53ee8cc1Swenshuai.xi 
451*53ee8cc1Swenshuai.xi /* Convert initial portion of wide string NPTR to `unsigned long long int'
452*53ee8cc1Swenshuai.xi    representation.  */
453*53ee8cc1Swenshuai.xi __extension__
454*53ee8cc1Swenshuai.xi extern unsigned long long int wcstouq (__const wchar_t *__restrict __nptr,
455*53ee8cc1Swenshuai.xi 				       wchar_t **__restrict __endptr,
456*53ee8cc1Swenshuai.xi 				       int __base) __THROW;
457*53ee8cc1Swenshuai.xi #endif /* GCC and use GNU.  */
458*53ee8cc1Swenshuai.xi 
459*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
460*53ee8cc1Swenshuai.xi /* The concept of one static locale per category is not very well
461*53ee8cc1Swenshuai.xi    thought out.  Many applications will need to process its data using
462*53ee8cc1Swenshuai.xi    information from several different locales.  Another application is
463*53ee8cc1Swenshuai.xi    the implementation of the internationalization handling in the
464*53ee8cc1Swenshuai.xi    upcoming ISO C++ standard library.  To support this another set of
465*53ee8cc1Swenshuai.xi    the functions using locale data exist which have an additional
466*53ee8cc1Swenshuai.xi    argument.
467*53ee8cc1Swenshuai.xi 
468*53ee8cc1Swenshuai.xi    Attention: all these functions are *not* standardized in any form.
469*53ee8cc1Swenshuai.xi    This is a proof-of-concept implementation.  */
470*53ee8cc1Swenshuai.xi 
471*53ee8cc1Swenshuai.xi /* Structure for reentrant locale using functions.  This is an
472*53ee8cc1Swenshuai.xi    (almost) opaque type for the user level programs.  */
473*53ee8cc1Swenshuai.xi # include <xlocale.h>
474*53ee8cc1Swenshuai.xi 
475*53ee8cc1Swenshuai.xi /* Special versions of the functions above which take the locale to
476*53ee8cc1Swenshuai.xi    use as an additional parameter.  */
477*53ee8cc1Swenshuai.xi extern long int wcstol_l (__const wchar_t *__restrict __nptr,
478*53ee8cc1Swenshuai.xi 			  wchar_t **__restrict __endptr, int __base,
479*53ee8cc1Swenshuai.xi 			  __locale_t __loc) __THROW;
480*53ee8cc1Swenshuai.xi 
481*53ee8cc1Swenshuai.xi extern unsigned long int wcstoul_l (__const wchar_t *__restrict __nptr,
482*53ee8cc1Swenshuai.xi 				    wchar_t **__restrict __endptr,
483*53ee8cc1Swenshuai.xi 				    int __base, __locale_t __loc) __THROW;
484*53ee8cc1Swenshuai.xi 
485*53ee8cc1Swenshuai.xi __extension__
486*53ee8cc1Swenshuai.xi extern long long int wcstoll_l (__const wchar_t *__restrict __nptr,
487*53ee8cc1Swenshuai.xi 				wchar_t **__restrict __endptr,
488*53ee8cc1Swenshuai.xi 				int __base, __locale_t __loc) __THROW;
489*53ee8cc1Swenshuai.xi 
490*53ee8cc1Swenshuai.xi __extension__
491*53ee8cc1Swenshuai.xi extern unsigned long long int wcstoull_l (__const wchar_t *__restrict __nptr,
492*53ee8cc1Swenshuai.xi 					  wchar_t **__restrict __endptr,
493*53ee8cc1Swenshuai.xi 					  int __base, __locale_t __loc)
494*53ee8cc1Swenshuai.xi      __THROW;
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi extern double wcstod_l (__const wchar_t *__restrict __nptr,
497*53ee8cc1Swenshuai.xi 			wchar_t **__restrict __endptr, __locale_t __loc)
498*53ee8cc1Swenshuai.xi      __THROW;
499*53ee8cc1Swenshuai.xi 
500*53ee8cc1Swenshuai.xi extern float wcstof_l (__const wchar_t *__restrict __nptr,
501*53ee8cc1Swenshuai.xi 		       wchar_t **__restrict __endptr, __locale_t __loc)
502*53ee8cc1Swenshuai.xi      __THROW;
503*53ee8cc1Swenshuai.xi 
504*53ee8cc1Swenshuai.xi extern long double wcstold_l (__const wchar_t *__restrict __nptr,
505*53ee8cc1Swenshuai.xi 			      wchar_t **__restrict __endptr,
506*53ee8cc1Swenshuai.xi 			      __locale_t __loc) __THROW;
507*53ee8cc1Swenshuai.xi #endif /* GNU */
508*53ee8cc1Swenshuai.xi 
509*53ee8cc1Swenshuai.xi 
510*53ee8cc1Swenshuai.xi #ifdef	__USE_GNU
511*53ee8cc1Swenshuai.xi /* Copy SRC to DEST, returning the address of the terminating L'\0' in
512*53ee8cc1Swenshuai.xi    DEST.  */
513*53ee8cc1Swenshuai.xi extern wchar_t *wcpcpy (wchar_t *__dest, __const wchar_t *__src) __THROW;
514*53ee8cc1Swenshuai.xi 
515*53ee8cc1Swenshuai.xi /* Copy no more than N characters of SRC to DEST, returning the address of
516*53ee8cc1Swenshuai.xi    the last character written into DEST.  */
517*53ee8cc1Swenshuai.xi extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
518*53ee8cc1Swenshuai.xi      __THROW;
519*53ee8cc1Swenshuai.xi #endif	/* use GNU */
520*53ee8cc1Swenshuai.xi 
521*53ee8cc1Swenshuai.xi 
522*53ee8cc1Swenshuai.xi /* Wide character I/O functions.  */
523*53ee8cc1Swenshuai.xi 
524*53ee8cc1Swenshuai.xi #ifdef	__USE_GNU
525*53ee8cc1Swenshuai.xi /* Like OPEN_MEMSTREAM, but the stream is wide oriented and produces
526*53ee8cc1Swenshuai.xi    a wide character string.  */
527*53ee8cc1Swenshuai.xi extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) __THROW;
528*53ee8cc1Swenshuai.xi #endif
529*53ee8cc1Swenshuai.xi 
530*53ee8cc1Swenshuai.xi #if defined __USE_ISOC95 || defined __USE_UNIX98
531*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi /* Select orientation for stream.  */
534*53ee8cc1Swenshuai.xi extern int fwide (__FILE *__fp, int __mode) __THROW;
535*53ee8cc1Swenshuai.xi 
536*53ee8cc1Swenshuai.xi 
537*53ee8cc1Swenshuai.xi /* Write formatted output to STREAM.
538*53ee8cc1Swenshuai.xi 
539*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
540*53ee8cc1Swenshuai.xi    marked with __THROW.  */
541*53ee8cc1Swenshuai.xi extern int fwprintf (__FILE *__restrict __stream,
542*53ee8cc1Swenshuai.xi 		     __const wchar_t *__restrict __format, ...)
543*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
544*53ee8cc1Swenshuai.xi /* Write formatted output to stdout.
545*53ee8cc1Swenshuai.xi 
546*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
547*53ee8cc1Swenshuai.xi    marked with __THROW.  */
548*53ee8cc1Swenshuai.xi extern int wprintf (__const wchar_t *__restrict __format, ...)
549*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wprintf__, 1, 2))) */;
550*53ee8cc1Swenshuai.xi /* Write formatted output of at most N characters to S.  */
551*53ee8cc1Swenshuai.xi extern int swprintf (wchar_t *__restrict __s, size_t __n,
552*53ee8cc1Swenshuai.xi 		     __const wchar_t *__restrict __format, ...)
553*53ee8cc1Swenshuai.xi      __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */;
554*53ee8cc1Swenshuai.xi 
555*53ee8cc1Swenshuai.xi /* Write formatted output to S from argument list ARG.
556*53ee8cc1Swenshuai.xi 
557*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
558*53ee8cc1Swenshuai.xi    marked with __THROW.  */
559*53ee8cc1Swenshuai.xi extern int vfwprintf (__FILE *__restrict __s,
560*53ee8cc1Swenshuai.xi 		      __const wchar_t *__restrict __format,
561*53ee8cc1Swenshuai.xi 		      __gnuc_va_list __arg)
562*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
563*53ee8cc1Swenshuai.xi /* Write formatted output to stdout from argument list ARG.
564*53ee8cc1Swenshuai.xi 
565*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
566*53ee8cc1Swenshuai.xi    marked with __THROW.  */
567*53ee8cc1Swenshuai.xi extern int vwprintf (__const wchar_t *__restrict __format,
568*53ee8cc1Swenshuai.xi 		     __gnuc_va_list __arg)
569*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wprintf__, 1, 0))) */;
570*53ee8cc1Swenshuai.xi /* Write formatted output of at most N character to S from argument
571*53ee8cc1Swenshuai.xi    list ARG.  */
572*53ee8cc1Swenshuai.xi extern int vswprintf (wchar_t *__restrict __s, size_t __n,
573*53ee8cc1Swenshuai.xi 		      __const wchar_t *__restrict __format,
574*53ee8cc1Swenshuai.xi 		      __gnuc_va_list __arg)
575*53ee8cc1Swenshuai.xi      __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
576*53ee8cc1Swenshuai.xi 
577*53ee8cc1Swenshuai.xi 
578*53ee8cc1Swenshuai.xi /* Read formatted input from STREAM.
579*53ee8cc1Swenshuai.xi 
580*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
581*53ee8cc1Swenshuai.xi    marked with __THROW.  */
582*53ee8cc1Swenshuai.xi extern int fwscanf (__FILE *__restrict __stream,
583*53ee8cc1Swenshuai.xi 		    __const wchar_t *__restrict __format, ...)
584*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
585*53ee8cc1Swenshuai.xi /* Read formatted input from stdin.
586*53ee8cc1Swenshuai.xi 
587*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
588*53ee8cc1Swenshuai.xi    marked with __THROW.  */
589*53ee8cc1Swenshuai.xi extern int wscanf (__const wchar_t *__restrict __format, ...)
590*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
591*53ee8cc1Swenshuai.xi /* Read formatted input from S.  */
592*53ee8cc1Swenshuai.xi extern int swscanf (__const wchar_t *__restrict __s,
593*53ee8cc1Swenshuai.xi 		    __const wchar_t *__restrict __format, ...)
594*53ee8cc1Swenshuai.xi      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
595*53ee8cc1Swenshuai.xi 
596*53ee8cc1Swenshuai.xi # if defined __USE_ISOC99 && !defined __USE_GNU \
597*53ee8cc1Swenshuai.xi      && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
598*53ee8cc1Swenshuai.xi      && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
599*53ee8cc1Swenshuai.xi #  ifdef __REDIRECT
600*53ee8cc1Swenshuai.xi /* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[
601*53ee8cc1Swenshuai.xi    GNU extension which conflicts with valid %a followed by letter
602*53ee8cc1Swenshuai.xi    s, S or [.  */
603*53ee8cc1Swenshuai.xi extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream,
604*53ee8cc1Swenshuai.xi 				 __const wchar_t *__restrict __format, ...),
605*53ee8cc1Swenshuai.xi 		       __isoc99_fwscanf)
606*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
607*53ee8cc1Swenshuai.xi extern int __REDIRECT (wscanf, (__const wchar_t *__restrict __format, ...),
608*53ee8cc1Swenshuai.xi 		       __isoc99_wscanf)
609*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
610*53ee8cc1Swenshuai.xi extern int __REDIRECT (swscanf, (__const wchar_t *__restrict __s,
611*53ee8cc1Swenshuai.xi 				 __const wchar_t *__restrict __format, ...),
612*53ee8cc1Swenshuai.xi 		       __isoc99_swscanf)
613*53ee8cc1Swenshuai.xi      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
614*53ee8cc1Swenshuai.xi #  else
615*53ee8cc1Swenshuai.xi extern int __isoc99_fwscanf (__FILE *__restrict __stream,
616*53ee8cc1Swenshuai.xi 			     __const wchar_t *__restrict __format, ...);
617*53ee8cc1Swenshuai.xi extern int __isoc99_wscanf (__const wchar_t *__restrict __format, ...);
618*53ee8cc1Swenshuai.xi extern int __isoc99_swscanf (__const wchar_t *__restrict __s,
619*53ee8cc1Swenshuai.xi 			     __const wchar_t *__restrict __format, ...)
620*53ee8cc1Swenshuai.xi      __THROW;
621*53ee8cc1Swenshuai.xi #   define fwscanf __isoc99_fwscanf
622*53ee8cc1Swenshuai.xi #   define wscanf __isoc99_wscanf
623*53ee8cc1Swenshuai.xi #   define swscanf __isoc99_swscanf
624*53ee8cc1Swenshuai.xi #  endif
625*53ee8cc1Swenshuai.xi # endif
626*53ee8cc1Swenshuai.xi 
627*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
628*53ee8cc1Swenshuai.xi #endif /* Use ISO C95, C99 and Unix98. */
629*53ee8cc1Swenshuai.xi 
630*53ee8cc1Swenshuai.xi #ifdef __USE_ISOC99
631*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
632*53ee8cc1Swenshuai.xi /* Read formatted input from S into argument list ARG.
633*53ee8cc1Swenshuai.xi 
634*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
635*53ee8cc1Swenshuai.xi    marked with __THROW.  */
636*53ee8cc1Swenshuai.xi extern int vfwscanf (__FILE *__restrict __s,
637*53ee8cc1Swenshuai.xi 		     __const wchar_t *__restrict __format,
638*53ee8cc1Swenshuai.xi 		     __gnuc_va_list __arg)
639*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
640*53ee8cc1Swenshuai.xi /* Read formatted input from stdin into argument list ARG.
641*53ee8cc1Swenshuai.xi 
642*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
643*53ee8cc1Swenshuai.xi    marked with __THROW.  */
644*53ee8cc1Swenshuai.xi extern int vwscanf (__const wchar_t *__restrict __format,
645*53ee8cc1Swenshuai.xi 		    __gnuc_va_list __arg)
646*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
647*53ee8cc1Swenshuai.xi /* Read formatted input from S into argument list ARG.  */
648*53ee8cc1Swenshuai.xi extern int vswscanf (__const wchar_t *__restrict __s,
649*53ee8cc1Swenshuai.xi 		     __const wchar_t *__restrict __format,
650*53ee8cc1Swenshuai.xi 		     __gnuc_va_list __arg)
651*53ee8cc1Swenshuai.xi      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
652*53ee8cc1Swenshuai.xi 
653*53ee8cc1Swenshuai.xi # if !defined __USE_GNU \
654*53ee8cc1Swenshuai.xi      && (!defined __LDBL_COMPAT || !defined __REDIRECT) \
655*53ee8cc1Swenshuai.xi      && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
656*53ee8cc1Swenshuai.xi #  ifdef __REDIRECT
657*53ee8cc1Swenshuai.xi extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s,
658*53ee8cc1Swenshuai.xi 				  __const wchar_t *__restrict __format,
659*53ee8cc1Swenshuai.xi 				  __gnuc_va_list __arg), __isoc99_vfwscanf)
660*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
661*53ee8cc1Swenshuai.xi extern int __REDIRECT (vwscanf, (__const wchar_t *__restrict __format,
662*53ee8cc1Swenshuai.xi 				 __gnuc_va_list __arg), __isoc99_vwscanf)
663*53ee8cc1Swenshuai.xi      /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
664*53ee8cc1Swenshuai.xi extern int __REDIRECT (vswscanf, (__const wchar_t *__restrict __s,
665*53ee8cc1Swenshuai.xi 				  __const wchar_t *__restrict __format,
666*53ee8cc1Swenshuai.xi 				  __gnuc_va_list __arg), __isoc99_vswscanf)
667*53ee8cc1Swenshuai.xi      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
668*53ee8cc1Swenshuai.xi #  else
669*53ee8cc1Swenshuai.xi extern int __isoc99_vfwscanf (__FILE *__restrict __s,
670*53ee8cc1Swenshuai.xi 			      __const wchar_t *__restrict __format,
671*53ee8cc1Swenshuai.xi 			      __gnuc_va_list __arg);
672*53ee8cc1Swenshuai.xi extern int __isoc99_vwscanf (__const wchar_t *__restrict __format,
673*53ee8cc1Swenshuai.xi 			     __gnuc_va_list __arg);
674*53ee8cc1Swenshuai.xi extern int __isoc99_vswscanf (__const wchar_t *__restrict __s,
675*53ee8cc1Swenshuai.xi 			      __const wchar_t *__restrict __format,
676*53ee8cc1Swenshuai.xi 			      __gnuc_va_list __arg) __THROW;
677*53ee8cc1Swenshuai.xi #   define vfwscanf __isoc99_vfwscanf
678*53ee8cc1Swenshuai.xi #   define vwscanf __isoc99_vwscanf
679*53ee8cc1Swenshuai.xi #   define vswscanf __isoc99_vswscanf
680*53ee8cc1Swenshuai.xi #  endif
681*53ee8cc1Swenshuai.xi # endif
682*53ee8cc1Swenshuai.xi 
683*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
684*53ee8cc1Swenshuai.xi #endif /* Use ISO C99. */
685*53ee8cc1Swenshuai.xi 
686*53ee8cc1Swenshuai.xi 
687*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
688*53ee8cc1Swenshuai.xi /* Read a character from STREAM.
689*53ee8cc1Swenshuai.xi 
690*53ee8cc1Swenshuai.xi    These functions are possible cancellation points and therefore not
691*53ee8cc1Swenshuai.xi    marked with __THROW.  */
692*53ee8cc1Swenshuai.xi extern wint_t fgetwc (__FILE *__stream);
693*53ee8cc1Swenshuai.xi extern wint_t getwc (__FILE *__stream);
694*53ee8cc1Swenshuai.xi 
695*53ee8cc1Swenshuai.xi /* Read a character from stdin.
696*53ee8cc1Swenshuai.xi 
697*53ee8cc1Swenshuai.xi    This function is a possible cancellation point and therefore not
698*53ee8cc1Swenshuai.xi    marked with __THROW.  */
699*53ee8cc1Swenshuai.xi extern wint_t getwchar (void);
700*53ee8cc1Swenshuai.xi 
701*53ee8cc1Swenshuai.xi 
702*53ee8cc1Swenshuai.xi /* Write a character to STREAM.
703*53ee8cc1Swenshuai.xi 
704*53ee8cc1Swenshuai.xi    These functions are possible cancellation points and therefore not
705*53ee8cc1Swenshuai.xi    marked with __THROW.  */
706*53ee8cc1Swenshuai.xi extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
707*53ee8cc1Swenshuai.xi extern wint_t putwc (wchar_t __wc, __FILE *__stream);
708*53ee8cc1Swenshuai.xi 
709*53ee8cc1Swenshuai.xi /* Write a character to stdout.
710*53ee8cc1Swenshuai.xi 
711*53ee8cc1Swenshuai.xi    This function is a possible cancellation points and therefore not
712*53ee8cc1Swenshuai.xi    marked with __THROW.  */
713*53ee8cc1Swenshuai.xi extern wint_t putwchar (wchar_t __wc);
714*53ee8cc1Swenshuai.xi 
715*53ee8cc1Swenshuai.xi 
716*53ee8cc1Swenshuai.xi /* Get a newline-terminated wide character string of finite length
717*53ee8cc1Swenshuai.xi    from STREAM.
718*53ee8cc1Swenshuai.xi 
719*53ee8cc1Swenshuai.xi    This function is a possible cancellation points and therefore not
720*53ee8cc1Swenshuai.xi    marked with __THROW.  */
721*53ee8cc1Swenshuai.xi extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
722*53ee8cc1Swenshuai.xi 			__FILE *__restrict __stream);
723*53ee8cc1Swenshuai.xi 
724*53ee8cc1Swenshuai.xi /* Write a string to STREAM.
725*53ee8cc1Swenshuai.xi 
726*53ee8cc1Swenshuai.xi    This function is a possible cancellation points and therefore not
727*53ee8cc1Swenshuai.xi    marked with __THROW.  */
728*53ee8cc1Swenshuai.xi extern int fputws (__const wchar_t *__restrict __ws,
729*53ee8cc1Swenshuai.xi 		   __FILE *__restrict __stream);
730*53ee8cc1Swenshuai.xi 
731*53ee8cc1Swenshuai.xi 
732*53ee8cc1Swenshuai.xi /* Push a character back onto the input buffer of STREAM.
733*53ee8cc1Swenshuai.xi 
734*53ee8cc1Swenshuai.xi    This function is a possible cancellation points and therefore not
735*53ee8cc1Swenshuai.xi    marked with __THROW.  */
736*53ee8cc1Swenshuai.xi extern wint_t ungetwc (wint_t __wc, __FILE *__stream);
737*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
738*53ee8cc1Swenshuai.xi 
739*53ee8cc1Swenshuai.xi 
740*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
741*53ee8cc1Swenshuai.xi /* These are defined to be equivalent to the `char' functions defined
742*53ee8cc1Swenshuai.xi    in POSIX.1:1996.
743*53ee8cc1Swenshuai.xi 
744*53ee8cc1Swenshuai.xi    These functions are not part of POSIX and therefore no official
745*53ee8cc1Swenshuai.xi    cancellation point.  But due to similarity with an POSIX interface
746*53ee8cc1Swenshuai.xi    or due to the implementation they are cancellation points and
747*53ee8cc1Swenshuai.xi    therefore not marked with __THROW.  */
748*53ee8cc1Swenshuai.xi extern wint_t getwc_unlocked (__FILE *__stream);
749*53ee8cc1Swenshuai.xi extern wint_t getwchar_unlocked (void);
750*53ee8cc1Swenshuai.xi 
751*53ee8cc1Swenshuai.xi /* This is the wide character version of a GNU extension.
752*53ee8cc1Swenshuai.xi 
753*53ee8cc1Swenshuai.xi    This function is not part of POSIX and therefore no official
754*53ee8cc1Swenshuai.xi    cancellation point.  But due to similarity with an POSIX interface
755*53ee8cc1Swenshuai.xi    or due to the implementation it is a cancellation point and
756*53ee8cc1Swenshuai.xi    therefore not marked with __THROW.  */
757*53ee8cc1Swenshuai.xi extern wint_t fgetwc_unlocked (__FILE *__stream);
758*53ee8cc1Swenshuai.xi 
759*53ee8cc1Swenshuai.xi /* Faster version when locking is not necessary.
760*53ee8cc1Swenshuai.xi 
761*53ee8cc1Swenshuai.xi    This function is not part of POSIX and therefore no official
762*53ee8cc1Swenshuai.xi    cancellation point.  But due to similarity with an POSIX interface
763*53ee8cc1Swenshuai.xi    or due to the implementation it is a cancellation point and
764*53ee8cc1Swenshuai.xi    therefore not marked with __THROW.  */
765*53ee8cc1Swenshuai.xi extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);
766*53ee8cc1Swenshuai.xi 
767*53ee8cc1Swenshuai.xi /* These are defined to be equivalent to the `char' functions defined
768*53ee8cc1Swenshuai.xi    in POSIX.1:1996.
769*53ee8cc1Swenshuai.xi 
770*53ee8cc1Swenshuai.xi    These functions are not part of POSIX and therefore no official
771*53ee8cc1Swenshuai.xi    cancellation point.  But due to similarity with an POSIX interface
772*53ee8cc1Swenshuai.xi    or due to the implementation they are cancellation points and
773*53ee8cc1Swenshuai.xi    therefore not marked with __THROW.  */
774*53ee8cc1Swenshuai.xi extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
775*53ee8cc1Swenshuai.xi extern wint_t putwchar_unlocked (wchar_t __wc);
776*53ee8cc1Swenshuai.xi 
777*53ee8cc1Swenshuai.xi 
778*53ee8cc1Swenshuai.xi /* This function does the same as `fgetws' but does not lock the stream.
779*53ee8cc1Swenshuai.xi 
780*53ee8cc1Swenshuai.xi    This function is not part of POSIX and therefore no official
781*53ee8cc1Swenshuai.xi    cancellation point.  But due to similarity with an POSIX interface
782*53ee8cc1Swenshuai.xi    or due to the implementation it is a cancellation point and
783*53ee8cc1Swenshuai.xi    therefore not marked with __THROW.  */
784*53ee8cc1Swenshuai.xi extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
785*53ee8cc1Swenshuai.xi 				 __FILE *__restrict __stream);
786*53ee8cc1Swenshuai.xi 
787*53ee8cc1Swenshuai.xi /* This function does the same as `fputws' but does not lock the stream.
788*53ee8cc1Swenshuai.xi 
789*53ee8cc1Swenshuai.xi    This function is not part of POSIX and therefore no official
790*53ee8cc1Swenshuai.xi    cancellation point.  But due to similarity with an POSIX interface
791*53ee8cc1Swenshuai.xi    or due to the implementation it is a cancellation point and
792*53ee8cc1Swenshuai.xi    therefore not marked with __THROW.  */
793*53ee8cc1Swenshuai.xi extern int fputws_unlocked (__const wchar_t *__restrict __ws,
794*53ee8cc1Swenshuai.xi 			    __FILE *__restrict __stream);
795*53ee8cc1Swenshuai.xi #endif
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi 
798*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
799*53ee8cc1Swenshuai.xi /* Format TP into S according to FORMAT.
800*53ee8cc1Swenshuai.xi    Write no more than MAXSIZE wide characters and return the number
801*53ee8cc1Swenshuai.xi    of wide characters written, or 0 if it would exceed MAXSIZE.  */
802*53ee8cc1Swenshuai.xi extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
803*53ee8cc1Swenshuai.xi 			__const wchar_t *__restrict __format,
804*53ee8cc1Swenshuai.xi 			__const struct tm *__restrict __tp) __THROW;
805*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
806*53ee8cc1Swenshuai.xi 
807*53ee8cc1Swenshuai.xi # ifdef __USE_GNU
808*53ee8cc1Swenshuai.xi # include <xlocale.h>
809*53ee8cc1Swenshuai.xi 
810*53ee8cc1Swenshuai.xi /* Similar to `wcsftime' but takes the information from
811*53ee8cc1Swenshuai.xi    the provided locale and not the global locale.  */
812*53ee8cc1Swenshuai.xi extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
813*53ee8cc1Swenshuai.xi 			  __const wchar_t *__restrict __format,
814*53ee8cc1Swenshuai.xi 			  __const struct tm *__restrict __tp,
815*53ee8cc1Swenshuai.xi 			  __locale_t __loc) __THROW;
816*53ee8cc1Swenshuai.xi # endif
817*53ee8cc1Swenshuai.xi 
818*53ee8cc1Swenshuai.xi /* The X/Open standard demands that most of the functions defined in
819*53ee8cc1Swenshuai.xi    the <wctype.h> header must also appear here.  This is probably
820*53ee8cc1Swenshuai.xi    because some X/Open members wrote their implementation before the
821*53ee8cc1Swenshuai.xi    ISO C standard was published and introduced the better solution.
822*53ee8cc1Swenshuai.xi    We have to provide these definitions for compliance reasons but we
823*53ee8cc1Swenshuai.xi    do this nonsense only if really necessary.  */
824*53ee8cc1Swenshuai.xi #if defined __USE_UNIX98 && !defined __USE_GNU
825*53ee8cc1Swenshuai.xi # define __need_iswxxx
826*53ee8cc1Swenshuai.xi # include <wctype.h>
827*53ee8cc1Swenshuai.xi #endif
828*53ee8cc1Swenshuai.xi 
829*53ee8cc1Swenshuai.xi /* Define some macros helping to catch buffer overflows.  */
830*53ee8cc1Swenshuai.xi #if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
831*53ee8cc1Swenshuai.xi # include <bits/wchar2.h>
832*53ee8cc1Swenshuai.xi #endif
833*53ee8cc1Swenshuai.xi 
834*53ee8cc1Swenshuai.xi #ifdef __LDBL_COMPAT
835*53ee8cc1Swenshuai.xi # include <bits/wchar-ldbl.h>
836*53ee8cc1Swenshuai.xi #endif
837*53ee8cc1Swenshuai.xi 
838*53ee8cc1Swenshuai.xi __END_DECLS
839*53ee8cc1Swenshuai.xi 
840*53ee8cc1Swenshuai.xi #endif	/* _WCHAR_H defined */
841*53ee8cc1Swenshuai.xi 
842*53ee8cc1Swenshuai.xi /* Undefined all __need_* constants in case we are included to get those
843*53ee8cc1Swenshuai.xi    constants but the whole file was already read.  */
844*53ee8cc1Swenshuai.xi #undef __need_mbstate_t
845*53ee8cc1Swenshuai.xi #undef __need_wint_t
846*53ee8cc1Swenshuai.xi 
847*53ee8cc1Swenshuai.xi #endif /* wchar.h  */
848