Update to Unicode 3.1.
[kopensolaris-gnu/glibc.git] / wcsmbs / wchar.h
index 66e7290..4206c79 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -17,8 +17,8 @@
    Boston, MA 02111-1307, USA.  */
 
 /*
- *      ISO C Standard, Amendment 1, 7.16.4
- *     General wide-string utilities   <wchar.h>
+ *      ISO C99 Standard: 7.24
+ *     Extended multibyte and wide character utilities <wchar.h>
  */
 
 #ifndef _WCHAR_H
 
 #ifdef _WCHAR_H
 /* Get FILE definition.  */
-# define __need_FILE
+# define __need___FILE
+# ifdef __USE_UNIX98
+#  define __need_FILE
+# endif
 # include <stdio.h>
 /* Get va_list definition.  */
 # define __need___va_list
@@ -44,6 +47,8 @@
 #define __need_wint_t
 #include <stddef.h>
 
+#include <bits/wchar.h>
+
 /* We try to get wint_t from <stddef.h>, but not all GCC versions define it
    there.  So define it ourselves if it remains undefined.  */
 #ifndef _WINT_T
@@ -81,8 +86,8 @@ typedef __mbstate_t mbstate_t;
 
 #ifndef WCHAR_MIN
 /* These constants might also be defined in <inttypes.h>.  */
-# define WCHAR_MIN (0)
-# define WCHAR_MAX (0x7fffffff)
+# define WCHAR_MIN __WCHAR_MIN
+# define WCHAR_MAX __WCHAR_MAX
 #endif
 
 #ifndef WEOF
@@ -119,10 +124,11 @@ extern wchar_t *wcsncat (wchar_t *__restrict __dest,
      __THROW;
 
 /* Compare S1 and S2.  */
-extern int wcscmp (__const wchar_t *__s1, __const wchar_t *__s2) __THROW;
+extern int wcscmp (__const wchar_t *__s1, __const wchar_t *__s2)
+     __THROW __attribute_pure__;
 /* Compare N wide-characters of S1 and S2.  */
 extern int wcsncmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)
-     __THROW;
+     __THROW __attribute_pure__;
 
 #ifdef __USE_GNU
 /* Compare S1 and S2, ignoring case.  */
@@ -167,39 +173,42 @@ extern size_t __wcsxfrm_l (wchar_t *__s1, __const wchar_t *__s2,
                           size_t __n, __locale_t __loc) __THROW;
 
 /* Duplicate S, returning an identical malloc'd string.  */
-extern wchar_t *wcsdup (__const wchar_t *__s) __THROW;
+extern wchar_t *wcsdup (__const wchar_t *__s) __THROW __attribute_malloc__;
 #endif
 
 /* Find the first occurrence of WC in WCS.  */
-extern wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc) __THROW;
+extern wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
+     __THROW __attribute_pure__;
 /* Find the last occurrence of WC in WCS.  */
-extern wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc) __THROW;
+extern wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
+     __THROW __attribute_pure__;
 
 #ifdef __USE_GNU
 /* This funciton is similar to `wcschr'.  But it returns a pointer to
    the closing NUL wide character in case C is not found in S.  */
-extern wchar_t *wcschrnul (__const wchar_t *__s, wchar_t __wc) __THROW;
+extern wchar_t *wcschrnul (__const wchar_t *__s, wchar_t __wc)
+     __THROW __attribute_pure__;
 #endif
 
 /* Return the length of the initial segmet of WCS which
    consists entirely of wide characters not in REJECT.  */
 extern size_t wcscspn (__const wchar_t *__wcs, __const wchar_t *__reject)
-     __THROW;
+     __THROW __attribute_pure__;
 /* Return the length of the initial segmet of WCS which
    consists entirely of wide characters in  ACCEPT.  */
 extern size_t wcsspn (__const wchar_t *__wcs, __const wchar_t *__accept)
-     __THROW;
+     __THROW __attribute_pure__;
 /* Find the first occurrence in WCS of any character in ACCEPT.  */
 extern wchar_t *wcspbrk (__const wchar_t *__wcs, __const wchar_t *__accept)
-     __THROW;
+     __THROW __attribute_pure__;
 /* Find the first occurrence of NEEDLE in HAYSTACK.  */
 extern wchar_t *wcsstr (__const wchar_t *__haystack, __const wchar_t *__needle)
-     __THROW;
+     __THROW __attribute_pure__;
 
-#if defined __USE_XOPEN && !defined __USE_UNIX98
+#ifdef __USE_XOPEN
 /* Another name for `wcsstr' from XPG4.  */
 extern wchar_t *wcswcs (__const wchar_t *__haystack, __const wchar_t *__needle)
-     __THROW;
+     __THROW __attribute_pure__;
 #endif
 
 /* Divide WCS into tokens separated by characters in DELIM.  */
@@ -208,22 +217,23 @@ extern wchar_t *wcstok (wchar_t *__restrict __s,
                        wchar_t **__restrict __ptr) __THROW;
 
 /* Return the number of wide characters in S.  */
-extern size_t __wcslen (__const wchar_t *__s) __THROW;
-extern size_t wcslen (__const wchar_t *__s) __THROW;
+extern size_t wcslen (__const wchar_t *__s) __THROW __attribute_pure__;
 
 #ifdef __USE_GNU
 /* Return the number of wide characters in S, but at most MAXLEN.  */
-extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen) __THROW;
+extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen)
+     __THROW __attribute_pure__;
 #endif
 
 
 /* Search N wide characters of S for C.  */
 extern wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c, size_t __n)
-     __THROW;
+     __THROW __attribute_pure__;
 
 /* Compare N wide characters of S1 and S2.  */
 extern int wmemcmp (__const wchar_t *__restrict __s1,
-                   __const wchar_t *__restrict __s2, size_t __n) __THROW;
+                   __const wchar_t *__restrict __s2, size_t __n)
+     __THROW __attribute_pure__;
 
 /* Copy N wide characters of SRC to DEST.  */
 extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
@@ -274,8 +284,7 @@ extern size_t __mbrlen (__const char *__restrict __s, size_t __n,
 extern size_t mbrlen (__const char *__restrict __s, size_t __n,
                      mbstate_t *__restrict __ps) __THROW;
 
-#if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
-    && defined __USE_EXTERN_INLINES
+#ifdef __USE_EXTERN_INLINES
 /* Define inline function as optimization.  */
 extern __inline size_t mbrlen (__const char *__restrict __s, size_t __n,
                               mbstate_t *__restrict __ps) __THROW
@@ -334,7 +343,7 @@ extern float wcstof (__const wchar_t *__restrict __nptr,
                     wchar_t **__restrict __endptr) __THROW;
 extern long double wcstold (__const wchar_t *__restrict __nptr,
                            wchar_t **__restrict __endptr) __THROW;
-#endif /* C9x */
+#endif /* C99 */
 
 
 /* Convert initial portion of wide string NPTR to `long int'
@@ -526,14 +535,14 @@ extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
 
 
 /* Wide character I/O functions.  */
-#ifdef __USE_ISOC99
+#if defined __USE_ISOC99 || defined __USE_UNIX98
 
 /* Select orientation for stream.  */
-extern int fwide (FILE *__fp, int __mode) __THROW;
+extern int fwide (__FILE *__fp, int __mode) __THROW;
 
 
 /* Write formatted output to STREAM.  */
-extern int fwprintf (FILE *__restrict __stream,
+extern int fwprintf (__FILE *__restrict __stream,
                     __const wchar_t *__restrict __format, ...)
      __THROW /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
 /* Write formatted output to stdout.  */
@@ -545,7 +554,7 @@ extern int swprintf (wchar_t *__restrict __s, size_t __n,
      __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */;
 
 /* Write formatted output to S from argument list ARG.  */
-extern int vfwprintf (FILE *__restrict __s,
+extern int vfwprintf (__FILE *__restrict __s,
                      __const wchar_t *__restrict __format,
                      __gnuc_va_list __arg)
      __THROW /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
@@ -562,7 +571,7 @@ extern int vswprintf (wchar_t *__restrict __s, size_t __n,
 
 
 /* Read formatted input from STREAM.  */
-extern int fwscanf (FILE *__restrict __stream,
+extern int fwscanf (__FILE *__restrict __stream,
                    __const wchar_t *__restrict __format, ...)
      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
 /* Read formatted input from stdin.  */
@@ -572,9 +581,11 @@ extern int wscanf (__const wchar_t *__restrict __format, ...)
 extern int swscanf (__const wchar_t *__restrict __s,
                    __const wchar_t *__restrict __format, ...)
      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
+#endif /* Use ISO C99 and Unix98. */
 
+#ifdef __USE_ISOC99
 /* Read formatted input from S into argument list ARG.  */
-extern int vfwscanf (FILE *__restrict __s,
+extern int vfwscanf (__FILE *__restrict __s,
                     __const wchar_t *__restrict __format,
                     __gnuc_va_list __arg)
      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
@@ -587,78 +598,73 @@ extern int vswscanf (__const wchar_t *__restrict __s,
                     __const wchar_t *__restrict __format,
                     __gnuc_va_list __arg)
      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
+#endif /* Use ISO C99. */
 
 
 /* Read a character from STREAM.  */
-extern wint_t fgetwc (FILE *__stream);
-extern wint_t getwc (FILE *__stream);
+extern wint_t fgetwc (__FILE *__stream) __THROW;
+extern wint_t getwc (__FILE *__stream) __THROW;
 
 /* Read a character from stdin.  */
-extern wint_t getwchar (void);
-
-#ifdef __USE_GNU
-/* These are defined to be equivalent to the `char' functions defined
-   in POSIX.1:1996.  */
-extern wint_t getwc_unlocked (FILE *__stream);
-extern wint_t getwchar_unlocked (void);
-
-/* This is the wide character version of a GNU extension.  */
-extern wint_t fgetwc_unlocked (FILE *__stream);
-#endif /* Use POSIX or MISC.  */
+extern wint_t getwchar (void) __THROW;
 
 
 /* Write a character to STREAM.  */
-extern wint_t fputwc (wchar_t __wc, FILE *__stream);
-extern wint_t putwc (wchar_t __wc, FILE *__stream);
+extern wint_t fputwc (wchar_t __wc, __FILE *__stream) __THROW;
+extern wint_t putwc (wchar_t __wc, __FILE *__stream) __THROW;
 
 /* Write a character to stdout.  */
-extern wint_t putwchar (wchar_t __wc);
+extern wint_t putwchar (wchar_t __wc) __THROW;
+
+
+/* Get a newline-terminated wide character string of finite length
+   from STREAM.  */
+extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
+                       __FILE *__restrict __stream) __THROW;
+
+/* Write a string to STREAM.  */
+extern int fputws (__const wchar_t *__restrict __ws,
+                  __FILE *__restrict __stream) __THROW;
+
+
+/* Push a character back onto the input buffer of STREAM.  */
+extern wint_t ungetwc (wint_t __wc, __FILE *__stream) __THROW;
+
 
 #ifdef __USE_GNU
+/* These are defined to be equivalent to the `char' functions defined
+   in POSIX.1:1996.  */
+extern wint_t getwc_unlocked (__FILE *__stream) __THROW;
+extern wint_t getwchar_unlocked (void) __THROW;
+
+/* This is the wide character version of a GNU extension.  */
+extern wint_t fgetwc_unlocked (__FILE *__stream) __THROW;
+
 /* Faster version when locking is not necessary.  */
-extern wint_t fputwc_unlocked (wchar_t __wc, FILE *__stream);
+extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream) __THROW;
 
 /* These are defined to be equivalent to the `char' functions defined
    in POSIX.1:1996.  */
-extern wint_t putwc_unlocked (wchar_t __wc, FILE *__stream);
-extern wint_t putwchar_unlocked (wchar_t __wc);
-#endif
+extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream) __THROW;
+extern wint_t putwchar_unlocked (wchar_t __wc) __THROW;
 
 
-/* Get a newline-terminated wide character string of finite length
-   from STREAM.  */
-extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
-                       FILE *__restrict __stream);
-
-#ifdef __USE_GNU
 /* This function does the same as `fgetws' but does not lock the stream.  */
 extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
-                                FILE *__restrict __stream);
-#endif
-
-
-/* Write a string to STREAM.  */
-extern int fputws (__const wchar_t *__restrict __ws,
-                  FILE *__restrict __stream);
+                                __FILE *__restrict __stream) __THROW;
 
-#ifdef __USE_GNU
 /* This function does the same as `fputws' but does not lock the stream.  */
 extern int fputws_unlocked (__const wchar_t *__restrict __ws,
-                           FILE *__restrict __stream);
+                           __FILE *__restrict __stream) __THROW;
 #endif
 
 
-/* Push a character back onto the input buffer of STREAM.  */
-extern wint_t ungetwc (wint_t __wc, FILE *__stream);
-
-
 /* Format TP into S according to FORMAT.
    Write no more than MAXSIZE wide characters and return the number
    of wide characters written, or 0 if it would exceed MAXSIZE.  */
 extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
                        __const wchar_t *__restrict __format,
-                       __const struct tm *__restrict __tp);
-#endif /* Use ISO C9x. */
+                       __const struct tm *__restrict __tp) __THROW;
 
 /* The X/Open standard demands that most of the functions defined in
    the <wctype.h> header must also appear here.  This is probably