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