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