mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-21 10:20:06 +00:00
9756dfe161
1997-12-22 18:10 Ulrich Drepper <drepper@cygnus.com> * configure.in: Stop with error if --disable-static is used when the shared lib uses this library. * gen-FAQ.pl: I've perl installed in /usr/bin. * include/bits/xopen_lim.h (STREAM_MAX): Define using FOPEN_MAX. Fix Unix98 conformance problems in the headers. * catgets/nl_types.h: Define nl_item. * grp/grp.h: Define gid_t. * include/features.h [_POSIX_C_SOURCE]: Don't define _XOPEN_SOURCE. * include/nl_types.h: New file. * include/ulimit.h: New file. * io/fcntl.h: Include sys/stat.h for Unix98. Don't define locking constants in POSIX mode. * io/utime.h: Get definition for time_t. * io/sys/stat.h: Define dev_t, gid_t, ino_t, mode_t, nlink_t, off_t, uid_t, pid_t. Define D_IFLNK and S_IFSOCK only if !__USE_UNIX98. * libio/stdio.h: Define va_list. Make snprintf also available is __USE_UNIX98. Declare getopt function and variables. * locale/langinfo.h: Include nl_types.h. Don't define nl_item. Define CODESET, CRNCYSTR, RADIXCHAR and THOUSEP as aliases. * math/math.h: Defined M_* constants as double for Unix98 mode. * posix/fnmatch.h: Pretty print. Define FNM_NOSYS. * posix/glob.h: Pretty print. Define GLOB_NOSYS. * posix/regex.h: Define REG_NOSYS. * posix/wordexp.h: Define WRDE_NOSYS. * posix/unistd.h: Define _POSIX2_VERSION. Define _XOPEN_VERSION to 500 for Unix98. * posix/sys/types.h: Alloc dev_t, mode_t, nlink_t to be defined somewhere else as well. Define clock_t for Unix98. * posix/sys/wait.h: Define pid_t. * pwd/pwd.h: Define gid_t, uid_t. * resource/Makefile (headers): Add ulimit.h. * resource/ulimit.h: New file. * sysdeps/generic/ulimit.c: Define according to X/Open using varargs instead of second argument. * sysdeps/unix/bsd/ulimit.c: Likewise. Use UL_* constants. * sysdeps/unix/sysv/linux/ulimit.c: Likewise. * resource/sys/resource.h: Don't declare ulimit here, include ulimit.h. * signal/signal.h: Define pid_t. * string/string.h: Don't declare BSD string functions in POSIX mode. * sysdeps/generic/bits/confname.h: Define _PC_VDISABLE. Add _SC_XOPEN_LEGACY, _SC_XOPEN_REALTIME and _SC_XOPEN_REALTIME_THREADS. * sysdeps/unix/sysv/linux/bits/termios.h: Clean namespace for Unix98 and POSIX. * inet/test_ifindex.c: Change test so that it does not fail for interface aliases. * locale/programs/locale.c (show_info): Use correct cast sequence for 64bit machines. * malloc/malloc.c: __malloc_initialized now signals three states: uninitialized, initializing, initialized. Used in mcheck. * malloc/mcheck.c (mabort): Add '\n' to messages. (mcheck): Allow installation when malloc is uninitialized or is just initializing. * manual/memory.texi: Explain mtrace output a bit more. * math/libm-test.c: Add more epsilons. * misc/regexp.h (compile): Remove __ prefix from parameter names. * nis/nss_nis/nis-ethers.c (internal_nis_getetherent_r): Use strncpy instead of strcpy for security. * nis/nss_nis/nis-proto.c (internal_nis_getprotoent_r): Likewise. * nis/nss_nis/nis-rpc.c (internal_nis_getrpcent_r): Likewise. * nis/nss_nis/nis-service.c (internal_nis_getservent_r): Likewise. * nss/digits_dots.c: Pretty print. * posix/getconf.c (vars): Add symbols for programming environment recognition. Recognize --version. * sysdeps/generic/sysconf.c: Handle _SC_XBS5_*, _SC_XOPEN_LEGACY, _SC_XOPEN_REALTIME, and _SC_XOPEN_REALTIME_THREADS. * sysdeps/posix/sysconf.c: Handle _SC_XBS5_* and new _XOPEN_* symbols. * sysdeps/generic/bits/stdio_lim.h: Implement handling of __need_FOPEN_MAX. * sysdeps/unix/sysv/linux/stdio_lim.h.in: Likewise. * sysdeps/posix/mk-stdiolim.c: Change to generate file handling __need_FOPEN_MAX. * sysdeps/unix/sysv/linux/Dist: Add rt_sigpending.c. * sysdeps/unix/sysv/linux/rt_sigpending.c: New file. * sysdeps/unix/sysv/linux/alpha/bits/types.h: Define __ipc_pid_t. * sysdeps/unix/sysv/linux/bits/types.h: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise. * sysdeps/unix/sysv/linux/bits/msq.h: Use __ipc_pid_t. * sysdeps/unix/sysv/linux/bits/shm.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/types.h: New file. * sysdeps/wordsize-32/inttypes.h: Add SCNd8, SCNi8, SCNo8, SCNx8, SCNu*. * sysdeps/wordsize-64/inttypes.h: Likewise. * time/africa: Update from tzdata1997j. * time/antarctica: Likewise. * time/asia: Likewise. * time/australasia: Likewise. * time/backward: Likewise. * time/etcetera: Likewise. * time/europe: Likewise. * time/factory: Likewise. * time/northamerica: Likewise. * time/pacificnew: Likewise. * time/southamerica: Likewise. * time/tzfile.h: Update from tzcode1997h. * time/zic.c: Likewise. * wcsmbs/wchar.h: Get definition of FILE. Define `struct tm' tag. Declare wcwidth and wcswidth for __USE_XOPEN. Declare the isw*() functions for Unix98. * wctype/towctrans.c: Define as __towctrans, make towctrans weak alias. * wctype/wctype.h: Declare isw*() functions also if __need_iswxxx is defined. 1997-12-21 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * locale/duplocale.c: Increase usage_count only if less than MAX_USAGE_COUNT. * locale/freelocale.c: Test usage_count against UNDELETABLE, not MAX_USAGE_COUNT. * locale/setlocale.c: Likewise. 1997-12-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makefile ($(inst_includedir)/gnu/stubs.h): Use a more direct dependency to make it easier to install it selectively. * Makerules (.SUFFIXES): Don't define any suffixes. 1997-12-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/generic/fstatfs64.c: Emulate using fstatfs. * sysdeps/generic/statfs64.c: Emulate using statfs. * sysdeps/generic/getrlimit64.c: Emulate using getrlimit. * sysdeps/generic/setrlimit64.c: Emulate using setrlimit. * sysdpes/generic/ftruncate64.c: New file. * sysdpes/generic/truncate64.c: New file. * sysdeps/generic/bits/stat.h: Add LFS support. * sysdeps/generic/bits/statfs.h: Likewise. * sysdeps/unix/bsd/sun/sunos4/bits/resource.h (RLIM_INFINITY) [__USE_FILE_OFFSET64]: Make long long constant. (RLIM64_INFINITY): Likewise. * sysdeps/unix/sysv/linux/bits/resource.h (RLIM_INFINITY): Correct for LFS support. (RLIM64_INFINITY) [__USE_LARGEFILE64]: Define. * sysdeps/generic/bits/resource.h: Likewise. * misc/Makefile (routines): Add truncate64 and ftruncate64. * include/features.h: Don't prevent LFS support from defining BSD and SYSV things. * dirent/dirent.h [__USE_FILE_OFFSET64]: Don't use xxx64 names. * io/ftw.h [__USE_FILE_OFFSET64]: Likewise. * io/sys/stat.h [__USE_FILE_OFFSET64]: Likewise. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Add xxx64 alias for fstatfs, statfs, getrlimit, setrlimit, ftruncate and truncate. * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/alpha/fstatfs64.c: New file. * sysdeps/unix/sysv/linux/alpha/statfs64.c: New file. * sysdeps/unix/sysv/linux/alpha/getrlimit64.c: New file. * sysdeps/unix/sysv/linux/alpha/setrlimit64.c: New file. * sysdeps/unix/sysv/linux/alpha/ftruncate64.c: New file. * sysdeps/unix/sysv/linux/alpha/truncate64.c: New file. * sysdeps/unix/sysv/linux/alpha/readdir.c: New file. * sysdeps/unix/sysv/linux/alpha/readdir64.c: New file. * sysdeps/unix/sysv/linux/alpha/readdir64_r.c: New file. * sysdeps/unix/sysv/linux/alpha/readdir_r.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/fstatfs64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/statfs64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/getrlimit64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/setrlimit64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/ftruncate64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/truncate64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/readdir64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/readdir64_r.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c: New file. * sysdeps/unix/sysv/linux/fxstat64.c: New file. * sysdeps/unix/sysv/linux/lxstat64.c: New file. * sysdeps/unix/sysv/linux/xstat64.c: New file. * sysdeps/unix/sysv/linux/readdir64.c: New file. * sysdeps/unix/sysv/linux/readdir64_r.c: New file. * sysdeps/unix/sysv/linux/getdents64.c: New file. * sysdeps/unix/sysv/linux/Makefile (sysdep_routines) [$(subdir)=dirent]: Add getdents64. * sysdeps/unix/sysv/linux/Dist: Add getdents64.c. * sysdeps/unix/sysv/linux/xstatconv.c: LFS support. 1997-12-18 12:07 Philip Blundell <pb@nexus.co.uk> * sysdeps/generic/bits/statfs.h (struct statfs64): Added. * sysdeps/generic/getrlimit.c: Include <sys/types.h>. * sysdeps/generic/getrlimit64.c: Likewise. * sysdeps/generic/setrlimit.c: Likewise. * sysdeps/generic/setrlimit64.c: Likewise. 1997-12-17 13:57 Philip Blundell <pb@nexus.co.uk> * sysdeps/unix/sysv/linux/siglist.c: Fix compile problem if not using versioning. * sysdeps/generic/waitid.c: Include <sys/types.h> for id_t. * sysdeps/standalone/arm/bits/errno.h (EBUSY): Added. 1997-12-16 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * locale/programs/ld-ctype.c (ctype_output): Clear out the padding after the codeset name. 1997-12-16 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * libc.map: Add get_kernel_syms. 1997-12-16 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/generic/testrtsig.h (kernel_has_rtsig): Make static. * sysdeps/unix/sysv/linux/testrtsig.h (kernel_has_rtsig): Likewise. Fix condition. 1997-12-16 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * libio/Makefile (routines) [$(versioning)=yes]: Add oldiofdopen. 1997-12-15 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/m68k/fpu/bits/mathinline.h: Don't define exp2 inline. Define scalbln{,f,l} under __USE_ISOC9X, not __USE_MISC. 1997-12-15 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/unix/sysv/linux/powerpc/syscall.S: Put back. * sysdeps/unix/sysv/linux/powerpc/sigreturn.S: Delete this instead. Oops. 1997-12-16 Andreas Jaeger <aj@arthur.rhein-neckar.de> * configure.in (libc_cv_gcc_alpha_ng_prefix): Correct quoting. 1997-12-16 Andreas Jaeger <aj@arthur.rhein-neckar.de> * math/libm-test.c (catanh_test): Change epsilon. Reported by H.J. Lu. 1997-12-14 19:39 H.J. Lu <hjl@gnu.org> * libc.map (__getpid): Added for linuxthreads. 1997-12-13 21:09 H.J. Lu <hjl@gnu.org> * configure.in (HAVE_DWARF2_UNWIND_INFO_STATIC): Define it if gcc uses static variable in DWARF2 unwind information for exception support. * config.h.in (HAVE_DWARF2_UNWIND_INFO_STATIC): New. * elf/soinit.c (__libc_global_ctors, _fini): Handle HAVE_DWARF2_UNWIND_INFO_STATIC. * libc.map (__register_frame*, __deregister_frame*): Make them global. 1997-12-15 Andreas Jaeger <aj@arthur.rhein-neckar.de> * math/libm-test.c: Add more tests for "normal" values. 1997-12-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * stdio-common/printf_fphex.c: Fix printing of long double number with a biased exponent of zero. Fix rounding. 1997-12-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sunrpc/rpc_main.c: Accept new flag -$. * sunrpc/Makefile (rpcgen-cmd): Pass it here. 1997-12-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makefile ($(inst_slibdir)/libc-$(version).so): Install the dynamic linker first, in case the interface has changed. 1997-12-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * nss/nss_files/files-alias.c (get_next_alias): Fix parameter order. 1997-12-12 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * math/tgmath.h: Check for double first, for architectures where sizeof (long double) == sizeof (double). 1997-12-07 Andreas Jaeger <aj@arthur.rhein-neckar.de> * math/libm-test.c: New tests for "normal" values added for most functions.
519 lines
20 KiB
C
519 lines
20 KiB
C
/* Copyright (C) 1995, 1996, 1997 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
|
|
modify it under the terms of the GNU Library General Public License as
|
|
published by the Free Software Foundation; either version 2 of the
|
|
License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public
|
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA. */
|
|
|
|
/*
|
|
* ISO C Standard, Amendment 1, 7.16.4
|
|
* General wide-string utilities <wchar.h>
|
|
*/
|
|
|
|
#ifndef _WCHAR_H
|
|
#define _WCHAR_H 1
|
|
|
|
#include <features.h>
|
|
|
|
/* Get FILE definition. */
|
|
#define __need_FILE
|
|
#include <stdio.h>
|
|
|
|
/* Get size_t, wchar_t, wint_t and NULL from <stddef.h>. */
|
|
#define __need_size_t
|
|
#define __need_wchar_t
|
|
#define __need_wint_t
|
|
#define __need_NULL
|
|
#include <stddef.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
|
|
/* Integral type unchanged by default argument promotions that can
|
|
hold any value corresponding to members of the extended character
|
|
set, as well as at least one value that does not correspond to any
|
|
member of the extended character set. */
|
|
# define _WINT_T
|
|
typedef unsigned int wint_t;
|
|
#endif
|
|
|
|
|
|
/* Conversion state information. */
|
|
typedef struct
|
|
{
|
|
int count; /* Number of bytes needed for the current character. */
|
|
wint_t value; /* Value so far. */
|
|
} mbstate_t;
|
|
|
|
#ifndef WCHAR_MIN
|
|
/* These constants might also be defined in <inttypes.h>. */
|
|
# define WCHAR_MIN ((wchar_t) 0)
|
|
# define WCHAR_MAX (~WCHAR_MIN)
|
|
#endif
|
|
|
|
#ifndef WEOF
|
|
# define WEOF (0xffffffffu)
|
|
#endif
|
|
|
|
/* This incomplete type is defined in <time.h> but needed here because
|
|
of `wcsftime'. */
|
|
struct tm;
|
|
|
|
|
|
__BEGIN_DECLS
|
|
|
|
/* Copy SRC to DEST. */
|
|
extern wchar_t *wcscpy __P ((wchar_t *__restrict __dest,
|
|
__const wchar_t *__restrict __src));
|
|
/* Copy no more than N wide-characters of SRC to DEST. */
|
|
extern wchar_t *wcsncpy __P ((wchar_t *__restrict __dest,
|
|
__const wchar_t *__restrict __src, size_t __n));
|
|
|
|
/* Append SRC onto DEST. */
|
|
extern wchar_t *wcscat __P ((wchar_t *__restrict __dest,
|
|
__const wchar_t *__restrict __src));
|
|
/* Append no more than N wide-characters of SRC onto DEST. */
|
|
extern wchar_t *wcsncat __P ((wchar_t *__restrict __dest,
|
|
__const wchar_t *__restrict __src, size_t __n));
|
|
|
|
/* Compare S1 and S2. */
|
|
extern int wcscmp __P ((__const wchar_t *__s1, __const wchar_t *__s2));
|
|
/* Compare N wide-characters of S1 and S2. */
|
|
extern int wcsncmp __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
|
size_t __n));
|
|
|
|
#ifdef __USE_GNU
|
|
/* Compare S1 and S2, ignoring case. */
|
|
extern int __wcscasecmp __P ((__const wchar_t *__s1, __const wchar_t *__s2));
|
|
extern int wcscasecmp __P ((__const wchar_t *__s1, __const wchar_t *__s2));
|
|
|
|
/* Compare no more than N chars of S1 and S2, ignoring case. */
|
|
extern int __wcsncasecmp __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
|
size_t __n));
|
|
extern int wcsncasecmp __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
|
size_t __n));
|
|
|
|
/* Similar to the two functions above but take the information from
|
|
the provided locale and not the global locale. */
|
|
# include <xlocale.h>
|
|
|
|
extern int __wcscasecmp_l __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
|
__locale_t __loc));
|
|
|
|
extern int __wcsncasecmp_l __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
|
size_t __n, __locale_t __loc));
|
|
#endif
|
|
|
|
/* Compare S1 and S2, both interpreted as appropriate to the
|
|
LC_COLLATE category of the current locale. */
|
|
extern int wcscoll __P ((__const wchar_t *__s1, __const wchar_t *__s2));
|
|
/* Transform S2 into array pointed to by S1 such that if wcscmp is
|
|
applied to two transformed strings the result is the as applying
|
|
`wcscoll' to the original strings. */
|
|
extern size_t wcsxfrm __P ((wchar_t *__restrict __s1,
|
|
__const wchar_t *__restrict __s2, size_t __n));
|
|
|
|
#ifdef __USE_GNU
|
|
/* Similar to the two functions above but take the information from
|
|
the provided locale and not the global locale. */
|
|
|
|
/* Compare S1 and S2, both interpreted as appropriate to the
|
|
LC_COLLATE category of the given locale. */
|
|
extern int __wcscoll_l __P ((__const wchar_t *__s1, __const wchar_t *__s2,
|
|
__locale_t __loc));
|
|
/* Transform S2 into array pointed to by S1 such that if wcscmp is
|
|
applied to two transformed strings the result is the as applying
|
|
`wcscoll' to the original strings. */
|
|
extern size_t __wcsxfrm_l __P ((wchar_t *__s1, __const wchar_t *__s2,
|
|
size_t __n, __locale_t __loc));
|
|
|
|
/* Duplicate S, returning an identical malloc'd string. */
|
|
extern wchar_t *wcsdup __P ((__const wchar_t *__s));
|
|
#endif
|
|
|
|
/* Find the first occurrence of WC in WCS. */
|
|
extern wchar_t *wcschr __P ((__const wchar_t *__wcs, wchar_t __wc));
|
|
/* Find the last occurrence of WC in WCS. */
|
|
extern wchar_t *wcsrchr __P ((__const wchar_t *__wcs, wchar_t __wc));
|
|
|
|
/* Return the length of the initial segmet of WCS which
|
|
consists entirely of wide characters not in REJECT. */
|
|
extern size_t wcscspn __P ((__const wchar_t *__wcs,
|
|
__const wchar_t *__reject));
|
|
/* Return the length of the initial segmet of WCS which
|
|
consists entirely of wide characters in ACCEPT. */
|
|
extern size_t wcsspn __P ((__const wchar_t *__wcs, __const wchar_t *__accept));
|
|
/* Find the first occurrence in WCS of any character in ACCEPT. */
|
|
extern wchar_t *wcspbrk __P ((__const wchar_t *__wcs,
|
|
__const wchar_t *__accept));
|
|
/* Find the first occurrence of NEEDLE in HAYSTACK. */
|
|
extern wchar_t *wcsstr __P ((__const wchar_t *__haystack,
|
|
__const wchar_t *__needle));
|
|
/* Divide WCS into tokens separated by characters in DELIM. */
|
|
extern wchar_t *wcstok __P ((wchar_t *__restrict __s,
|
|
__const wchar_t *__restrict __delim,
|
|
wchar_t **__restrict __ptr));
|
|
|
|
/* Return the number of wide characters in S. */
|
|
extern size_t wcslen __P ((__const wchar_t *__s));
|
|
|
|
|
|
/* Search N wide characters of S for C. */
|
|
extern wchar_t *wmemchr __P ((__const wchar_t *__s, wchar_t __c, size_t __n));
|
|
|
|
/* Compare N wide characters of S1 and S2. */
|
|
extern int wmemcmp __P ((__const wchar_t *__restrict __s1,
|
|
__const wchar_t *__restrict __s2, size_t __n));
|
|
|
|
/* Copy N wide characters of SRC to DEST. */
|
|
extern wchar_t *wmemcpy __P ((wchar_t *__restrict __s1,
|
|
__const wchar_t *__restrict __s2, size_t __n));
|
|
|
|
/* Copy N wide characters of SRC to DEST, guaranteeing
|
|
correct behavior for overlapping strings. */
|
|
extern wchar_t *wmemmove __P ((wchar_t *__s1, __const wchar_t *__s2,
|
|
size_t __n));
|
|
|
|
/* Set N wide characters of S to C. */
|
|
extern wchar_t *wmemset __P ((wchar_t *__s, wchar_t __c, size_t __n));
|
|
|
|
|
|
/* Determine whether C constitutes a valid (one-byte) multibyte
|
|
character. */
|
|
extern wint_t btowc __P ((int __c));
|
|
|
|
/* Determine whether C corresponds to a member of the extended
|
|
character set whose multibyte representation is a single byte. */
|
|
extern int wctob __P ((wint_t __c));
|
|
|
|
/* Determine whether PS points to an object representing the initial
|
|
state. */
|
|
extern int mbsinit __P ((__const mbstate_t *__ps));
|
|
|
|
/* Write wide character representation of multibyte character pointed
|
|
to by S to PWC. */
|
|
extern size_t __mbrtowc __P ((wchar_t *__restrict __pwc,
|
|
__const char *__restrict __s, size_t __n,
|
|
mbstate_t *__restrict __p));
|
|
extern size_t mbrtowc __P ((wchar_t *__restrict __pwc,
|
|
__const char *__restrict __s, size_t __n,
|
|
mbstate_t *__p));
|
|
|
|
/* Write multibyte representation of wide character WC to S. */
|
|
extern size_t __wcrtomb __P ((char *__restrict __s, wchar_t __wc,
|
|
mbstate_t *__restrict __ps));
|
|
extern size_t wcrtomb __P ((char *__restrict __s, wchar_t __wc,
|
|
mbstate_t *__restrict __ps));
|
|
|
|
/* Return number of bytes in multibyte character pointed to by S. */
|
|
extern size_t __mbrlen __P ((__const char *__restrict __s, size_t __n,
|
|
mbstate_t *__restrict __ps));
|
|
extern size_t mbrlen __P ((__const char *__restrict __s, size_t __n,
|
|
mbstate_t *__restrict __ps));
|
|
|
|
#if defined __OPTIMIZE__ \
|
|
&& (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
|
|
/* Define inline function as optimization. */
|
|
extern __inline size_t mbrlen (__const char *__restrict __s, size_t __n,
|
|
mbstate_t *__restrict __ps)
|
|
{ return (__ps != NULL
|
|
? __mbrtowc (NULL, __s, __n, __ps) : __mbrlen (__s, __n, NULL)); }
|
|
#endif
|
|
|
|
/* Write wide character representation of multibyte character string
|
|
SRC to DST. */
|
|
extern size_t __mbsrtowcs __P ((wchar_t *__restrict __dst,
|
|
__const char **__restrict __src,
|
|
size_t __len, mbstate_t *__restrict __ps));
|
|
extern size_t mbsrtowcs __P ((wchar_t *__restrict __dst,
|
|
__const char **__restrict __src,
|
|
size_t __len, mbstate_t *__restrict __ps));
|
|
|
|
/* Write multibyte character representation of wide character string
|
|
SRC to DST. */
|
|
extern size_t __wcsrtombs __P ((char *__restrict __dst,
|
|
__const wchar_t **__restrict __src,
|
|
size_t __len, mbstate_t *__restrict __ps));
|
|
extern size_t wcsrtombs __P ((char *__restrict __dst,
|
|
__const wchar_t **__restrict __src,
|
|
size_t __len, mbstate_t *__restrict __ps));
|
|
|
|
|
|
#ifdef __USE_GNU
|
|
/* Write wide character representation of at most NMC bytes of the
|
|
multibyte character string SRC to DST. */
|
|
extern size_t __mbsnrtowcs __P ((wchar_t *__restrict __dst,
|
|
__const char **__restrict __src, size_t __nmc,
|
|
size_t __len, mbstate_t *__restrict __ps));
|
|
extern size_t mbsnrtowcs __P ((wchar_t *__restrict __dst,
|
|
__const char **__restrict __src, size_t __nmc,
|
|
size_t __len, mbstate_t *__restrict __ps));
|
|
|
|
/* Similar function to the above but this does not stop at NUL bytes. */
|
|
extern size_t __wmemrtowcs __P ((wchar_t *__restrict __dst,
|
|
__const char **__restrict __src,
|
|
size_t __nmc, size_t __len,
|
|
mbstate_t *__restrict __ps));
|
|
extern size_t wmemrtowcs __P ((wchar_t *__restrict __dst,
|
|
__const char **__restrict __src,
|
|
size_t __nmc, size_t __len,
|
|
mbstate_t *__restrict __ps));
|
|
|
|
/* Write multibyte character representation of at most NWC characters
|
|
from the wide character string SRC to DST. */
|
|
extern size_t __wcsnrtombs __P ((char *__restrict __dst,
|
|
__const wchar_t **__restrict __src,
|
|
size_t __nwc, size_t __len,
|
|
mbstate_t *__restrict __ps));
|
|
extern size_t wcsnrtombs __P ((char *__restrict __dst,
|
|
__const wchar_t **__restrict __src,
|
|
size_t __nwc, size_t __len,
|
|
mbstate_t *__restrict __ps));
|
|
|
|
/* Similar function to the above but this does not stop at NUL bytes. */
|
|
extern size_t __wmemrtombs __P ((char *__restrict __dst,
|
|
__const wchar_t **__restrict __src,
|
|
size_t __nwc, size_t len,
|
|
mbstate_t *__restrict __ps));
|
|
extern size_t wmemrtombs __P ((char *__restrict __dst,
|
|
__const wchar_t **__restrict __src,
|
|
size_t __nwc, size_t len,
|
|
mbstate_t *__restrict __ps));
|
|
#endif /* use GNU */
|
|
|
|
|
|
/* The following functions are extensions found in X/Open CAE. */
|
|
#ifdef __USE_XOPEN
|
|
/* Determine number of column positions required for C. */
|
|
extern int wcwidth __P ((wint_t __c));
|
|
|
|
/* Determine number of column positions required for first N wide
|
|
characters (or fewer if S ends before this) in S. */
|
|
extern int wcswidth __P ((__const wchar_t *__s, size_t __n));
|
|
#endif /* Use X/Open. */
|
|
|
|
|
|
/* Convert initial portion of the wide string NPTR to `double'
|
|
representation. */
|
|
extern double wcstod __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr));
|
|
|
|
#ifdef __USE_GNU
|
|
/* Likewise for `float' and `long double' sizes of floating-point numbers. */
|
|
extern float wcstof __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr));
|
|
extern __long_double_t wcstold __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr));
|
|
#endif /* GNU */
|
|
|
|
|
|
/* Convert initial portion of wide string NPTR to `long int'
|
|
representation. */
|
|
extern long int wcstol __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr, int __base));
|
|
|
|
/* Convert initial portion of wide string NPTR to `unsigned long int'
|
|
representation. */
|
|
extern unsigned long int wcstoul __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base));
|
|
|
|
#if defined __GNUC__ && defined __USE_GNU
|
|
/* Convert initial portion of wide string NPTR to `long int'
|
|
representation. */
|
|
extern long long int wcstoq __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr, int __base));
|
|
|
|
/* Convert initial portion of wide string NPTR to `unsigned long long int'
|
|
representation. */
|
|
extern unsigned long long int wcstouq __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base));
|
|
#endif /* GCC and use GNU. */
|
|
|
|
#if defined __USE_ISOC9X || (defined __GNUC__ && defined __USE_GNU)
|
|
/* Convert initial portion of wide string NPTR to `long int'
|
|
representation. */
|
|
extern long long int wcstoll __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr, int __base));
|
|
|
|
/* Convert initial portion of wide string NPTR to `unsigned long long int'
|
|
representation. */
|
|
extern unsigned long long int wcstoull __P ((__const wchar_t *
|
|
__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base));
|
|
#endif /* ISO C 9X or GCC and GNU. */
|
|
|
|
#ifdef __USE_GNU
|
|
/* The concept of one static locale per category is not very well
|
|
thought out. Many applications will need to process its data using
|
|
information from several different locales. Another application is
|
|
the implementation of the internationalization handling in the
|
|
upcoming ISO C++ standard library. To support this another set of
|
|
the functions using locale data exist which have an additional
|
|
argument.
|
|
|
|
Attention: all these functions are *not* standardized in any form.
|
|
This is a proof-of-concept implementation. */
|
|
|
|
/* Structure for reentrant locale using functions. This is an
|
|
(almost) opaque type for the user level programs. */
|
|
# include <xlocale.h>
|
|
|
|
/* Special versions of the functions above which take the locale to
|
|
use as an additional parameter. */
|
|
extern long int __wcstol_l __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr, int __base,
|
|
__locale_t __loc));
|
|
|
|
extern unsigned long int __wcstoul_l __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base, __locale_t __loc));
|
|
|
|
extern long long int __wcstoll_l __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base, __locale_t __loc));
|
|
|
|
extern unsigned long long int __wcstoull_l __P ((__const wchar_t *__restrict
|
|
__nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base,
|
|
__locale_t __loc));
|
|
|
|
extern double __wcstod_l __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
__locale_t __loc));
|
|
|
|
extern float __wcstof_l __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
__locale_t __loc));
|
|
|
|
extern __long_double_t __wcstold_l __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
__locale_t __loc));
|
|
#endif /* GNU */
|
|
|
|
|
|
/* The internal entry points for `wcstoX' take an extra flag argument
|
|
saying whether or not to parse locale-dependent number grouping. */
|
|
extern double __wcstod_internal __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __group));
|
|
extern float __wcstof_internal __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __group));
|
|
extern __long_double_t __wcstold_internal __P ((__const wchar_t *
|
|
__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __group));
|
|
|
|
#ifndef __wcstol_internal_defined
|
|
extern long int __wcstol_internal __P ((__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base, int __group));
|
|
# define __wcstol_internal_defined 1
|
|
#endif
|
|
#ifndef __wcstoul_internal_defined
|
|
extern unsigned long int __wcstoul_internal __P ((__const wchar_t *
|
|
__restrict __nptr,
|
|
wchar_t **
|
|
__restrict __endptr,
|
|
int __base, int __group));
|
|
# define __wcstoul_internal_defined 1
|
|
#endif
|
|
#ifndef __wcstoll_internal_defined
|
|
extern long long int __wcstoll_internal __P ((__const wchar_t *
|
|
__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base, int __group));
|
|
# define __wcstoll_internal_defined 1
|
|
#endif
|
|
#ifndef __wcstoull_internal_defined
|
|
extern unsigned long long int __wcstoull_internal __P ((__const wchar_t *
|
|
__restrict __nptr,
|
|
wchar_t **
|
|
__restrict __endptr,
|
|
int __base,
|
|
int __group));
|
|
# define __wcstoull_internal_defined 1
|
|
#endif
|
|
|
|
|
|
#if defined __OPTIMIZE__ && __GNUC__ >= 2
|
|
/* Define inline functions which call the internal entry points. */
|
|
|
|
extern __inline double wcstod (__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr)
|
|
{ return __wcstod_internal (__nptr, __endptr, 0); }
|
|
extern __inline long int wcstol (__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr, int __base)
|
|
{ return __wcstol_internal (__nptr, __endptr, __base, 0); }
|
|
extern __inline unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base)
|
|
{ return __wcstoul_internal (__nptr, __endptr, __base, 0); }
|
|
|
|
# ifdef __USE_GNU
|
|
extern __inline float wcstof (__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr)
|
|
{ return __wcstof_internal (__nptr, __endptr, 0); }
|
|
extern __inline __long_double_t wcstold (__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr)
|
|
{ return __wcstold_internal (__nptr, __endptr, 0); }
|
|
|
|
|
|
extern __inline long long int wcstoq (__const wchar_t *__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base)
|
|
{ return __wcstoll_internal (__nptr, __endptr, __base, 0); }
|
|
extern __inline unsigned long long int wcstouq (__const wchar_t *
|
|
__restrict __nptr,
|
|
wchar_t **__restrict __endptr,
|
|
int __base)
|
|
{ return __wcstoull_internal (__nptr, __endptr, __base, 0); }
|
|
# endif /* Use GNU. */
|
|
#endif /* Optimizing GCC >=2. */
|
|
|
|
|
|
#ifdef __USE_GNU
|
|
/* Copy SRC to DEST, returning the address of the terminating L'\0' in
|
|
DEST. */
|
|
extern wchar_t *__wcpcpy __P ((wchar_t *__dest, __const wchar_t *__src));
|
|
extern wchar_t *wcpcpy __P ((wchar_t *__dest, __const wchar_t *__src));
|
|
|
|
/* Copy no more than N characters of SRC to DEST, returning the address of
|
|
the last character written into DEST. */
|
|
extern wchar_t *__wcpncpy __P ((wchar_t *__dest, __const wchar_t *__src,
|
|
size_t __n));
|
|
extern wchar_t *wcpncpy __P ((wchar_t *__dest, __const wchar_t *__src,
|
|
size_t __n));
|
|
#endif /* use GNU */
|
|
|
|
|
|
/* The X/Open standard demands that most of the functions defined in
|
|
the <wctype.h> header must also appear here. This is probably
|
|
because some X/Open members wrote their implementation before the
|
|
ISO C standard was published and introduced the better solution.
|
|
We have to provide these definitions for compliance reasons but we
|
|
do this nonsense only if really necessary. */
|
|
#if defined __USE_UNIX98 && !defined __USE_GNU
|
|
# define __need_iswxxx
|
|
# include <wctype.h>
|
|
#endif
|
|
|
|
__END_DECLS
|
|
|
|
#endif /* wchar.h */
|