diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2012-02-08 16:44:31 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2012-02-08 16:44:31 +0000 |
commit | 78be84cd747c2e3965bf6c2fd5f702d6ff2f5525 (patch) | |
tree | c070a60ef7c5371bef8b7a559442a6920b394c8e /libc/wcsmbs | |
parent | de06548e980675e65a1e6d850bb8c3a3f7ec638d (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/Makefile | 5 | ||||
-rw-r--r-- | libc/wcsmbs/bits/wchar2.h | 126 | ||||
-rw-r--r-- | libc/wcsmbs/c16rtomb.c | 98 | ||||
-rw-r--r-- | libc/wcsmbs/mbrtoc16.c | 75 | ||||
-rw-r--r-- | libc/wcsmbs/mbrtowc.c | 9 | ||||
-rw-r--r-- | libc/wcsmbs/tst-c16c32-1.c | 131 | ||||
-rw-r--r-- | libc/wcsmbs/uchar.h | 6 | ||||
-rw-r--r-- | libc/wcsmbs/wchar.h | 218 | ||||
-rw-r--r-- | libc/wcsmbs/wcrtomb.c | 5 | ||||
-rw-r--r-- | libc/wcsmbs/wcsmbsload.c | 89 | ||||
-rw-r--r-- | libc/wcsmbs/wcsmbsload.h | 5 |
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", ©->tomb_nsteps); if (copy->tomb == NULL) - goto out_mb; - -#if 0 - copy->fromc16 = __wcsmbs_getfct (name, "UTF-16//", ©->fromc16_nsteps); - if (copy->fromc16 == NULL) - goto out_fromc16; - - copy->toc16 = __wcsmbs_getfct ("UTF-16//", name, ©->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. */ |