d33b0ea76b99fa5ddb6f697b166161311a1e685a
[kopensolaris-gnu/glibc.git] / wcsmbs / wchar.h
1 /* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Library General Public License as
6    published by the Free Software Foundation; either version 2 of the
7    License, or (at your option) any later version.
8
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
12    Library General Public License for more details.
13
14    You should have received a copy of the GNU Library General Public
15    License along with the GNU C Library; see the file COPYING.LIB.  If not,
16    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17    Boston, MA 02111-1307, USA.  */
18
19 /*
20  *      ISO C Standard, Amendment 1, 7.16.4
21  *      General wide-string utilities   <wchar.h>
22  */
23
24 #ifndef _WCHAR_H
25
26 #ifndef __need_mbstate_t
27 # define _WCHAR_H 1
28 # include <features.h>
29 #endif
30
31 #ifdef _WCHAR_H
32 /* Get FILE definition.  */
33 # define __need_FILE
34 # include <stdio.h>
35 /* Get va_list definition.  */
36 # define __need___va_list
37 # include <stdarg.h>
38
39 /* Get size_t, wchar_t, wint_t and NULL from <stddef.h>.  */
40 # define __need_size_t
41 # define __need_wchar_t
42 # define __need_NULL
43 #endif
44 #define __need_wint_t
45 #include <stddef.h>
46
47 /* We try to get wint_t from <stddef.h>, but not all GCC versions define it
48    there.  So define it ourselves if it remains undefined.  */
49 #ifndef _WINT_T
50 /* Integral type unchanged by default argument promotions that can
51    hold any value corresponding to members of the extended character
52    set, as well as at least one value that does not correspond to any
53    member of the extended character set.  */
54 # define _WINT_T
55 typedef unsigned int wint_t;
56 #endif
57
58
59 #ifndef __mbstate_t_defined
60 # define __mbstate_t_defined    1
61 /* Conversion state information.  */
62 typedef struct
63 {
64   int __count;
65   union
66   {
67     wint_t __wch;
68     char __wchb[4];
69   } __value;            /* Value so far.  */
70 } __mbstate_t;
71 #endif
72 #undef __need_mbstate_t
73
74
75 /* The rest of the file is only used if used if __need_mbstate_t is not
76    defined.  */
77 #ifdef _WCHAR_H
78
79 /* Public type.  */
80 typedef __mbstate_t mbstate_t;
81
82 #ifndef WCHAR_MIN
83 /* These constants might also be defined in <inttypes.h>.  */
84 # define WCHAR_MIN (0)
85 # define WCHAR_MAX (0x7fffffff)
86 #endif
87
88 #ifndef WEOF
89 # define WEOF (0xffffffffu)
90 #endif
91
92 /* For XPG4 compliance we have to define the stuff from <wctype.h> here
93    as well.  */
94 #if defined __USE_XOPEN && !defined __USE_UNIX98
95 # include <wctype.h>
96 #endif
97
98 /* This incomplete type is defined in <time.h> but needed here because
99    of `wcsftime'.  */
100 struct tm;
101
102
103 __BEGIN_DECLS
104
105 /* Copy SRC to DEST.  */
106 extern wchar_t *wcscpy (wchar_t *__restrict __dest,
107                         __const wchar_t *__restrict __src) __THROW;
108 /* Copy no more than N wide-characters of SRC to DEST.  */
109 extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
110                          __const wchar_t *__restrict __src, size_t __n)
111      __THROW;
112
113 /* Append SRC onto DEST.  */
114 extern wchar_t *wcscat (wchar_t *__restrict __dest,
115                         __const wchar_t *__restrict __src) __THROW;
116 /* Append no more than N wide-characters of SRC onto DEST.  */
117 extern wchar_t *wcsncat (wchar_t *__restrict __dest,
118                          __const wchar_t *__restrict __src, size_t __n)
119      __THROW;
120
121 /* Compare S1 and S2.  */
122 extern int wcscmp (__const wchar_t *__s1, __const wchar_t *__s2)
123      __THROW __attribute_pure__;
124 /* Compare N wide-characters of S1 and S2.  */
125 extern int wcsncmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)
126      __THROW __attribute_pure__;
127
128 #ifdef __USE_GNU
129 /* Compare S1 and S2, ignoring case.  */
130 extern int wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2) __THROW;
131
132 /* Compare no more than N chars of S1 and S2, ignoring case.  */
133 extern int wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2,
134                         size_t __n) __THROW;
135
136 /* Similar to the two functions above but take the information from
137    the provided locale and not the global locale.  */
138 # include <xlocale.h>
139
140 extern int __wcscasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
141                            __locale_t __loc) __THROW;
142
143 extern int __wcsncasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
144                             size_t __n, __locale_t __loc) __THROW;
145 #endif
146
147 /* Compare S1 and S2, both interpreted as appropriate to the
148    LC_COLLATE category of the current locale.  */
149 extern int wcscoll (__const wchar_t *__s1, __const wchar_t *__s2) __THROW;
150 /* Transform S2 into array pointed to by S1 such that if wcscmp is
151    applied to two transformed strings the result is the as applying
152    `wcscoll' to the original strings.  */
153 extern size_t wcsxfrm (wchar_t *__restrict __s1,
154                        __const wchar_t *__restrict __s2, size_t __n) __THROW;
155
156 #ifdef __USE_GNU
157 /* Similar to the two functions above but take the information from
158    the provided locale and not the global locale.  */
159
160 /* Compare S1 and S2, both interpreted as appropriate to the
161    LC_COLLATE category of the given locale.  */
162 extern int __wcscoll_l (__const wchar_t *__s1, __const wchar_t *__s2,
163                         __locale_t __loc) __THROW;
164 /* Transform S2 into array pointed to by S1 such that if wcscmp is
165    applied to two transformed strings the result is the as applying
166    `wcscoll' to the original strings.  */
167 extern size_t __wcsxfrm_l (wchar_t *__s1, __const wchar_t *__s2,
168                            size_t __n, __locale_t __loc) __THROW;
169
170 /* Duplicate S, returning an identical malloc'd string.  */
171 extern wchar_t *wcsdup (__const wchar_t *__s) __THROW __attribute_malloc__;
172 #endif
173
174 /* Find the first occurrence of WC in WCS.  */
175 extern wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
176      __THROW __attribute_pure__;
177 /* Find the last occurrence of WC in WCS.  */
178 extern wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
179      __THROW __attribute_pure__;
180
181 #ifdef __USE_GNU
182 /* This funciton is similar to `wcschr'.  But it returns a pointer to
183    the closing NUL wide character in case C is not found in S.  */
184 extern wchar_t *wcschrnul (__const wchar_t *__s, wchar_t __wc)
185      __THROW __attribute_pure__;
186 #endif
187
188 /* Return the length of the initial segmet of WCS which
189    consists entirely of wide characters not in REJECT.  */
190 extern size_t wcscspn (__const wchar_t *__wcs, __const wchar_t *__reject)
191      __THROW __attribute_pure__;
192 /* Return the length of the initial segmet of WCS which
193    consists entirely of wide characters in  ACCEPT.  */
194 extern size_t wcsspn (__const wchar_t *__wcs, __const wchar_t *__accept)
195      __THROW __attribute_pure__;
196 /* Find the first occurrence in WCS of any character in ACCEPT.  */
197 extern wchar_t *wcspbrk (__const wchar_t *__wcs, __const wchar_t *__accept)
198      __THROW __attribute_pure__;
199 /* Find the first occurrence of NEEDLE in HAYSTACK.  */
200 extern wchar_t *wcsstr (__const wchar_t *__haystack, __const wchar_t *__needle)
201      __THROW __attribute_pure__;
202
203 #ifdef __USE_XOPEN
204 /* Another name for `wcsstr' from XPG4.  */
205 extern wchar_t *wcswcs (__const wchar_t *__haystack, __const wchar_t *__needle)
206      __THROW __attribute_pure__;
207 #endif
208
209 /* Divide WCS into tokens separated by characters in DELIM.  */
210 extern wchar_t *wcstok (wchar_t *__restrict __s,
211                         __const wchar_t *__restrict __delim,
212                         wchar_t **__restrict __ptr) __THROW;
213
214 /* Return the number of wide characters in S.  */
215 extern size_t __wcslen (__const wchar_t *__s) __THROW __attribute_pure__;
216 extern size_t wcslen (__const wchar_t *__s) __THROW __attribute_pure__;
217
218 #ifdef __USE_GNU
219 /* Return the number of wide characters in S, but at most MAXLEN.  */
220 extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen)
221      __THROW __attribute_pure__;
222 #endif
223
224
225 /* Search N wide characters of S for C.  */
226 extern wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c, size_t __n)
227      __THROW __attribute_pure__;
228
229 /* Compare N wide characters of S1 and S2.  */
230 extern int wmemcmp (__const wchar_t *__restrict __s1,
231                     __const wchar_t *__restrict __s2, size_t __n)
232      __THROW __attribute_pure__;
233
234 /* Copy N wide characters of SRC to DEST.  */
235 extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
236                          __const wchar_t *__restrict __s2, size_t __n) __THROW;
237
238 /* Copy N wide characters of SRC to DEST, guaranteeing
239    correct behavior for overlapping strings.  */
240 extern wchar_t *wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n)
241      __THROW;
242
243 /* Set N wide characters of S to C.  */
244 extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) __THROW;
245
246 #ifdef __USE_GNU
247 /* Copy N wide characters of SRC to DEST and return pointer to following
248    wide character.  */
249 extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
250                           __const wchar_t *__restrict __s2, size_t __n)
251      __THROW;
252 #endif
253
254
255 /* Determine whether C constitutes a valid (one-byte) multibyte
256    character.  */
257 extern wint_t btowc (int __c) __THROW;
258
259 /* Determine whether C corresponds to a member of the extended
260    character set whose multibyte representation is a single byte.  */
261 extern int wctob (wint_t __c) __THROW;
262
263 /* Determine whether PS points to an object representing the initial
264    state.  */
265 extern int mbsinit (__const mbstate_t *__ps) __THROW;
266
267 /* Write wide character representation of multibyte character pointed
268    to by S to PWC.  */
269 extern size_t mbrtowc (wchar_t *__restrict __pwc,
270                        __const char *__restrict __s, size_t __n,
271                        mbstate_t *__p) __THROW;
272
273 /* Write multibyte representation of wide character WC to S.  */
274 extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
275                        mbstate_t *__restrict __ps) __THROW;
276
277 /* Return number of bytes in multibyte character pointed to by S.  */
278 extern size_t __mbrlen (__const char *__restrict __s, size_t __n,
279                         mbstate_t *__restrict __ps) __THROW;
280 extern size_t mbrlen (__const char *__restrict __s, size_t __n,
281                       mbstate_t *__restrict __ps) __THROW;
282
283 #if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
284     && defined __USE_EXTERN_INLINES
285 /* Define inline function as optimization.  */
286 extern __inline size_t mbrlen (__const char *__restrict __s, size_t __n,
287                                mbstate_t *__restrict __ps) __THROW
288 { return (__ps != NULL
289           ? mbrtowc (NULL, __s, __n, __ps) : __mbrlen (__s, __n, NULL)); }
290 #endif
291
292 /* Write wide character representation of multibyte character string
293    SRC to DST.  */
294 extern size_t mbsrtowcs (wchar_t *__restrict __dst,
295                          __const char **__restrict __src, size_t __len,
296                          mbstate_t *__restrict __ps) __THROW;
297
298 /* Write multibyte character representation of wide character string
299    SRC to DST.  */
300 extern size_t wcsrtombs (char *__restrict __dst,
301                          __const wchar_t **__restrict __src, size_t __len,
302                          mbstate_t *__restrict __ps) __THROW;
303
304
305 #ifdef  __USE_GNU
306 /* Write wide character representation of at most NMC bytes of the
307    multibyte character string SRC to DST.  */
308 extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
309                           __const char **__restrict __src, size_t __nmc,
310                           size_t __len, mbstate_t *__restrict __ps) __THROW;
311
312 /* Write multibyte character representation of at most NWC characters
313    from the wide character string SRC to DST.  */
314 extern size_t wcsnrtombs (char *__restrict __dst,
315                           __const wchar_t **__restrict __src,
316                           size_t __nwc, size_t __len,
317                           mbstate_t *__restrict __ps) __THROW;
318 #endif  /* use GNU */
319
320
321 /* The following functions are extensions found in X/Open CAE.  */
322 #ifdef __USE_XOPEN
323 /* Determine number of column positions required for C.  */
324 extern int wcwidth (wint_t __c) __THROW;
325
326 /* Determine number of column positions required for first N wide
327    characters (or fewer if S ends before this) in S.  */
328 extern int wcswidth (__const wchar_t *__s, size_t __n) __THROW;
329 #endif  /* Use X/Open.  */
330
331
332 /* Convert initial portion of the wide string NPTR to `double'
333    representation.  */
334 extern double wcstod (__const wchar_t *__restrict __nptr,
335                       wchar_t **__restrict __endptr) __THROW;
336
337 #ifdef __USE_ISOC99
338 /* Likewise for `float' and `long double' sizes of floating-point numbers.  */
339 extern float wcstof (__const wchar_t *__restrict __nptr,
340                      wchar_t **__restrict __endptr) __THROW;
341 extern long double wcstold (__const wchar_t *__restrict __nptr,
342                             wchar_t **__restrict __endptr) __THROW;
343 #endif /* C99 */
344
345
346 /* Convert initial portion of wide string NPTR to `long int'
347    representation.  */
348 extern long int wcstol (__const wchar_t *__restrict __nptr,
349                         wchar_t **__restrict __endptr, int __base) __THROW;
350
351 /* Convert initial portion of wide string NPTR to `unsigned long int'
352    representation.  */
353 extern unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
354                                   wchar_t **__restrict __endptr, int __base)
355      __THROW;
356
357 #if defined __GNUC__ && defined __USE_GNU
358 /* Convert initial portion of wide string NPTR to `long int'
359    representation.  */
360 __extension__
361 extern long long int wcstoq (__const wchar_t *__restrict __nptr,
362                              wchar_t **__restrict __endptr, int __base)
363      __THROW;
364
365 /* Convert initial portion of wide string NPTR to `unsigned long long int'
366    representation.  */
367 __extension__
368 extern unsigned long long int wcstouq (__const wchar_t *__restrict __nptr,
369                                        wchar_t **__restrict __endptr,
370                                        int __base) __THROW;
371 #endif /* GCC and use GNU.  */
372
373 #if defined __USE_ISOC99 || (defined __GNUC__ && defined __USE_GNU)
374 /* Convert initial portion of wide string NPTR to `long int'
375    representation.  */
376 __extension__
377 extern long long int wcstoll (__const wchar_t *__restrict __nptr,
378                               wchar_t **__restrict __endptr, int __base)
379      __THROW;
380
381 /* Convert initial portion of wide string NPTR to `unsigned long long int'
382    representation.  */
383 __extension__
384 extern unsigned long long int wcstoull (__const wchar_t *__restrict __nptr,
385                                         wchar_t **__restrict __endptr,
386                                         int __base) __THROW;
387 #endif /* ISO C99 or GCC and GNU.  */
388
389 #ifdef __USE_GNU
390 /* The concept of one static locale per category is not very well
391    thought out.  Many applications will need to process its data using
392    information from several different locales.  Another application is
393    the implementation of the internationalization handling in the
394    upcoming ISO C++ standard library.  To support this another set of
395    the functions using locale data exist which have an additional
396    argument.
397
398    Attention: all these functions are *not* standardized in any form.
399    This is a proof-of-concept implementation.  */
400
401 /* Structure for reentrant locale using functions.  This is an
402    (almost) opaque type for the user level programs.  */
403 # include <xlocale.h>
404
405 /* Special versions of the functions above which take the locale to
406    use as an additional parameter.  */
407 extern long int __wcstol_l (__const wchar_t *__restrict __nptr,
408                             wchar_t **__restrict __endptr, int __base,
409                             __locale_t __loc) __THROW;
410
411 extern unsigned long int __wcstoul_l (__const wchar_t *__restrict __nptr,
412                                       wchar_t **__restrict __endptr,
413                                       int __base, __locale_t __loc) __THROW;
414
415 __extension__
416 extern long long int __wcstoll_l (__const wchar_t *__restrict __nptr,
417                                   wchar_t **__restrict __endptr,
418                                   int __base, __locale_t __loc) __THROW;
419
420 __extension__
421 extern unsigned long long int __wcstoull_l (__const wchar_t *__restrict __nptr,
422                                             wchar_t **__restrict __endptr,
423                                             int __base, __locale_t __loc)
424      __THROW;
425
426 extern double __wcstod_l (__const wchar_t *__restrict __nptr,
427                           wchar_t **__restrict __endptr, __locale_t __loc)
428      __THROW;
429
430 extern float __wcstof_l (__const wchar_t *__restrict __nptr,
431                          wchar_t **__restrict __endptr, __locale_t __loc)
432      __THROW;
433
434 extern long double __wcstold_l (__const wchar_t *__restrict __nptr,
435                                 wchar_t **__restrict __endptr,
436                                 __locale_t __loc) __THROW;
437 #endif /* GNU */
438
439
440 /* The internal entry points for `wcstoX' take an extra flag argument
441    saying whether or not to parse locale-dependent number grouping.  */
442 extern double __wcstod_internal (__const wchar_t *__restrict __nptr,
443                                  wchar_t **__restrict __endptr, int __group)
444      __THROW;
445 extern float __wcstof_internal (__const wchar_t *__restrict __nptr,
446                                 wchar_t **__restrict __endptr, int __group)
447      __THROW;
448 extern long double __wcstold_internal (__const wchar_t *__restrict __nptr,
449                                        wchar_t **__restrict __endptr,
450                                        int __group) __THROW;
451
452 #ifndef __wcstol_internal_defined
453 extern long int __wcstol_internal (__const wchar_t *__restrict __nptr,
454                                    wchar_t **__restrict __endptr,
455                                    int __base, int __group) __THROW;
456 # define __wcstol_internal_defined      1
457 #endif
458 #ifndef __wcstoul_internal_defined
459 extern unsigned long int __wcstoul_internal (__const wchar_t *__restrict __npt,
460                                              wchar_t **__restrict __endptr,
461                                              int __base, int __group) __THROW;
462 # define __wcstoul_internal_defined     1
463 #endif
464 #ifndef __wcstoll_internal_defined
465 __extension__
466 extern long long int __wcstoll_internal (__const wchar_t *__restrict __nptr,
467                                          wchar_t **__restrict __endptr,
468                                          int __base, int __group) __THROW;
469 # define __wcstoll_internal_defined     1
470 #endif
471 #ifndef __wcstoull_internal_defined
472 __extension__
473 extern unsigned long long int __wcstoull_internal (__const wchar_t *
474                                                    __restrict __nptr,
475                                                    wchar_t **
476                                                    __restrict __endptr,
477                                                    int __base,
478                                                    int __group) __THROW;
479 # define __wcstoull_internal_defined    1
480 #endif
481
482
483 #if defined __OPTIMIZE__ && __GNUC__ >= 2
484 /* Define inline functions which call the internal entry points.  */
485
486 extern __inline double wcstod (__const wchar_t *__restrict __nptr,
487                                wchar_t **__restrict __endptr) __THROW
488 { return __wcstod_internal (__nptr, __endptr, 0); }
489 extern __inline long int wcstol (__const wchar_t *__restrict __nptr,
490                                  wchar_t **__restrict __endptr,
491                                  int __base) __THROW
492 { return __wcstol_internal (__nptr, __endptr, __base, 0); }
493 extern __inline unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
494                                            wchar_t **__restrict __endptr,
495                                            int __base) __THROW
496 { return __wcstoul_internal (__nptr, __endptr, __base, 0); }
497
498 # ifdef __USE_GNU
499 extern __inline float wcstof (__const wchar_t *__restrict __nptr,
500                               wchar_t **__restrict __endptr) __THROW
501 { return __wcstof_internal (__nptr, __endptr, 0); }
502 extern __inline long double wcstold (__const wchar_t *__restrict __nptr,
503                                      wchar_t **__restrict __endptr) __THROW
504 { return __wcstold_internal (__nptr, __endptr, 0); }
505
506
507 __extension__
508 extern __inline long long int wcstoq (__const wchar_t *__restrict __nptr,
509                                       wchar_t **__restrict __endptr,
510                                       int __base) __THROW
511 { return __wcstoll_internal (__nptr, __endptr, __base, 0); }
512 __extension__
513 extern __inline unsigned long long int wcstouq (__const wchar_t *
514                                                 __restrict __nptr,
515                                                 wchar_t **__restrict __endptr,
516                                                 int __base) __THROW
517 { return __wcstoull_internal (__nptr, __endptr, __base, 0); }
518 # endif /* Use GNU.  */
519 #endif /* Optimizing GCC >=2.  */
520
521
522 #ifdef  __USE_GNU
523 /* Copy SRC to DEST, returning the address of the terminating L'\0' in
524    DEST.  */
525 extern wchar_t *wcpcpy (wchar_t *__dest, __const wchar_t *__src) __THROW;
526
527 /* Copy no more than N characters of SRC to DEST, returning the address of
528    the last character written into DEST.  */
529 extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
530      __THROW;
531 #endif  /* use GNU */
532
533
534 /* Wide character I/O functions.  */
535 #if defined __USE_ISOC99 || defined __USE_UNIX98
536
537 /* Select orientation for stream.  */
538 extern int fwide (FILE *__fp, int __mode) __THROW;
539
540
541 /* Write formatted output to STREAM.  */
542 extern int fwprintf (FILE *__restrict __stream,
543                      __const wchar_t *__restrict __format, ...)
544      __THROW /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
545 /* Write formatted output to stdout.  */
546 extern int wprintf (__const wchar_t *__restrict __format, ...)
547      __THROW /* __attribute__ ((__format__ (__wprintf__, 1, 2))) */;
548 /* Write formatted output of at most N characters to S.  */
549 extern int swprintf (wchar_t *__restrict __s, size_t __n,
550                      __const wchar_t *__restrict __format, ...)
551      __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */;
552
553 /* Write formatted output to S from argument list ARG.  */
554 extern int vfwprintf (FILE *__restrict __s,
555                       __const wchar_t *__restrict __format,
556                       __gnuc_va_list __arg)
557      __THROW /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
558 /* Write formatted output to stdout from argument list ARG.  */
559 extern int vwprintf (__const wchar_t *__restrict __format,
560                      __gnuc_va_list __arg)
561      __THROW /* __attribute__ ((__format__ (__wprintf__, 1, 0))) */;
562 /* Write formatted output of at most N character to S from argument
563    list ARG.  */
564 extern int vswprintf (wchar_t *__restrict __s, size_t __n,
565                       __const wchar_t *__restrict __format,
566                       __gnuc_va_list __arg)
567      __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
568
569
570 /* Read formatted input from STREAM.  */
571 extern int fwscanf (FILE *__restrict __stream,
572                     __const wchar_t *__restrict __format, ...)
573      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
574 /* Read formatted input from stdin.  */
575 extern int wscanf (__const wchar_t *__restrict __format, ...)
576      __THROW /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
577 /* Read formatted input from S.  */
578 extern int swscanf (__const wchar_t *__restrict __s,
579                     __const wchar_t *__restrict __format, ...)
580      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
581 #endif /* Use ISO C99 and Unix98. */
582
583 #ifdef __USE_ISOC99
584 /* Read formatted input from S into argument list ARG.  */
585 extern int vfwscanf (FILE *__restrict __s,
586                      __const wchar_t *__restrict __format,
587                      __gnuc_va_list __arg)
588      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
589 /* Read formatted input from stdin into argument list ARG.  */
590 extern int vwscanf (__const wchar_t *__restrict __format,
591                     __gnuc_va_list __arg)
592      __THROW /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
593 /* Read formatted input from S into argument list ARG.  */
594 extern int vswscanf (__const wchar_t *__restrict __s,
595                      __const wchar_t *__restrict __format,
596                      __gnuc_va_list __arg)
597      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
598 #endif /* Use ISO C99. */
599
600
601 /* Read a character from STREAM.  */
602 extern wint_t fgetwc (FILE *__stream);
603 extern wint_t getwc (FILE *__stream);
604
605 /* Read a character from stdin.  */
606 extern wint_t getwchar (void);
607
608
609 /* Write a character to STREAM.  */
610 extern wint_t fputwc (wchar_t __wc, FILE *__stream);
611 extern wint_t putwc (wchar_t __wc, FILE *__stream);
612
613 /* Write a character to stdout.  */
614 extern wint_t putwchar (wchar_t __wc);
615
616
617 /* Get a newline-terminated wide character string of finite length
618    from STREAM.  */
619 extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
620                         FILE *__restrict __stream);
621
622 /* Write a string to STREAM.  */
623 extern int fputws (__const wchar_t *__restrict __ws,
624                    FILE *__restrict __stream);
625
626
627 /* Push a character back onto the input buffer of STREAM.  */
628 extern wint_t ungetwc (wint_t __wc, FILE *__stream);
629
630
631 #ifdef __USE_GNU
632 /* These are defined to be equivalent to the `char' functions defined
633    in POSIX.1:1996.  */
634 extern wint_t getwc_unlocked (FILE *__stream);
635 extern wint_t getwchar_unlocked (void);
636
637 /* This is the wide character version of a GNU extension.  */
638 extern wint_t fgetwc_unlocked (FILE *__stream);
639
640 /* Faster version when locking is not necessary.  */
641 extern wint_t fputwc_unlocked (wchar_t __wc, FILE *__stream);
642
643 /* These are defined to be equivalent to the `char' functions defined
644    in POSIX.1:1996.  */
645 extern wint_t putwc_unlocked (wchar_t __wc, FILE *__stream);
646 extern wint_t putwchar_unlocked (wchar_t __wc);
647
648
649 /* This function does the same as `fgetws' but does not lock the stream.  */
650 extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
651                                  FILE *__restrict __stream);
652
653 /* This function does the same as `fputws' but does not lock the stream.  */
654 extern int fputws_unlocked (__const wchar_t *__restrict __ws,
655                             FILE *__restrict __stream);
656 #endif
657
658
659 /* Format TP into S according to FORMAT.
660    Write no more than MAXSIZE wide characters and return the number
661    of wide characters written, or 0 if it would exceed MAXSIZE.  */
662 extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
663                         __const wchar_t *__restrict __format,
664                         __const struct tm *__restrict __tp);
665
666 /* The X/Open standard demands that most of the functions defined in
667    the <wctype.h> header must also appear here.  This is probably
668    because some X/Open members wrote their implementation before the
669    ISO C standard was published and introduced the better solution.
670    We have to provide these definitions for compliance reasons but we
671    do this nonsense only if really necessary.  */
672 #if defined __USE_UNIX98 && !defined __USE_GNU
673 # define __need_iswxxx
674 # include <wctype.h>
675 #endif
676
677 __END_DECLS
678
679 #endif  /* _WCHAR_H defined */
680
681 #endif /* wchar.h  */