summaryrefslogtreecommitdiff
path: root/libc/wcsmbs
diff options
context:
space:
mode:
authorjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2012-02-08 16:44:31 +0000
committerjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2012-02-08 16:44:31 +0000
commit78be84cd747c2e3965bf6c2fd5f702d6ff2f5525 (patch)
treec070a60ef7c5371bef8b7a559442a6920b394c8e /libc/wcsmbs
parentde06548e980675e65a1e6d850bb8c3a3f7ec638d (diff)
Merge changes between r16568 and r17050 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@17051 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'libc/wcsmbs')
-rw-r--r--libc/wcsmbs/Makefile5
-rw-r--r--libc/wcsmbs/bits/wchar2.h126
-rw-r--r--libc/wcsmbs/c16rtomb.c98
-rw-r--r--libc/wcsmbs/mbrtoc16.c75
-rw-r--r--libc/wcsmbs/mbrtowc.c9
-rw-r--r--libc/wcsmbs/tst-c16c32-1.c131
-rw-r--r--libc/wcsmbs/uchar.h6
-rw-r--r--libc/wcsmbs/wchar.h218
-rw-r--r--libc/wcsmbs/wcrtomb.c5
-rw-r--r--libc/wcsmbs/wcsmbsload.c89
-rw-r--r--libc/wcsmbs/wcsmbsload.h5
11 files changed, 385 insertions, 382 deletions
diff --git a/libc/wcsmbs/Makefile b/libc/wcsmbs/Makefile
index 4c6e5135b..c1817e975 100644
--- a/libc/wcsmbs/Makefile
+++ b/libc/wcsmbs/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1995-2000,2002,2003,2004,2005,2006,2007,2011
+# Copyright (C) 1995-2000,2002,2003,2004,2005,2006,2007,2011,2012
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@@ -53,7 +53,7 @@ routines-$(OPTION_POSIX_WIDE_CHAR_DEVICE_IO) \
strop-tests := wcscmp wmemcmp wcslen wcschr wcsrchr wcscpy
tests := tst-wchar-h
tests-$(OPTION_EGLIBC_LOCALE_CODE) \
- += tst-btowc tst-mbrtowc tst-mbrtowc2 tst-wcrtomb
+ += tst-btowc tst-mbrtowc tst-mbrtowc2 tst-wcrtomb tst-c16c32-1
tests-$(OPTION_POSIX_C_LANG_WIDE_CHAR) \
+= tst-wcstof wcsmbs-tst1 tst-wcsnlen \
tst-wcpncpy tst-mbsrtowcs wcsatcliff $(addprefix test-,$(strop-tests))
@@ -95,3 +95,4 @@ tst-btowc-ENV = LOCPATH=$(common-objpfx)localedata
tst-mbrtowc-ENV = LOCPATH=$(common-objpfx)localedata
tst-wcrtomb-ENV = LOCPATH=$(common-objpfx)localedata
tst-mbrtowc2-ENV = LOCPATH=$(common-objpfx)localedata
+tst-c16c32-1-ENV = LOCPATH=$(common-objpfx)localedata
diff --git a/libc/wcsmbs/bits/wchar2.h b/libc/wcsmbs/bits/wchar2.h
index c38eaa354..fc3afffd8 100644
--- a/libc/wcsmbs/bits/wchar2.h
+++ b/libc/wcsmbs/bits/wchar2.h
@@ -1,5 +1,5 @@
/* Checking macros for wchar functions.
- Copyright (C) 2005, 2006, 2007, 2010 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2006, 2007, 2010, 2012 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
@@ -23,21 +23,21 @@
extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1,
- __const wchar_t *__restrict __s2, size_t __n,
+ const wchar_t *__restrict __s2, size_t __n,
size_t __ns1) __THROW;
extern wchar_t *__REDIRECT_NTH (__wmemcpy_alias,
(wchar_t *__restrict __s1,
- __const wchar_t *__restrict __s2, size_t __n),
+ const wchar_t *__restrict __s2, size_t __n),
wmemcpy);
extern wchar_t *__REDIRECT_NTH (__wmemcpy_chk_warn,
(wchar_t *__restrict __s1,
- __const wchar_t *__restrict __s2, size_t __n,
+ const wchar_t *__restrict __s2, size_t __n,
size_t __ns1), __wmemcpy_chk)
__warnattr ("wmemcpy called with length bigger than size of destination "
"buffer");
__extern_always_inline wchar_t *
-__NTH (wmemcpy (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2,
+__NTH (wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2,
size_t __n))
{
if (__bos0 (__s1) != (size_t) -1)
@@ -54,19 +54,19 @@ __NTH (wmemcpy (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2,
}
-extern wchar_t *__wmemmove_chk (wchar_t *__s1, __const wchar_t *__s2,
+extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2,
size_t __n, size_t __ns1) __THROW;
extern wchar_t *__REDIRECT_NTH (__wmemmove_alias, (wchar_t *__s1,
- __const wchar_t *__s2,
+ const wchar_t *__s2,
size_t __n), wmemmove);
extern wchar_t *__REDIRECT_NTH (__wmemmove_chk_warn,
- (wchar_t *__s1, __const wchar_t *__s2,
+ (wchar_t *__s1, const wchar_t *__s2,
size_t __n, size_t __ns1), __wmemmove_chk)
__warnattr ("wmemmove called with length bigger than size of destination "
"buffer");
__extern_always_inline wchar_t *
-__NTH (wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n))
+__NTH (wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n))
{
if (__bos0 (__s1) != (size_t) -1)
{
@@ -84,21 +84,21 @@ __NTH (wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n))
#ifdef __USE_GNU
extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1,
- __const wchar_t *__restrict __s2, size_t __n,
+ const wchar_t *__restrict __s2, size_t __n,
size_t __ns1) __THROW;
extern wchar_t *__REDIRECT_NTH (__wmempcpy_alias,
(wchar_t *__restrict __s1,
- __const wchar_t *__restrict __s2,
+ const wchar_t *__restrict __s2,
size_t __n), wmempcpy);
extern wchar_t *__REDIRECT_NTH (__wmempcpy_chk_warn,
(wchar_t *__restrict __s1,
- __const wchar_t *__restrict __s2, size_t __n,
+ const wchar_t *__restrict __s2, size_t __n,
size_t __ns1), __wmempcpy_chk)
__warnattr ("wmempcpy called with length bigger than size of destination "
"buffer");
__extern_always_inline wchar_t *
-__NTH (wmempcpy (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2,
+__NTH (wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2,
size_t __n))
{
if (__bos0 (__s1) != (size_t) -1)
@@ -143,14 +143,14 @@ __NTH (wmemset (wchar_t *__s, wchar_t __c, size_t __n))
extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src,
+ const wchar_t *__restrict __src,
size_t __n) __THROW;
extern wchar_t *__REDIRECT_NTH (__wcscpy_alias,
(wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src), wcscpy);
+ const wchar_t *__restrict __src), wcscpy);
__extern_always_inline wchar_t *
-__NTH (wcscpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src))
+__NTH (wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
{
if (__bos (__dest) != (size_t) -1)
return __wcscpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
@@ -159,14 +159,14 @@ __NTH (wcscpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src))
extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src,
+ const wchar_t *__restrict __src,
size_t __destlen) __THROW;
extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias,
(wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src), wcpcpy);
+ const wchar_t *__restrict __src), wcpcpy);
__extern_always_inline wchar_t *
-__NTH (wcpcpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src))
+__NTH (wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
{
if (__bos (__dest) != (size_t) -1)
return __wcpcpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
@@ -175,21 +175,21 @@ __NTH (wcpcpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src))
extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src, size_t __n,
+ const wchar_t *__restrict __src, size_t __n,
size_t __destlen) __THROW;
extern wchar_t *__REDIRECT_NTH (__wcsncpy_alias,
(wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src,
+ const wchar_t *__restrict __src,
size_t __n), wcsncpy);
extern wchar_t *__REDIRECT_NTH (__wcsncpy_chk_warn,
(wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src,
+ const wchar_t *__restrict __src,
size_t __n, size_t __destlen), __wcsncpy_chk)
__warnattr ("wcsncpy called with length bigger than size of destination "
"buffer");
__extern_always_inline wchar_t *
-__NTH (wcsncpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src,
+__NTH (wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
size_t __n))
{
if (__bos (__dest) != (size_t) -1)
@@ -206,21 +206,21 @@ __NTH (wcsncpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src,
extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src, size_t __n,
+ const wchar_t *__restrict __src, size_t __n,
size_t __destlen) __THROW;
extern wchar_t *__REDIRECT_NTH (__wcpncpy_alias,
(wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src,
+ const wchar_t *__restrict __src,
size_t __n), wcpncpy);
extern wchar_t *__REDIRECT_NTH (__wcpncpy_chk_warn,
(wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src,
+ const wchar_t *__restrict __src,
size_t __n, size_t __destlen), __wcpncpy_chk)
__warnattr ("wcpncpy called with length bigger than size of destination "
"buffer");
__extern_always_inline wchar_t *
-__NTH (wcpncpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src,
+__NTH (wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
size_t __n))
{
if (__bos (__dest) != (size_t) -1)
@@ -237,14 +237,14 @@ __NTH (wcpncpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src,
extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src,
+ const wchar_t *__restrict __src,
size_t __destlen) __THROW;
extern wchar_t *__REDIRECT_NTH (__wcscat_alias,
(wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src), wcscat);
+ const wchar_t *__restrict __src), wcscat);
__extern_always_inline wchar_t *
-__NTH (wcscat (wchar_t *__restrict __dest, __const wchar_t *__restrict __src))
+__NTH (wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
{
if (__bos (__dest) != (size_t) -1)
return __wcscat_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
@@ -253,15 +253,15 @@ __NTH (wcscat (wchar_t *__restrict __dest, __const wchar_t *__restrict __src))
extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src,
+ const wchar_t *__restrict __src,
size_t __n, size_t __destlen) __THROW;
extern wchar_t *__REDIRECT_NTH (__wcsncat_alias,
(wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src,
+ const wchar_t *__restrict __src,
size_t __n), wcsncat);
__extern_always_inline wchar_t *
-__NTH (wcsncat (wchar_t *__restrict __dest, __const wchar_t *__restrict __src,
+__NTH (wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
size_t __n))
{
if (__bos (__dest) != (size_t) -1)
@@ -273,18 +273,18 @@ __NTH (wcsncat (wchar_t *__restrict __dest, __const wchar_t *__restrict __src,
extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n,
int __flag, size_t __s_len,
- __const wchar_t *__restrict __format, ...)
+ const wchar_t *__restrict __format, ...)
__THROW /* __attribute__ ((__format__ (__wprintf__, 5, 6))) */;
extern int __REDIRECT_NTH_LDBL (__swprintf_alias,
(wchar_t *__restrict __s, size_t __n,
- __const wchar_t *__restrict __fmt, ...),
+ const wchar_t *__restrict __fmt, ...),
swprintf);
#ifdef __va_arg_pack
__extern_always_inline int
__NTH (swprintf (wchar_t *__restrict __s, size_t __n,
- __const wchar_t *__restrict __fmt, ...))
+ const wchar_t *__restrict __fmt, ...))
{
if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
return __swprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
@@ -303,18 +303,18 @@ __NTH (swprintf (wchar_t *__restrict __s, size_t __n,
extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
int __flag, size_t __s_len,
- __const wchar_t *__restrict __format,
+ const wchar_t *__restrict __format,
__gnuc_va_list __arg)
__THROW /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
extern int __REDIRECT_NTH_LDBL (__vswprintf_alias,
(wchar_t *__restrict __s, size_t __n,
- __const wchar_t *__restrict __fmt,
+ const wchar_t *__restrict __fmt,
__gnuc_va_list __ap), vswprintf);
__extern_always_inline int
__NTH (vswprintf (wchar_t *__restrict __s, size_t __n,
- __const wchar_t *__restrict __fmt, __gnuc_va_list __ap))
+ const wchar_t *__restrict __fmt, __gnuc_va_list __ap))
{
if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
return __vswprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
@@ -326,24 +326,24 @@ __NTH (vswprintf (wchar_t *__restrict __s, size_t __n,
#if __USE_FORTIFY_LEVEL > 1
extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag,
- __const wchar_t *__restrict __format, ...);
-extern int __wprintf_chk (int __flag, __const wchar_t *__restrict __format,
+ const wchar_t *__restrict __format, ...);
+extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format,
...);
extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag,
- __const wchar_t *__restrict __format,
+ const wchar_t *__restrict __format,
__gnuc_va_list __ap);
-extern int __vwprintf_chk (int __flag, __const wchar_t *__restrict __format,
+extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format,
__gnuc_va_list __ap);
# ifdef __va_arg_pack
__extern_always_inline int
-wprintf (__const wchar_t *__restrict __fmt, ...)
+wprintf (const wchar_t *__restrict __fmt, ...)
{
return __wprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
}
__extern_always_inline int
-fwprintf (__FILE *__restrict __stream, __const wchar_t *__restrict __fmt, ...)
+fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...)
{
return __fwprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
__va_arg_pack ());
@@ -356,14 +356,14 @@ fwprintf (__FILE *__restrict __stream, __const wchar_t *__restrict __fmt, ...)
# endif
__extern_always_inline int
-vwprintf (__const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
+vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
{
return __vwprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap);
}
__extern_always_inline int
vfwprintf (__FILE *__restrict __stream,
- __const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
+ const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
{
return __vfwprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
}
@@ -455,24 +455,24 @@ __NTH (wcrtomb (char *__restrict __s, wchar_t __wchar,
extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst,
- __const char **__restrict __src,
+ const char **__restrict __src,
size_t __len, mbstate_t *__restrict __ps,
size_t __dstlen) __THROW;
extern size_t __REDIRECT_NTH (__mbsrtowcs_alias,
(wchar_t *__restrict __dst,
- __const char **__restrict __src,
+ const char **__restrict __src,
size_t __len, mbstate_t *__restrict __ps),
mbsrtowcs);
extern size_t __REDIRECT_NTH (__mbsrtowcs_chk_warn,
(wchar_t *__restrict __dst,
- __const char **__restrict __src,
+ const char **__restrict __src,
size_t __len, mbstate_t *__restrict __ps,
size_t __dstlen), __mbsrtowcs_chk)
__warnattr ("mbsrtowcs called with dst buffer smaller than len "
"* sizeof (wchar_t)");
__extern_always_inline size_t
-__NTH (mbsrtowcs (wchar_t *__restrict __dst, __const char **__restrict __src,
+__NTH (mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src,
size_t __len, mbstate_t *__restrict __ps))
{
if (__bos (__dst) != (size_t) -1)
@@ -490,23 +490,23 @@ __NTH (mbsrtowcs (wchar_t *__restrict __dst, __const char **__restrict __src,
extern size_t __wcsrtombs_chk (char *__restrict __dst,
- __const wchar_t **__restrict __src,
+ const wchar_t **__restrict __src,
size_t __len, mbstate_t *__restrict __ps,
size_t __dstlen) __THROW;
extern size_t __REDIRECT_NTH (__wcsrtombs_alias,
(char *__restrict __dst,
- __const wchar_t **__restrict __src,
+ const wchar_t **__restrict __src,
size_t __len, mbstate_t *__restrict __ps),
wcsrtombs);
extern size_t __REDIRECT_NTH (__wcsrtombs_chk_warn,
(char *__restrict __dst,
- __const wchar_t **__restrict __src,
+ const wchar_t **__restrict __src,
size_t __len, mbstate_t *__restrict __ps,
size_t __dstlen), __wcsrtombs_chk)
__warnattr ("wcsrtombs called with dst buffer smaller than len");
__extern_always_inline size_t
-__NTH (wcsrtombs (char *__restrict __dst, __const wchar_t **__restrict __src,
+__NTH (wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src,
size_t __len, mbstate_t *__restrict __ps))
{
if (__bos (__dst) != (size_t) -1)
@@ -523,24 +523,24 @@ __NTH (wcsrtombs (char *__restrict __dst, __const wchar_t **__restrict __src,
#ifdef __USE_GNU
extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst,
- __const char **__restrict __src, size_t __nmc,
+ const char **__restrict __src, size_t __nmc,
size_t __len, mbstate_t *__restrict __ps,
size_t __dstlen) __THROW;
extern size_t __REDIRECT_NTH (__mbsnrtowcs_alias,
(wchar_t *__restrict __dst,
- __const char **__restrict __src, size_t __nmc,
+ const char **__restrict __src, size_t __nmc,
size_t __len, mbstate_t *__restrict __ps),
mbsnrtowcs);
extern size_t __REDIRECT_NTH (__mbsnrtowcs_chk_warn,
(wchar_t *__restrict __dst,
- __const char **__restrict __src, size_t __nmc,
+ const char **__restrict __src, size_t __nmc,
size_t __len, mbstate_t *__restrict __ps,
size_t __dstlen), __mbsnrtowcs_chk)
__warnattr ("mbsnrtowcs called with dst buffer smaller than len "
"* sizeof (wchar_t)");
__extern_always_inline size_t
-__NTH (mbsnrtowcs (wchar_t *__restrict __dst, __const char **__restrict __src,
+__NTH (mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src,
size_t __nmc, size_t __len, mbstate_t *__restrict __ps))
{
if (__bos (__dst) != (size_t) -1)
@@ -558,25 +558,25 @@ __NTH (mbsnrtowcs (wchar_t *__restrict __dst, __const char **__restrict __src,
extern size_t __wcsnrtombs_chk (char *__restrict __dst,
- __const wchar_t **__restrict __src,
+ const wchar_t **__restrict __src,
size_t __nwc, size_t __len,
mbstate_t *__restrict __ps, size_t __dstlen)
__THROW;
extern size_t __REDIRECT_NTH (__wcsnrtombs_alias,
(char *__restrict __dst,
- __const wchar_t **__restrict __src,
+ const wchar_t **__restrict __src,
size_t __nwc, size_t __len,
mbstate_t *__restrict __ps), wcsnrtombs);
extern size_t __REDIRECT_NTH (__wcsnrtombs_chk_warn,
(char *__restrict __dst,
- __const wchar_t **__restrict __src,
+ const wchar_t **__restrict __src,
size_t __nwc, size_t __len,
mbstate_t *__restrict __ps,
size_t __dstlen), __wcsnrtombs_chk)
__warnattr ("wcsnrtombs called with dst buffer smaller than len");
__extern_always_inline size_t
-__NTH (wcsnrtombs (char *__restrict __dst, __const wchar_t **__restrict __src,
+__NTH (wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src,
size_t __nwc, size_t __len, mbstate_t *__restrict __ps))
{
if (__bos (__dst) != (size_t) -1)
diff --git a/libc/wcsmbs/c16rtomb.c b/libc/wcsmbs/c16rtomb.c
index c75ca3bf2..5374c755c 100644
--- a/libc/wcsmbs/c16rtomb.c
+++ b/libc/wcsmbs/c16rtomb.c
@@ -1,6 +1,6 @@
/* Copyright (C) 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 2011.
+ Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -17,25 +17,8 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <assert.h>
-#include <dlfcn.h>
-#include <errno.h>
-#include <gconv.h>
-#include <stdlib.h>
#include <uchar.h>
-#include <wcsmbsload.h>
-
-#include <sysdep.h>
-
-#ifndef EILSEQ
-# define EILSEQ EINVAL
-#endif
-
-#if __STDC__ >= 201000L
-# define u(c) U##c
-#else
-# define u(c) L##c
-#endif
+#include <wchar.h>
/* This is the private state used if PS is NULL. */
@@ -44,78 +27,7 @@ static mbstate_t state;
size_t
c16rtomb (char *s, char16_t c16, mbstate_t *ps)
{
- char buf[MB_CUR_MAX];
- struct __gconv_step_data data;
- int status;
- size_t result;
- size_t dummy;
- const struct gconv_fcts *fcts;
-
- /* Set information for this step. */
- data.__invocation_counter = 0;
- data.__internal_use = 1;
- data.__flags = __GCONV_IS_LAST;
- data.__statep = ps ?: &state;
- data.__trans = NULL;
-
- /* A first special case is if S is NULL. This means put PS in the
- initial state. */
- if (s == NULL)
- {
- s = buf;
- c16 = u('\0');
- }
-
- /* Tell where we want to have the result. */
- data.__outbuf = (unsigned char *) s;
- data.__outbufend = (unsigned char *) s + MB_CUR_MAX;
-
- /* Get the conversion functions. */
- fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
- __gconv_fct fct = fcts->fromc16->__fct;
-#ifdef PTR_DEMANGLE
- if (fcts->tomb->__shlib_handle != NULL)
- PTR_DEMANGLE (fct);
-#endif
-
- /* If C16 is the NUL character we write into the output buffer the byte
- sequence necessary for PS to get into the initial state, followed
- by a NUL byte. */
- if (c16 == L'\0')
- {
- status = DL_CALL_FCT (fct, (fcts->fromc16, &data, NULL, NULL,
- NULL, &dummy, 1, 1));
-
- if (status == __GCONV_OK || status == __GCONV_EMPTY_INPUT)
- *data.__outbuf++ = '\0';
- }
- else
- {
- /* Do a normal conversion. */
- const unsigned char *inbuf = (const unsigned char *) &c16;
-
- status = DL_CALL_FCT (fct,
- (fcts->fromc16, &data, &inbuf,
- inbuf + sizeof (char16_t), NULL, &dummy, 0, 1));
- }
-
- /* There must not be any problems with the conversion but illegal input
- characters. The output buffer must be large enough, otherwise the
- definition of MB_CUR_MAX is not correct. All the other possible
- errors also must not happen. */
- assert (status == __GCONV_OK || status == __GCONV_EMPTY_INPUT
- || status == __GCONV_ILLEGAL_INPUT
- || status == __GCONV_INCOMPLETE_INPUT
- || status == __GCONV_FULL_OUTPUT);
-
- if (status == __GCONV_OK || status == __GCONV_EMPTY_INPUT
- || status == __GCONV_FULL_OUTPUT)
- result = data.__outbuf - (unsigned char *) s;
- else
- {
- result = (size_t) -1;
- __set_errno (EILSEQ);
- }
-
- return result;
+ // XXX The ISO C 11 spec I have does not say anything about handling
+ // XXX surrogates in this interface.
+ return wcrtomb (s, c16, ps ?: &state);
}
diff --git a/libc/wcsmbs/mbrtoc16.c b/libc/wcsmbs/mbrtoc16.c
index 7b5822d69..f5ed2b4ac 100644
--- a/libc/wcsmbs/mbrtoc16.c
+++ b/libc/wcsmbs/mbrtoc16.c
@@ -1,6 +1,6 @@
/* Copyright (C) 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@gnu.org>, 2011.
+ Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -30,12 +30,6 @@
# define EILSEQ EINVAL
#endif
-#if __STDC__ >= 201000L
-# define U(c) U##c
-#else
-# define U(c) L##c
-#endif
-
/* This is the private state used if PS is NULL. */
static mbstate_t state;
@@ -43,34 +37,51 @@ static mbstate_t state;
size_t
mbrtoc16 (char16_t *pc16, const char *s, size_t n, mbstate_t *ps)
{
- char16_t buf[1];
+ if (ps == NULL)
+ ps = &state;
+
+ /* The standard text does not say that S being NULL means the state
+ is reset even if the second half of a surrogate still have to be
+ returned. In fact, the error code description indicates
+ otherwise. Therefore always first try to return a second
+ half. */
+ if (ps->__count & 0x80000000)
+ {
+ /* We have to return the second word for a surrogate. */
+ ps->__count &= 0x7fffffff;
+ *pc16 = ps->__value.__wch;
+ ps->__value.__wch = L'\0';
+ return (size_t) -3;
+ }
+
+ wchar_t wc;
struct __gconv_step_data data;
int status;
size_t result;
size_t dummy;
const unsigned char *inbuf, *endbuf;
- unsigned char *outbuf = (unsigned char *) (pc16 ?: buf);
+ unsigned char *outbuf = (unsigned char *) &wc;
const struct gconv_fcts *fcts;
/* Set information for this step. */
data.__invocation_counter = 0;
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
- data.__statep = ps ?: &state;
+ data.__statep = ps;
data.__trans = NULL;
/* A first special case is if S is NULL. This means put PS in the
initial state. */
if (s == NULL)
{
- outbuf = (unsigned char *) buf;
+ pc16 = NULL;
s = "";
n = 1;
}
/* Tell where we want the result. */
data.__outbuf = outbuf;
- data.__outbufend = outbuf + sizeof (char16_t);
+ data.__outbufend = outbuf + sizeof (wchar_t);
/* Get the conversion functions. */
fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
@@ -79,13 +90,18 @@ mbrtoc16 (char16_t *pc16, const char *s, size_t n, mbstate_t *ps)
inbuf = (const unsigned char *) s;
endbuf = inbuf + n;
if (__builtin_expect (endbuf < inbuf, 0))
- endbuf = (const unsigned char *) ~(uintptr_t) 0;
- __gconv_fct fct = fcts->toc16->__fct;
+ {
+ endbuf = (const unsigned char *) ~(uintptr_t) 0;
+ if (endbuf == inbuf)
+ goto ilseq;
+ }
+ __gconv_fct fct = fcts->towc->__fct;
#ifdef PTR_DEMANGLE
- if (fcts->toc16->__shlib_handle != NULL)
+ if (fcts->towc->__shlib_handle != NULL)
PTR_DEMANGLE (fct);
#endif
- status = DL_CALL_FCT (fct, (fcts->toc16, &data, &inbuf, endbuf,
+
+ status = DL_CALL_FCT (fct, (fcts->towc, &data, &inbuf, endbuf,
NULL, &dummy, 0, 1));
/* There must not be any problems with the conversion but illegal input
@@ -100,20 +116,35 @@ mbrtoc16 (char16_t *pc16, const char *s, size_t n, mbstate_t *ps)
if (status == __GCONV_OK || status == __GCONV_EMPTY_INPUT
|| status == __GCONV_FULL_OUTPUT)
{
- if (data.__outbuf != (unsigned char *) outbuf
- && *(char16_t *) outbuf == U('\0'))
+ result = inbuf - (const unsigned char *) s;
+
+ if (wc < 0x10000)
{
- /* The converted character is the NUL character. */
- assert (__mbsinit (data.__statep));
- result = 0;
+ if (pc16 != NULL)
+ *pc16 = wc;
+
+ if (data.__outbuf != outbuf && wc == L'\0')
+ {
+ /* The converted character is the NUL character. */
+ assert (__mbsinit (data.__statep));
+ result = 0;
+ }
}
else
- result = inbuf - (const unsigned char *) s;
+ {
+ /* This is a surrogate. */
+ if (pc16 != NULL)
+ *pc16 = 0xd7c0 + (wc >> 10);
+
+ ps->__count |= 0x80000000;
+ ps->__value.__wch = 0xdc00 + (wc & 0x3ff);
+ }
}
else if (status == __GCONV_INCOMPLETE_INPUT)
result = (size_t) -2;
else
{
+ ilseq:
result = (size_t) -1;
__set_errno (EILSEQ);
}
diff --git a/libc/wcsmbs/mbrtowc.c b/libc/wcsmbs/mbrtowc.c
index 03b8348d3..0c99b7401 100644
--- a/libc/wcsmbs/mbrtowc.c
+++ b/libc/wcsmbs/mbrtowc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2004, 2005, 2011
+/* Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2004, 2005, 2011, 2012
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
@@ -73,7 +73,11 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
inbuf = (const unsigned char *) s;
endbuf = inbuf + n;
if (__builtin_expect (endbuf < inbuf, 0))
- endbuf = (const unsigned char *) ~(uintptr_t) 0;
+ {
+ endbuf = (const unsigned char *) ~(uintptr_t) 0;
+ if (endbuf == inbuf)
+ goto ilseq;
+ }
__gconv_fct fct = fcts->towc->__fct;
#ifdef PTR_DEMANGLE
if (fcts->towc->__shlib_handle != NULL)
@@ -108,6 +112,7 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
result = (size_t) -2;
else
{
+ ilseq:
result = (size_t) -1;
__set_errno (EILSEQ);
}
diff --git a/libc/wcsmbs/tst-c16c32-1.c b/libc/wcsmbs/tst-c16c32-1.c
new file mode 100644
index 000000000..f4534c5d9
--- /dev/null
+++ b/libc/wcsmbs/tst-c16c32-1.c
@@ -0,0 +1,131 @@
+#include <inttypes.h>
+#include <locale.h>
+#include <stdio.h>
+#include <uchar.h>
+
+
+static int
+do_test (void)
+{
+ if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL)
+ {
+ puts ("cannot set locale");
+ return 1;
+ }
+
+ int result = 0;
+
+ char32_t c32 = 48;
+ do
+ {
+ if (c32 >= 0xd800 && c32 <= 0xe000)
+ continue;
+
+ char buf[20];
+ size_t n1 = c32rtomb (buf, c32, NULL);
+ if (n1 <= 0)
+ {
+ printf ("c32rtomb for U'\\x%" PRIx32 "' failed\n", (uint32_t) c32);
+ result = 1;
+ continue;
+ }
+
+ char32_t c32out;
+ size_t n2 = mbrtoc32 (&c32out, buf, n1, NULL);
+ if ((ssize_t) n2 < 0)
+ {
+ printf ("mbrtoc32 for U'\\x%" PRIx32 "' failed\n", (uint32_t) c32);
+ result = 1;
+ continue;
+ }
+ if (n2 != n1)
+ {
+ printf ("mbrtoc32 for U'\\x%" PRIx32 "' consumed %zu bytes, not %zu\n",
+ (uint32_t) c32, n2, n1);
+ result = 1;
+ }
+ else if (c32out != c32)
+ {
+ printf ("mbrtoc32 for U'\\x%" PRIx32 "' produced U'\\x%" PRIx32 "\n",
+ (uint32_t) c32, (uint32_t) c32out);
+ result = 1;
+ }
+
+ char16_t c16;
+ size_t n3 = mbrtoc16 (&c16, buf, n1, NULL);
+ if (n3 != n1)
+ {
+ printf ("mbrtoc16 for U'\\x%" PRIx32 "' did not consume all bytes\n",
+ (uint32_t) c32);
+ result = 1;
+ continue;
+ }
+ if (c32 < 0x10000)
+ {
+ if (c16 != c32)
+ {
+ printf ("mbrtoc16 for U'\\x%" PRIx32 "' produce u'\\x%" PRIx16 "'\n",
+ (uint32_t) c32, (uint16_t) c16);
+ result = 1;
+ continue;
+ }
+ }
+ else
+ {
+ buf[0] = '1';
+ char16_t c16_2;
+ size_t n4 = mbrtoc16 (&c16_2, buf, 1, NULL);
+ if (n4 != (size_t) -3)
+ {
+ printf ("second mbrtoc16 for U'\\x%" PRIx32 "' did not return -3\n",
+ (uint32_t) c32);
+ result = 1;
+ continue;
+ }
+
+ if (c32 != (((uint32_t) (c16 - 0xd7c0)) << 10) + (c16_2 - 0xdc00))
+ {
+ printf ("mbrtoc16 for U'\\x%" PRIx32 "' returns U'\\x%" PRIx32 "\n",
+ (uint32_t) c32,
+ (((uint32_t) (c16 - 0xd7c0)) << 10) + (c16_2 - 0xdc00));
+ result = 1;
+ continue;
+ }
+ }
+
+ buf[0] = '\0';
+ char16_t c16_nul;
+ n3 = mbrtoc16 (&c16_nul, buf, n1, NULL);
+ if (n3 != 0)
+ {
+ printf ("mbrtoc16 for '\\0' returns %zd\n", n3);
+ result = 1;
+ continue;
+ }
+
+ if (c32 < 0x10000)
+ {
+ size_t n5 = c16rtomb (buf, c16, NULL);
+ if ((ssize_t) n5 < 0)
+ {
+ printf ("c16rtomb for U'\\x%" PRIx32 "' failed with %zd\n",
+ (uint32_t) c32, n5);
+ result = 1;
+ continue;
+ }
+ if (n5 != n1)
+ {
+ printf ("c16rtomb for U'\\x%" PRIx32 "' produced %zu bytes instead of %zu bytes\n",
+ (uint32_t) c32, n5, n1);
+ result = 1;
+ continue;
+ }
+ }
+ }
+ while ((c32 += 0x1111) <= U'\x12000');
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/libc/wcsmbs/uchar.h b/libc/wcsmbs/uchar.h
index 706b9a243..3056c7636 100644
--- a/libc/wcsmbs/uchar.h
+++ b/libc/wcsmbs/uchar.h
@@ -44,7 +44,7 @@ __END_NAMESPACE_C99
/* Define the 16-bit and 32-bit character types. Use the information
provided by the compiler. */
# if !defined __CHAR16_TYPE__ || !defined __CHAR32_TYPE__
-# if defined __STDC__ && __STDC__ < 201000L
+# if defined __STDC_VERSION__ && __STDC_VERSION__ < 201000L
# error "<uchar.h> requires ISO C11 mode"
# else
# error "definitions of __CHAR16_TYPE__ and/or __CHAR32_TYPE__ missing"
@@ -60,7 +60,7 @@ __BEGIN_DECLS
/* Write char16_t representation of multibyte character pointed
to by S to PC16. */
extern size_t mbrtoc16 (char16_t *__restrict __pc16,
- __const char *__restrict __s, size_t __n,
+ const char *__restrict __s, size_t __n,
mbstate_t *__restrict __p) __THROW;
/* Write multibyte representation of char16_t C16 to S. */
@@ -72,7 +72,7 @@ extern size_t c16rtomb (char *__restrict __s, char16_t __c16,
/* Write char32_t representation of multibyte character pointed
to by S to PC32. */
extern size_t mbrtoc32 (char32_t *__restrict __pc32,
- __const char *__restrict __s, size_t __n,
+ const char *__restrict __s, size_t __n,
mbstate_t *__restrict __p) __THROW;
/* Write multibyte representation of char32_t C32 to S. */
diff --git a/libc/wcsmbs/wchar.h b/libc/wcsmbs/wchar.h
index ccaaed8f4..1a81d23da 100644
--- a/libc/wcsmbs/wchar.h
+++ b/libc/wcsmbs/wchar.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 1995-2008, 2009, 2010, 2011, 2012 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
@@ -146,56 +146,56 @@ __USING_NAMESPACE_STD(tm)
__BEGIN_NAMESPACE_STD
/* Copy SRC to DEST. */
extern wchar_t *wcscpy (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src) __THROW;
+ const wchar_t *__restrict __src) __THROW;
/* Copy no more than N wide-characters of SRC to DEST. */
extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src, size_t __n)
+ const wchar_t *__restrict __src, size_t __n)
__THROW;
/* Append SRC onto DEST. */
extern wchar_t *wcscat (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src) __THROW;
+ const wchar_t *__restrict __src) __THROW;
/* Append no more than N wide-characters of SRC onto DEST. */
extern wchar_t *wcsncat (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src, size_t __n)
+ const wchar_t *__restrict __src, size_t __n)
__THROW;
/* Compare S1 and S2. */
-extern int wcscmp (__const wchar_t *__s1, __const wchar_t *__s2)
+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)
+extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
__THROW __attribute_pure__;
__END_NAMESPACE_STD
#ifdef __USE_XOPEN2K8
/* Compare S1 and S2, ignoring case. */
-extern int wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2) __THROW;
+extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) __THROW;
/* Compare no more than N chars of S1 and S2, ignoring case. */
-extern int wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2,
+extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
size_t __n) __THROW;
/* 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 (__const wchar_t *__s1, __const wchar_t *__s2,
+extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
__locale_t __loc) __THROW;
-extern int wcsncasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
+extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
size_t __n, __locale_t __loc) __THROW;
#endif
__BEGIN_NAMESPACE_STD
/* Compare S1 and S2, both interpreted as appropriate to the
LC_COLLATE category of the current locale. */
-extern int wcscoll (__const wchar_t *__s1, __const wchar_t *__s2) __THROW;
+extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) __THROW;
/* 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 (wchar_t *__restrict __s1,
- __const wchar_t *__restrict __s2, size_t __n) __THROW;
+ const wchar_t *__restrict __s2, size_t __n) __THROW;
__END_NAMESPACE_STD
#ifdef __USE_XOPEN2K8
@@ -204,17 +204,17 @@ __END_NAMESPACE_STD
/* Compare S1 and S2, both interpreted as appropriate to the
LC_COLLATE category of the given locale. */
-extern int wcscoll_l (__const wchar_t *__s1, __const wchar_t *__s2,
+extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
__locale_t __loc) __THROW;
/* 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 (wchar_t *__s1, __const wchar_t *__s2,
+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 __attribute_malloc__;
+extern wchar_t *wcsdup (const wchar_t *__s) __THROW __attribute_malloc__;
#endif
__BEGIN_NAMESPACE_STD
@@ -222,20 +222,20 @@ __BEGIN_NAMESPACE_STD
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc)
__THROW __asm ("wcschr") __attribute_pure__;
-extern "C++" __const wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
+extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
__THROW __asm ("wcschr") __attribute_pure__;
#else
-extern wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
+extern wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
__THROW __attribute_pure__;
#endif
/* Find the last occurrence of WC in WCS. */
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc)
__THROW __asm ("wcsrchr") __attribute_pure__;
-extern "C++" __const wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
+extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
__THROW __asm ("wcsrchr") __attribute_pure__;
#else
-extern wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
+extern wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
__THROW __attribute_pure__;
#endif
__END_NAMESPACE_STD
@@ -243,68 +243,68 @@ __END_NAMESPACE_STD
#ifdef __USE_GNU
/* This function 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)
+extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc)
__THROW __attribute_pure__;
#endif
__BEGIN_NAMESPACE_STD
/* 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)
+extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
__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)
+extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
__THROW __attribute_pure__;
/* Find the first occurrence in WCS of any character in ACCEPT. */
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
-extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, __const wchar_t *__accept)
+extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept)
__THROW __asm ("wcspbrk") __attribute_pure__;
-extern "C++" __const wchar_t *wcspbrk (__const wchar_t *__wcs,
- __const wchar_t *__accept)
+extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs,
+ const wchar_t *__accept)
__THROW __asm ("wcspbrk") __attribute_pure__;
#else
-extern wchar_t *wcspbrk (__const wchar_t *__wcs, __const wchar_t *__accept)
+extern wchar_t *wcspbrk (const wchar_t *__wcs, const wchar_t *__accept)
__THROW __attribute_pure__;
#endif
/* Find the first occurrence of NEEDLE in HAYSTACK. */
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
-extern "C++" wchar_t *wcsstr (wchar_t *__haystack, __const wchar_t *__needle)
+extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle)
__THROW __asm ("wcsstr") __attribute_pure__;
-extern "C++" __const wchar_t *wcsstr (__const wchar_t *__haystack,
- __const wchar_t *__needle)
+extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack,
+ const wchar_t *__needle)
__THROW __asm ("wcsstr") __attribute_pure__;
#else
-extern wchar_t *wcsstr (__const wchar_t *__haystack, __const wchar_t *__needle)
+extern wchar_t *wcsstr (const wchar_t *__haystack, const wchar_t *__needle)
__THROW __attribute_pure__;
#endif
/* Divide WCS into tokens separated by characters in DELIM. */
extern wchar_t *wcstok (wchar_t *__restrict __s,
- __const wchar_t *__restrict __delim,
+ const wchar_t *__restrict __delim,
wchar_t **__restrict __ptr) __THROW;
/* Return the number of wide characters in S. */
-extern size_t wcslen (__const wchar_t *__s) __THROW __attribute_pure__;
+extern size_t wcslen (const wchar_t *__s) __THROW __attribute_pure__;
__END_NAMESPACE_STD
#ifdef __USE_XOPEN
/* Another name for `wcsstr' from XPG4. */
# ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
-extern "C++" wchar_t *wcswcs (wchar_t *__haystack, __const wchar_t *__needle)
+extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle)
__THROW __asm ("wcswcs") __attribute_pure__;
-extern "C++" __const wchar_t *wcswcs (__const wchar_t *__haystack,
- __const wchar_t *__needle)
+extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack,
+ const wchar_t *__needle)
__THROW __asm ("wcswcs") __attribute_pure__;
# else
-extern wchar_t *wcswcs (__const wchar_t *__haystack, __const wchar_t *__needle)
+extern wchar_t *wcswcs (const wchar_t *__haystack, const wchar_t *__needle)
__THROW __attribute_pure__;
# endif
#endif
#ifdef __USE_XOPEN2K8
/* Return the number of wide characters in S, but at most MAXLEN. */
-extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen)
+extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
__THROW __attribute_pure__;
#endif
@@ -314,25 +314,25 @@ __BEGIN_NAMESPACE_STD
#ifdef __CORRECT_ISO_CPP_WCHAR_H_PROTO
extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n)
__THROW __asm ("wmemchr") __attribute_pure__;
-extern "C++" __const wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c,
- size_t __n)
+extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c,
+ size_t __n)
__THROW __asm ("wmemchr") __attribute_pure__;
#else
-extern wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c, size_t __n)
+extern wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, size_t __n)
__THROW __attribute_pure__;
#endif
/* Compare N wide characters of S1 and S2. */
-extern int wmemcmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)
+extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
__THROW __attribute_pure__;
/* Copy N wide characters of SRC to DEST. */
extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
- __const wchar_t *__restrict __s2, size_t __n) __THROW;
+ const wchar_t *__restrict __s2, size_t __n) __THROW;
/* Copy N wide characters of SRC to DEST, guaranteeing
correct behavior for overlapping strings. */
-extern wchar_t *wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n)
+extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)
__THROW;
/* Set N wide characters of S to C. */
@@ -343,7 +343,7 @@ __END_NAMESPACE_STD
/* Copy N wide characters of SRC to DEST and return pointer to following
wide character. */
extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
- __const wchar_t *__restrict __s2, size_t __n)
+ const wchar_t *__restrict __s2, size_t __n)
__THROW;
#endif
@@ -359,12 +359,12 @@ extern int wctob (wint_t __c) __THROW;
/* Determine whether PS points to an object representing the initial
state. */
-extern int mbsinit (__const mbstate_t *__ps) __THROW __attribute_pure__;
+extern int mbsinit (const mbstate_t *__ps) __THROW __attribute_pure__;
/* Write wide character representation of multibyte character pointed
to by S to PWC. */
extern size_t mbrtowc (wchar_t *__restrict __pwc,
- __const char *__restrict __s, size_t __n,
+ const char *__restrict __s, size_t __n,
mbstate_t *__restrict __p) __THROW;
/* Write multibyte representation of wide character WC to S. */
@@ -372,9 +372,9 @@ extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
mbstate_t *__restrict __ps) __THROW;
/* Return number of bytes in multibyte character pointed to by S. */
-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;
-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;
__END_NAMESPACE_STD
@@ -397,7 +397,7 @@ __NTH (wctob (wint_t __wc))
? (int) __wc : __wctob_alias (__wc)); }
__extern_inline size_t
-__NTH (mbrlen (__const char *__restrict __s, size_t __n,
+__NTH (mbrlen (const char *__restrict __s, size_t __n,
mbstate_t *__restrict __ps))
{ return (__ps != NULL
? mbrtowc (NULL, __s, __n, __ps) : __mbrlen (__s, __n, NULL)); }
@@ -407,13 +407,13 @@ __BEGIN_NAMESPACE_STD
/* Write wide character representation of multibyte character string
SRC to DST. */
extern size_t mbsrtowcs (wchar_t *__restrict __dst,
- __const char **__restrict __src, size_t __len,
+ const char **__restrict __src, size_t __len,
mbstate_t *__restrict __ps) __THROW;
/* Write multibyte character representation of wide character string
SRC to DST. */
extern size_t wcsrtombs (char *__restrict __dst,
- __const wchar_t **__restrict __src, size_t __len,
+ const wchar_t **__restrict __src, size_t __len,
mbstate_t *__restrict __ps) __THROW;
__END_NAMESPACE_STD
@@ -422,13 +422,13 @@ __END_NAMESPACE_STD
/* Write wide character representation of at most NMC bytes of the
multibyte character string SRC to DST. */
extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
- __const char **__restrict __src, size_t __nmc,
+ const char **__restrict __src, size_t __nmc,
size_t __len, mbstate_t *__restrict __ps) __THROW;
/* Write multibyte character representation of at most NWC characters
from the wide character string SRC to DST. */
extern size_t wcsnrtombs (char *__restrict __dst,
- __const wchar_t **__restrict __src,
+ const wchar_t **__restrict __src,
size_t __nwc, size_t __len,
mbstate_t *__restrict __ps) __THROW;
#endif /* use POSIX 2008 */
@@ -441,23 +441,23 @@ extern int wcwidth (wchar_t __c) __THROW;
/* Determine number of column positions required for first N wide
characters (or fewer if S ends before this) in S. */
-extern int wcswidth (__const wchar_t *__s, size_t __n) __THROW;
+extern int wcswidth (const wchar_t *__s, size_t __n) __THROW;
#endif /* Use X/Open. */
__BEGIN_NAMESPACE_STD
/* Convert initial portion of the wide string NPTR to `double'
representation. */
-extern double wcstod (__const wchar_t *__restrict __nptr,
+extern double wcstod (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr) __THROW;
__END_NAMESPACE_STD
#ifdef __USE_ISOC99
__BEGIN_NAMESPACE_C99
/* Likewise for `float' and `long double' sizes of floating-point numbers. */
-extern float wcstof (__const wchar_t *__restrict __nptr,
+extern float wcstof (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr) __THROW;
-extern long double wcstold (__const wchar_t *__restrict __nptr,
+extern long double wcstold (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr) __THROW;
__END_NAMESPACE_C99
#endif /* C99 */
@@ -466,12 +466,12 @@ __END_NAMESPACE_C99
__BEGIN_NAMESPACE_STD
/* Convert initial portion of wide string NPTR to `long int'
representation. */
-extern long int wcstol (__const wchar_t *__restrict __nptr,
+extern long int wcstol (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base) __THROW;
/* Convert initial portion of wide string NPTR to `unsigned long int'
representation. */
-extern unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
+extern unsigned long int wcstoul (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base)
__THROW;
__END_NAMESPACE_STD
@@ -481,14 +481,14 @@ __BEGIN_NAMESPACE_C99
/* Convert initial portion of wide string NPTR to `long long int'
representation. */
__extension__
-extern long long int wcstoll (__const wchar_t *__restrict __nptr,
+extern long long int wcstoll (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base)
__THROW;
/* Convert initial portion of wide string NPTR to `unsigned long long int'
representation. */
__extension__
-extern unsigned long long int wcstoull (__const wchar_t *__restrict __nptr,
+extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base) __THROW;
__END_NAMESPACE_C99
@@ -498,14 +498,14 @@ __END_NAMESPACE_C99
/* Convert initial portion of wide string NPTR to `long long int'
representation. */
__extension__
-extern long long int wcstoq (__const wchar_t *__restrict __nptr,
+extern long long int wcstoq (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base)
__THROW;
/* Convert initial portion of wide string NPTR to `unsigned long long int'
representation. */
__extension__
-extern unsigned long long int wcstouq (__const wchar_t *__restrict __nptr,
+extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base) __THROW;
#endif /* GCC and use GNU. */
@@ -528,34 +528,34 @@ extern unsigned long long int wcstouq (__const wchar_t *__restrict __nptr,
/* Special versions of the functions above which take the locale to
use as an additional parameter. */
-extern long int wcstol_l (__const wchar_t *__restrict __nptr,
+extern long int wcstol_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base,
__locale_t __loc) __THROW;
-extern unsigned long int wcstoul_l (__const wchar_t *__restrict __nptr,
+extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base, __locale_t __loc) __THROW;
__extension__
-extern long long int wcstoll_l (__const wchar_t *__restrict __nptr,
+extern long long int wcstoll_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base, __locale_t __loc) __THROW;
__extension__
-extern unsigned long long int wcstoull_l (__const wchar_t *__restrict __nptr,
+extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base, __locale_t __loc)
__THROW;
-extern double wcstod_l (__const wchar_t *__restrict __nptr,
+extern double wcstod_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, __locale_t __loc)
__THROW;
-extern float wcstof_l (__const wchar_t *__restrict __nptr,
+extern float wcstof_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, __locale_t __loc)
__THROW;
-extern long double wcstold_l (__const wchar_t *__restrict __nptr,
+extern long double wcstold_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
__locale_t __loc) __THROW;
#endif /* use GNU */
@@ -565,12 +565,12 @@ extern long double wcstold_l (__const wchar_t *__restrict __nptr,
/* Copy SRC to DEST, returning the address of the terminating L'\0' in
DEST. */
extern wchar_t *wcpcpy (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src) __THROW;
+ const wchar_t *__restrict __src) __THROW;
/* Copy no more than N characters of SRC to DEST, returning the address of
the last character written into DEST. */
extern wchar_t *wcpncpy (wchar_t *__restrict __dest,
- __const wchar_t *__restrict __src, size_t __n)
+ const wchar_t *__restrict __src, size_t __n)
__THROW;
@@ -593,17 +593,17 @@ extern int fwide (__FILE *__fp, int __mode) __THROW;
This function is a possible cancellation point and therefore not
marked with __THROW. */
extern int fwprintf (__FILE *__restrict __stream,
- __const wchar_t *__restrict __format, ...)
+ const wchar_t *__restrict __format, ...)
/* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
/* Write formatted output to stdout.
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern int wprintf (__const wchar_t *__restrict __format, ...)
+extern int wprintf (const wchar_t *__restrict __format, ...)
/* __attribute__ ((__format__ (__wprintf__, 1, 2))) */;
/* Write formatted output of at most N characters to S. */
extern int swprintf (wchar_t *__restrict __s, size_t __n,
- __const wchar_t *__restrict __format, ...)
+ const wchar_t *__restrict __format, ...)
__THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */;
/* Write formatted output to S from argument list ARG.
@@ -611,20 +611,20 @@ extern int swprintf (wchar_t *__restrict __s, size_t __n,
This function is a possible cancellation point and therefore not
marked with __THROW. */
extern int vfwprintf (__FILE *__restrict __s,
- __const wchar_t *__restrict __format,
+ const wchar_t *__restrict __format,
__gnuc_va_list __arg)
/* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
/* Write formatted output to stdout from argument list ARG.
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern int vwprintf (__const wchar_t *__restrict __format,
+extern int vwprintf (const wchar_t *__restrict __format,
__gnuc_va_list __arg)
/* __attribute__ ((__format__ (__wprintf__, 1, 0))) */;
/* Write formatted output of at most N character to S from argument
list ARG. */
extern int vswprintf (wchar_t *__restrict __s, size_t __n,
- __const wchar_t *__restrict __format,
+ const wchar_t *__restrict __format,
__gnuc_va_list __arg)
__THROW /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
@@ -634,17 +634,17 @@ extern int vswprintf (wchar_t *__restrict __s, size_t __n,
This function is a possible cancellation point and therefore not
marked with __THROW. */
extern int fwscanf (__FILE *__restrict __stream,
- __const wchar_t *__restrict __format, ...)
+ const wchar_t *__restrict __format, ...)
/* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
/* Read formatted input from stdin.
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern int wscanf (__const wchar_t *__restrict __format, ...)
+extern int wscanf (const wchar_t *__restrict __format, ...)
/* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
/* Read formatted input from S. */
-extern int swscanf (__const wchar_t *__restrict __s,
- __const wchar_t *__restrict __format, ...)
+extern int swscanf (const wchar_t *__restrict __s,
+ const wchar_t *__restrict __format, ...)
__THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
# if defined __USE_ISOC99 && !defined __USE_GNU \
@@ -655,22 +655,22 @@ extern int swscanf (__const wchar_t *__restrict __s,
GNU extension which conflicts with valid %a followed by letter
s, S or [. */
extern int __REDIRECT (fwscanf, (__FILE *__restrict __stream,
- __const wchar_t *__restrict __format, ...),
+ const wchar_t *__restrict __format, ...),
__isoc99_fwscanf)
/* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
-extern int __REDIRECT (wscanf, (__const wchar_t *__restrict __format, ...),
+extern int __REDIRECT (wscanf, (const wchar_t *__restrict __format, ...),
__isoc99_wscanf)
/* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
-extern int __REDIRECT_NTH (swscanf, (__const wchar_t *__restrict __s,
- __const wchar_t *__restrict __format,
+extern int __REDIRECT_NTH (swscanf, (const wchar_t *__restrict __s,
+ const wchar_t *__restrict __format,
...), __isoc99_swscanf)
/* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
# else
extern int __isoc99_fwscanf (__FILE *__restrict __stream,
- __const wchar_t *__restrict __format, ...);
-extern int __isoc99_wscanf (__const wchar_t *__restrict __format, ...);
-extern int __isoc99_swscanf (__const wchar_t *__restrict __s,
- __const wchar_t *__restrict __format, ...)
+ const wchar_t *__restrict __format, ...);
+extern int __isoc99_wscanf (const wchar_t *__restrict __format, ...);
+extern int __isoc99_swscanf (const wchar_t *__restrict __s,
+ const wchar_t *__restrict __format, ...)
__THROW;
# define fwscanf __isoc99_fwscanf
# define wscanf __isoc99_wscanf
@@ -688,19 +688,19 @@ __BEGIN_NAMESPACE_C99
This function is a possible cancellation point and therefore not
marked with __THROW. */
extern int vfwscanf (__FILE *__restrict __s,
- __const wchar_t *__restrict __format,
+ const wchar_t *__restrict __format,
__gnuc_va_list __arg)
/* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
/* Read formatted input from stdin into argument list ARG.
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern int vwscanf (__const wchar_t *__restrict __format,
+extern int vwscanf (const wchar_t *__restrict __format,
__gnuc_va_list __arg)
/* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
/* Read formatted input from S into argument list ARG. */
-extern int vswscanf (__const wchar_t *__restrict __s,
- __const wchar_t *__restrict __format,
+extern int vswscanf (const wchar_t *__restrict __s,
+ const wchar_t *__restrict __format,
__gnuc_va_list __arg)
__THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
@@ -709,24 +709,24 @@ extern int vswscanf (__const wchar_t *__restrict __s,
&& (defined __STRICT_ANSI__ || defined __USE_XOPEN2K)
# ifdef __REDIRECT
extern int __REDIRECT (vfwscanf, (__FILE *__restrict __s,
- __const wchar_t *__restrict __format,
+ const wchar_t *__restrict __format,
__gnuc_va_list __arg), __isoc99_vfwscanf)
/* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
-extern int __REDIRECT (vwscanf, (__const wchar_t *__restrict __format,
+extern int __REDIRECT (vwscanf, (const wchar_t *__restrict __format,
__gnuc_va_list __arg), __isoc99_vwscanf)
/* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
-extern int __REDIRECT_NTH (vswscanf, (__const wchar_t *__restrict __s,
- __const wchar_t *__restrict __format,
+extern int __REDIRECT_NTH (vswscanf, (const wchar_t *__restrict __s,
+ const wchar_t *__restrict __format,
__gnuc_va_list __arg), __isoc99_vswscanf)
/* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
# else
extern int __isoc99_vfwscanf (__FILE *__restrict __s,
- __const wchar_t *__restrict __format,
+ const wchar_t *__restrict __format,
__gnuc_va_list __arg);
-extern int __isoc99_vwscanf (__const wchar_t *__restrict __format,
+extern int __isoc99_vwscanf (const wchar_t *__restrict __format,
__gnuc_va_list __arg);
-extern int __isoc99_vswscanf (__const wchar_t *__restrict __s,
- __const wchar_t *__restrict __format,
+extern int __isoc99_vswscanf (const wchar_t *__restrict __s,
+ const wchar_t *__restrict __format,
__gnuc_va_list __arg) __THROW;
# define vfwscanf __isoc99_vfwscanf
# define vwscanf __isoc99_vwscanf
@@ -779,7 +779,7 @@ extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
This function is a possible cancellation point and therefore not
marked with __THROW. */
-extern int fputws (__const wchar_t *__restrict __ws,
+extern int fputws (const wchar_t *__restrict __ws,
__FILE *__restrict __stream);
@@ -844,7 +844,7 @@ extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
cancellation point. But due to similarity with an POSIX interface
or due to the implementation it is a cancellation point and
therefore not marked with __THROW. */
-extern int fputws_unlocked (__const wchar_t *__restrict __ws,
+extern int fputws_unlocked (const wchar_t *__restrict __ws,
__FILE *__restrict __stream);
#endif
@@ -854,8 +854,8 @@ __BEGIN_NAMESPACE_C99
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) __THROW;
+ const wchar_t *__restrict __format,
+ const struct tm *__restrict __tp) __THROW;
__END_NAMESPACE_C99
# ifdef __USE_GNU
@@ -864,8 +864,8 @@ __END_NAMESPACE_C99
/* Similar to `wcsftime' but takes the information from
the provided locale and not the global locale. */
extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
- __const wchar_t *__restrict __format,
- __const struct tm *__restrict __tp,
+ const wchar_t *__restrict __format,
+ const struct tm *__restrict __tp,
__locale_t __loc) __THROW;
# endif
diff --git a/libc/wcsmbs/wcrtomb.c b/libc/wcsmbs/wcrtomb.c
index 547b05aa9..946fdaf47 100644
--- a/libc/wcsmbs/wcrtomb.c
+++ b/libc/wcsmbs/wcrtomb.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1996-1998,2000,2002,2005,2011 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1998,2000,2002,2005,2011,2012
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -38,7 +39,7 @@ static mbstate_t state;
size_t
__wcrtomb (char *s, wchar_t wc, mbstate_t *ps)
{
- char buf[MB_CUR_MAX];
+ char buf[MB_LEN_MAX];
struct __gconv_step_data data;
int status;
size_t result;
diff --git a/libc/wcsmbs/wcsmbsload.c b/libc/wcsmbs/wcsmbsload.c
index 190466daf..d4e8feb84 100644
--- a/libc/wcsmbs/wcsmbsload.c
+++ b/libc/wcsmbs/wcsmbsload.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1998-2002,2004,2005,2008,2010,2011 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2002,2004,2005,2008,2010,2011,2012
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -68,44 +69,6 @@ static const struct __gconv_step to_mb =
.__data = NULL
};
-static const struct __gconv_step to_c16 =
-{
- .__shlib_handle = NULL,
- .__modname = NULL,
- .__counter = INT_MAX,
- .__from_name = (char *) "ANSI_X3.4-1968//TRANSLIT",
- .__to_name = (char *) "UTF-16//",
- .__fct = __gconv_transform_ascii_utf16,
- .__btowc_fct = NULL,
- .__init_fct = NULL,
- .__end_fct = NULL,
- .__min_needed_from = 1,
- .__max_needed_from = 1,
- .__min_needed_to = 4,
- .__max_needed_to = 4,
- .__stateful = 0,
- .__data = NULL
-};
-
-static const struct __gconv_step from_c16 =
-{
- .__shlib_handle = NULL,
- .__modname = NULL,
- .__counter = INT_MAX,
- .__from_name = (char *) "UTF-16//",
- .__to_name = (char *) "ANSI_X3.4-1968//TRANSLIT",
- .__fct = __gconv_transform_utf16_ascii,
- .__btowc_fct = NULL,
- .__init_fct = NULL,
- .__end_fct = NULL,
- .__min_needed_from = 4,
- .__max_needed_from = 4,
- .__min_needed_to = 1,
- .__max_needed_to = 1,
- .__stateful = 0,
- .__data = NULL
-};
-
/* For the default locale we only have to handle ANSI_X3.4-1968. */
const struct gconv_fcts __wcsmbs_gconv_fcts_c =
@@ -114,11 +77,6 @@ const struct gconv_fcts __wcsmbs_gconv_fcts_c =
.towc_nsteps = 1,
.tomb = (struct __gconv_step *) &to_mb,
.tomb_nsteps = 1,
-
- .toc16 = (struct __gconv_step *) &to_c16,
- .toc16_nsteps = 1,
- .fromc16 = (struct __gconv_step *) &from_c16,
- .fromc16_nsteps = 1,
};
@@ -211,7 +169,7 @@ __wcsmbs_load_conv (struct __locale_data *new_category)
int use_translit;
/* Allocate the gconv_fcts structure. */
- new_fcts = malloc (sizeof *new_fcts);
+ new_fcts = calloc (1, sizeof *new_fcts);
if (new_fcts == NULL)
goto failed;
@@ -231,20 +189,13 @@ __wcsmbs_load_conv (struct __locale_data *new_category)
represent all others. */
new_fcts->towc = __wcsmbs_getfct ("INTERNAL", complete_name,
&new_fcts->towc_nsteps);
- new_fcts->tomb = (new_fcts->towc != NULL
- ? __wcsmbs_getfct (complete_name, "INTERNAL",
- &new_fcts->tomb_nsteps)
- : NULL);
-
- // XXX
- new_fcts->toc16 = (struct __gconv_step *) &to_c16;
- new_fcts->toc16_nsteps = 1;
- new_fcts->fromc16 = (struct __gconv_step *) &from_c16;
- new_fcts->fromc16_nsteps = 1;
+ if (new_fcts->towc != NULL)
+ new_fcts->tomb = __wcsmbs_getfct (complete_name, "INTERNAL",
+ &new_fcts->tomb_nsteps);
/* If any of the conversion functions is not available we don't
use any since this would mean we cannot convert back and
- forth.*/
+ forth. NB: NEW_FCTS was allocated with calloc. */
if (new_fcts->tomb == NULL)
{
if (new_fcts->towc != NULL)
@@ -290,7 +241,7 @@ __wcsmbs_clone_conv (struct gconv_fcts *copy)
*copy = *orig;
/* Now increment the usage counters.
- Note: This assumes copy->towc_nsteps == 1 and copy->tomb_nsteps == 1. */
+ Note: This assumes copy->*_nsteps == 1. */
if (copy->towc->__shlib_handle != NULL)
++copy->towc->__counter;
if (copy->tomb->__shlib_handle != NULL)
@@ -309,27 +260,8 @@ __wcsmbs_named_conv (struct gconv_fcts *copy, const char *name)
copy->tomb = __wcsmbs_getfct (name, "INTERNAL", &copy->tomb_nsteps);
if (copy->tomb == NULL)
- goto out_mb;
-
-#if 0
- copy->fromc16 = __wcsmbs_getfct (name, "UTF-16//", &copy->fromc16_nsteps);
- if (copy->fromc16 == NULL)
- goto out_fromc16;
-
- copy->toc16 = __wcsmbs_getfct ("UTF-16//", name, &copy->toc16_nsteps);
- if (copy->toc16 == NULL)
-#else
- if (0)
-#endif
{
-#if 0
- __gconv_close_transform (copy->fromc16, copy->fromc16_nsteps);
- out_fromc16:
- __gconv_close_transform (copy->tomb, copy->tomb_nsteps);
-#endif
- out_mb:
__gconv_close_transform (copy->towc, copy->towc_nsteps);
- out_wc:
return 1;
}
@@ -348,11 +280,6 @@ _nl_cleanup_ctype (struct __locale_data *locale)
/* Free the old conversions. */
__gconv_close_transform (data->tomb, data->tomb_nsteps);
__gconv_close_transform (data->towc, data->towc_nsteps);
-#if 0
- // XXX
- __gconv_close_transform (data->fromc16, data->fromc16_nsteps);
- __gconv_close_transform (data->toc16, data->toc16c_nsteps);
-#endif
free ((char *) data);
}
}
diff --git a/libc/wcsmbs/wcsmbsload.h b/libc/wcsmbs/wcsmbsload.h
index 064c41c82..98f53bcc4 100644
--- a/libc/wcsmbs/wcsmbsload.h
+++ b/libc/wcsmbs/wcsmbsload.h
@@ -32,11 +32,6 @@ struct gconv_fcts
size_t towc_nsteps;
struct __gconv_step *tomb;
size_t tomb_nsteps;
-
- struct __gconv_step *toc16;
- size_t toc16_nsteps;
- struct __gconv_step *fromc16;
- size_t fromc16_nsteps;
};
/* Set of currently active conversion functions. */