enc_filebuf.h: Resurrect, update.

2007-01-29  Benjamin Kosnik  <bkoz@redhat.com>

	* include/ext/enc_filebuf.h: Resurrect, update.
	* include/ext/codecvt_specializations.h: Remove
        _GLIBCXX_USE_ICONV, _GLIBCXX_USE_ENCODING_STATE.
	* include/bits/localefwd.h: Remove declaration for __enc_traits.
	* docs/html/22_locale/codecvt.html: Change __enc_traits to
	encoding_state.
	* scripts/testsuite_flags.in: Remove ICONV.

	* configure.ac: Remove GLIBCXX_CHECK_ICONV_SUPPORT.
	* acinclude.m4 (GLIBCXX_CHECK_ICONV_SUPPORT): Remove.
	* crossconfig.m4: Remove use of GLIBCXX_CHECK_ICONV_SUPPORT.
	* config.h.in: Remove HAVE_ICONV_CLOSE, HAVE_ICONV_OPEN,
	HAVE_NL_LANGINFO, _GLIBCXX_USE_ICONV.
	* include/Makefile.am: Uglify ICONV_CONST.
	* configure: Regenerate.
	* aclocal.m4: Regenerate.
	* Makefile.in: Regenerate.
	* src/Makefile.in: Regenerate.
	* po/Makefile.in: Regenerate.
	* libmath/Makefile.in: Regenerate.
	* include/Makefile.in: Regenerate.
	* libsupc++/Makefile.in: Regenerate.
	* testsuite/Makefile.in: Regenerate.

	* testsuite/ext/enc_filebuf/wchar_t/13189.cc: Use
	dg-require-iconv, fix up for encoding_state changes.
	* testsuite/ext/enc_filebuf/char/13189.cc: Same.
	* testsuite/ext/enc_filebuf/char/13598.cc: Same.
	* testsuite/22_locale/codecvt/unicode: Move...
	* testsuite/22_locale/codecvt/unicode/char.cc: Move...
	* testsuite/22_locale/codecvt/unicode/1.cc: Move...
	* testsuite/22_locale/codecvt/unicode/wchar_t.cc: Move...
	* testsuite/ext/codecvt: New.
	* testsuite/ext/codecvt/char-1.cc: ...here. Also, use dg-require-iconv.
	* testsuite/ext/codecvt/char-2.cc: ...here. Same.
	* testsuite/ext/codecvt/1.cc: ...here. Same.
	* testsuite/ext/codecvt/wchar_t.cc: ...here. Same.
	* testsuite/22_locale/locale/cons/unicode: Delete directory.
	* testsuite/22_locale/locale/cons/unicode/1.cc: Move...
	* testsuite/22_locale/locale/cons/unicode.cc: ...here.

From-SVN: r121297
This commit is contained in:
Benjamin Kosnik 2007-01-29 18:22:37 +00:00 committed by Benjamin Kosnik
parent 68254f23e8
commit 4ffe6e87dc
31 changed files with 1424 additions and 5791 deletions

View File

@ -1,3 +1,46 @@
2007-01-29 Benjamin Kosnik <bkoz@redhat.com>
* include/ext/enc_filebuf.h: Resurrect, update.
* include/ext/codecvt_specializations.h: Remove
_GLIBCXX_USE_ICONV, _GLIBCXX_USE_ENCODING_STATE.
* include/bits/localefwd.h: Remove declaration for __enc_traits.
* docs/html/22_locale/codecvt.html: Change __enc_traits to
encoding_state.
* scripts/testsuite_flags.in: Remove ICONV.
* configure.ac: Remove GLIBCXX_CHECK_ICONV_SUPPORT.
* acinclude.m4 (GLIBCXX_CHECK_ICONV_SUPPORT): Remove.
* crossconfig.m4: Remove use of GLIBCXX_CHECK_ICONV_SUPPORT.
* config.h.in: Remove HAVE_ICONV_CLOSE, HAVE_ICONV_OPEN,
HAVE_NL_LANGINFO, _GLIBCXX_USE_ICONV.
* include/Makefile.am: Uglify ICONV_CONST.
* configure: Regenerate.
* aclocal.m4: Regenerate.
* Makefile.in: Regenerate.
* src/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* libmath/Makefile.in: Regenerate.
* include/Makefile.in: Regenerate.
* libsupc++/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
* testsuite/ext/enc_filebuf/wchar_t/13189.cc: Use
dg-require-iconv, fix up for encoding_state changes.
* testsuite/ext/enc_filebuf/char/13189.cc: Same.
* testsuite/ext/enc_filebuf/char/13598.cc: Same.
* testsuite/22_locale/codecvt/unicode: Move...
* testsuite/22_locale/codecvt/unicode/char.cc: Move...
* testsuite/22_locale/codecvt/unicode/1.cc: Move...
* testsuite/22_locale/codecvt/unicode/wchar_t.cc: Move...
* testsuite/ext/codecvt: New.
* testsuite/ext/codecvt/char-1.cc: ...here. Also, use dg-require-iconv.
* testsuite/ext/codecvt/char-2.cc: ...here. Same.
* testsuite/ext/codecvt/1.cc: ...here. Same.
* testsuite/ext/codecvt/wchar_t.cc: ...here. Same.
* testsuite/22_locale/locale/cons/unicode: Delete directory.
* testsuite/22_locale/locale/cons/unicode/1.cc: Move...
* testsuite/22_locale/locale/cons/unicode.cc: ...here.
2007-01-28 Paolo Carlini <pcarlini@suse.de>
* include/bits/locale_facets.tcc (num_get<>::do_get(iter_type,

View File

@ -46,7 +46,11 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/../config.guess \
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/iconv.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
$(top_srcdir)/../config/unwind_ipinfo.m4 \
@ -171,6 +175,7 @@ LIBS = @LIBS@
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBICONV = @LTLIBICONV@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@

View File

@ -309,64 +309,6 @@ AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
])
dnl
dnl Check to see if this target can enable the iconv specializations.
dnl If --disable-c-mbchar was given, no wchar_t specialization is enabled.
dnl (This must have been previously checked, along with the rest of C99
dnl support.) By default, iconv support is disabled.
dnl
dnl Defines:
dnl _GLIBCXX_USE_ICONV if all the bits are found.
dnl Substs:
dnl LIBICONV to a -l string containing the iconv library, if needed.
dnl
AC_DEFUN([GLIBCXX_CHECK_ICONV_SUPPORT], [
enable_iconv=no
# Only continue checking if the ISO C99 headers exist and support is on.
if test x"$enable_wchar_t" = xyes; then
# From Bruno Haible's AM_ICONV, but without link tests.
# Check for existence of libiconv.a providing XPG2 wchar_t support.
# Some systems have iconv in libc, some have it in libiconv (OSF/1 and
# those with the standalone portable GNU libiconv installed).
AC_ARG_WITH([libiconv-prefix],
[ --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib], [ for dir in `echo "$withval" | tr : ' '`; do
if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
if test -d $dir/lib; then LIBICONV="$LIBICONV -L$dir/lib"; fi
done
LIBICONV="$LIBICONV -liconv"
])
if test x"$LIBICONV" != x; then
AC_MSG_NOTICE([--with-libiconv-prefix is $LIBICONV])
fi
# Use iconv for wchar_t to char conversions. As such, check for
# X/Open Portability Guide, version 2 features (XPG2).
AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
ac_save_LIBS="$LIBS"
LIBS="$LIBS $LIBICONV"
AC_CHECK_FUNCS([iconv_open iconv_close iconv nl_langinfo],
[ac_XPG2funcs=yes], [ac_XPG2funcs=no])
LIBS="$ac_save_LIBS"
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes;
then
AC_DEFINE([_GLIBCXX_USE_ICONV],1,
[Define if iconv and related functions exist and are usable.])
enable_iconv=yes
AC_SUBST(LIBICONV)
fi
fi
AC_MSG_CHECKING([for enabled iconv specializations])
AC_MSG_RESULT($enable_iconv)
])
dnl
dnl Check for headers for, and arguments to, the setrlimit() function.
dnl Used only in testsuite_hooks.h. Called from GLIBCXX_CONFIGURE_TESTSUITE.

View File

@ -581,7 +581,11 @@ AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([../config/enable.m4])
m4_include([../config/iconv.m4])
m4_include([../config/lead-dot.m4])
m4_include([../config/lib-ld.m4])
m4_include([../config/lib-link.m4])
m4_include([../config/lib-prefix.m4])
m4_include([../config/multi.m4])
m4_include([../config/no-executables.m4])
m4_include([../config/unwind_ipinfo.m4])

View File

@ -130,15 +130,9 @@
/* Define to 1 if you have the `hypotl' function. */
#undef HAVE_HYPOTL
/* Define to 1 if you have the `iconv' function. */
/* Define if you have the iconv() function. */
#undef HAVE_ICONV
/* Define to 1 if you have the `iconv_close' function. */
#undef HAVE_ICONV_CLOSE
/* Define to 1 if you have the `iconv_open' function. */
#undef HAVE_ICONV_OPEN
/* Define to 1 if you have the <ieeefp.h> header file. */
#undef HAVE_IEEEFP_H
@ -241,9 +235,6 @@
/* Define to 1 if you have the <nan.h> header file. */
#undef HAVE_NAN_H
/* Define to 1 if you have the `nl_langinfo' function. */
#undef HAVE_NL_LANGINFO
/* Define if poll is available in <poll.h>. */
#undef HAVE_POLL
@ -634,6 +625,9 @@
/* Define to 1 if you have the `__signbitl' function. */
#undef HAVE___SIGNBITL
/* Define as const if the declaration of iconv() needs const. */
#undef ICONV_CONST
/* Name of package */
#undef PACKAGE
@ -735,9 +729,6 @@
namespace std::tr1. */
#undef _GLIBCXX_USE_C99_STDINT_TR1
/* Define if iconv and related functions exist and are usable. */
#undef _GLIBCXX_USE_ICONV
/* Define if LFS support is available. */
#undef _GLIBCXX_USE_LFS

5793
libstdc++-v3/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -86,6 +86,7 @@ AC_LIBTOOL_DLOPEN
AM_PROG_LIBTOOL
AC_SUBST(enable_shared)
AC_SUBST(enable_static)
AM_ICONV
# Possibly disable most of the library.
## TODO: Consider skipping unncessary tests altogether in this case, rather
@ -140,7 +141,6 @@ if $GLIBCXX_IS_NATIVE; then
GLIBCXX_CHECK_MATH_SUPPORT
GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
GLIBCXX_CHECK_STDLIB_SUPPORT
# For showmanyc_helper().

View File

@ -21,7 +21,6 @@ case "${host}" in
GLIBCXX_CHECK_MATH_SUPPORT
GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
GLIBCXX_CHECK_STDLIB_SUPPORT
# For showmanyc_helper().
@ -55,7 +54,6 @@ case "${host}" in
GLIBCXX_CHECK_MATH_SUPPORT
GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
GLIBCXX_CHECK_STDLIB_SUPPORT
GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
AC_DEFINE(HAVE_WRITEV)
@ -70,7 +68,6 @@ case "${host}" in
AC_SUBST(SECTION_FLAGS)
GLIBCXX_CHECK_LINKER_FEATURES
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
AC_DEFINE(HAVE_LC_MESSAGES)
AC_DEFINE(HAVE_GETPAGESIZE)
AC_DEFINE(HAVE_SETENV)
@ -125,7 +122,6 @@ case "${host}" in
AC_SUBST(SECTION_FLAGS)
GLIBCXX_CHECK_LINKER_FEATURES
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
AC_DEFINE(HAVE_COPYSIGN)
AC_DEFINE(HAVE_COPYSIGNF)
AC_DEFINE(HAVE_FREXPF)
@ -152,7 +148,6 @@ case "${host}" in
GLIBCXX_CHECK_MATH_SUPPORT
GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
GLIBCXX_CHECK_STDLIB_SUPPORT
# For LFS.
@ -181,7 +176,6 @@ case "${host}" in
AC_SUBST(SECTION_FLAGS)
GLIBCXX_CHECK_LINKER_FEATURES
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
AC_DEFINE(HAVE_COPYSIGN)
AC_DEFINE(HAVE_COPYSIGNF)
AC_DEFINE(HAVE_FINITEF)
@ -205,7 +199,6 @@ case "${host}" in
AC_SUBST(SECTION_FLAGS)
GLIBCXX_CHECK_LINKER_FEATURES
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
AC_DEFINE(HAVE_HYPOT)
AC_DEFINE(HAVE_ISINF)
AC_DEFINE(HAVE_ISNAN)
@ -224,7 +217,6 @@ case "${host}" in
AC_SUBST(SECTION_FLAGS)
GLIBCXX_CHECK_LINKER_FEATURES
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
AC_DEFINE(HAVE_COSF)
AC_DEFINE(HAVE_COSL)
AC_DEFINE(HAVE_COSHF)
@ -257,16 +249,8 @@ case "${host}" in
AC_DEFINE(HAVE_FINITE)
AC_DEFINE(HAVE_FPCLASS)
AC_DEFINE(HAVE_GETPAGESIZE)
AC_DEFINE(HAVE_NL_LANGINFO)
AC_DEFINE(HAVE_ICONV)
AC_DEFINE(HAVE_ICONV_CLOSE)
AC_DEFINE(HAVE_ICONV_OPEN)
# Look for the pieces required for wchar_t support in order to
# get all the right HAVE_* macros defined.
GLIBCXX_CHECK_ICONV_SUPPORT
# All of the dependencies for wide character support are here, so
# turn it on. This requires some syncronization with the
# GLIBCXX_CHECK_ICONV_SUPPORT in acinclude.m4
# turn it on.
AC_DEFINE(_GLIBCXX_USE_WCHAR_T)
# Are these tested for even when cross?
AC_DEFINE(HAVE_FLOAT_H)
@ -321,7 +305,6 @@ case "${host}" in
AC_SUBST(SECTION_FLAGS)
GLIBCXX_CHECK_LINKER_FEATURES
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
GLIBCXX_CHECK_ICONV_SUPPORT
AC_DEFINE(HAVE_COPYSIGN)
AC_DEFINE(HAVE_COPYSIGNF)
AC_DEFINE(HAVE_FINITE)

View File

@ -315,7 +315,7 @@ to wchar_t and wcsrtombs for conversions between wchar_t and char.
<p>
Neither of these two required specializations deals with Unicode
characters. As such, libstdc++-v3 implements a partial specialization
of the codecvt class with and iconv wrapper class, __enc_traits as the
of the codecvt class with and iconv wrapper class, encoding_state as the
third template parameter.
</p>
@ -331,19 +331,19 @@ constructible.
</p>
<p>
As such, the type __enc_traits is defined as a non-templatized, POD
As such, the type encoding_state is defined as a non-templatized, POD
type to be used as the third type of a codecvt instantiation. This
type is just a wrapper class for iconv, and provides an easy interface
to iconv functionality.
</p>
<p>
There are two constructors for __enc_traits:
There are two constructors for encoding_state:
</p>
<p>
<code>
__enc_traits() : __in_desc(0), __out_desc(0)
encoding_state() : __in_desc(0), __out_desc(0)
</code>
</p>
<p>
@ -354,7 +354,7 @@ nl_langinfo(CODESET).
<p>
<code>
__enc_traits(const char* __int, const char* __ext)
encoding_state(const char* __int, const char* __ext)
</code>
</p>
<p>
@ -382,7 +382,7 @@ _M_init()
</p>
<p>
Strangely enough, this member function attempts to open conversion
descriptors for a given __enc_traits object. If the conversion
descriptors for a given encoding_state object. If the conversion
descriptors are not valid, the conversion descriptors returned will
not be valid and the resulting calls to the codecvt conversion
functions will return error.
@ -395,7 +395,7 @@ _M_good()
</code>
</p>
<p>
Provides a way to see if the given __enc_traits object has been
Provides a way to see if the given encoding_state object has been
properly initialized. If the string literals describing the desired
internal and external encoding are not valid, initialization will
fail, and this will return false. If the internal and external
@ -406,7 +406,7 @@ ready to convert and will return true.
<p>
<code>
__enc_traits(const __enc_traits&amp;)
encoding_state(const encoding_state&amp;)
</code>
</p>
<p>
@ -419,7 +419,7 @@ themselves.
<p>
Definitions for all the required codecvt member functions are provided
for this specialization, and usage of codecvt&lt;internal character type,
external character type, __enc_traits&gt; is consistent with other
external character type, encoding_state&gt; is consistent with other
codecvt usage.
</p>
@ -436,8 +436,8 @@ codecvt usage.
typedef unsigned short unicode_t;
typedef unicode_t int_type;
typedef char ext_type;
typedef __enc_traits enc_type;
typedef codecvt&lt;int_type, ext_type, enc_type&gt; unicode_codecvt;
typedef encoding_state state_type;
typedef codecvt&lt;int_type, ext_type, state_type&gt; unicode_codecvt;
const ext_type* e_lit = "black pearl jasmine tea";
int size = strlen(e_lit);

View File

@ -490,6 +490,7 @@ ext_headers = \
${ext_srcdir}/codecvt_specializations.h \
${ext_srcdir}/concurrence.h \
${ext_srcdir}/debug_allocator.h \
${ext_srcdir}/enc_filebuf.h \
${ext_srcdir}/stdio_filebuf.h \
${ext_srcdir}/stdio_sync_filebuf.h \
${ext_srcdir}/functional \
@ -956,6 +957,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
-e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
-e 's/VERSION/_GLIBCXX_VERSION/g' \
-e 's/WORDS_/_GLIBCXX_WORDS_/g' \
-e 's/ICONV_CONST/_GLIBCXX_ICONV_CONST/g' \
-e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \
< ${CONFIG_HEADER} >> $@ ;\
echo "" >> $@ ;\

View File

@ -41,7 +41,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
subdir = include
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/iconv.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
$(top_srcdir)/../config/unwind_ipinfo.m4 \
@ -139,6 +143,7 @@ LIBS = @LIBS@
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBICONV = @LTLIBICONV@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
@ -711,6 +716,7 @@ ext_headers = \
${ext_srcdir}/codecvt_specializations.h \
${ext_srcdir}/concurrence.h \
${ext_srcdir}/debug_allocator.h \
${ext_srcdir}/enc_filebuf.h \
${ext_srcdir}/stdio_filebuf.h \
${ext_srcdir}/stdio_sync_filebuf.h \
${ext_srcdir}/functional \
@ -1331,6 +1337,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
-e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
-e 's/VERSION/_GLIBCXX_VERSION/g' \
-e 's/WORDS_/_GLIBCXX_WORDS_/g' \
-e 's/ICONV_CONST/_GLIBCXX_ICONV_CONST/g' \
-e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \
< ${CONFIG_HEADER} >> $@ ;\
echo "" >> $@ ;\

View File

@ -1,6 +1,6 @@
// Locale support -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@ -118,7 +118,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// NB: Specialized for char and wchar_t in locale_facets.h.
class codecvt_base;
class __enc_traits;
template<typename _InternT, typename _ExternT, typename _StateT>
class codecvt;
template<> class codecvt<char, char, mbstate_t>;

View File

@ -1,6 +1,6 @@
// Locale support (codecvt) -*- C++ -*-
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@ -42,16 +42,9 @@
#define _EXT_CODECVT_SPECIALIZATIONS_H 1
#include <bits/c++config.h>
#ifdef _GLIBCXX_USE_ICONV
#include <locale>
#include <iconv.h>
// XXX
// Define this here so codecvt.cc can have _S_max_size definition.
#define _GLIBCXX_USE_ENCODING_STATE 1
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
/// @brief Extension to use icov for dealing with character encodings.
@ -517,5 +510,3 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_GLIBCXX_END_NAMESPACE
#endif
#endif

View File

@ -0,0 +1,67 @@
// filebuf with encoding state type -*- C++ -*-
// Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
/** @file ext/enc_filebuf.h
* This file is a GNU extension to the Standard C++ Library.
*/
#ifndef _EXT_ENC_FILEBUF_H
#define _EXT_ENC_FILEBUF_H 1
#include <fstream>
#include <locale>
#include <ext/codecvt_specializations.h>
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
/// @brief class enc_filebuf.
template<typename _CharT>
class enc_filebuf
: public std::basic_filebuf<_CharT, encoding_char_traits<_CharT> >
{
public:
typedef encoding_char_traits<_CharT> traits_type;
typedef typename traits_type::state_type state_type;
typedef typename traits_type::pos_type pos_type;
enc_filebuf(state_type& __state)
: std::basic_filebuf<_CharT, encoding_char_traits<_CharT> >()
{ this->_M_state_beg = __state; }
private:
// concept requirements:
// Set state type to something useful.
// Something more than copyconstructible is needed here, so
// require default and copy constructible + assignment operator.
__glibcxx_class_requires(state_type, _SGIAssignableConcept)
};
_GLIBCXX_END_NAMESPACE
#endif

View File

@ -41,7 +41,11 @@ subdir = libmath
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/iconv.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
$(top_srcdir)/../config/unwind_ipinfo.m4 \
@ -156,6 +160,7 @@ LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
# Only compiling "C" sources in this directory.
LIBTOOL = @LIBTOOL@ --tag CC
LN_S = @LN_S@
LTLIBICONV = @LTLIBICONV@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@

View File

@ -43,7 +43,11 @@ DIST_COMMON = $(glibcxxinstall_HEADERS) $(srcdir)/Makefile.am \
subdir = libsupc++
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/iconv.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
$(top_srcdir)/../config/unwind_ipinfo.m4 \
@ -195,6 +199,7 @@ LIBS = @LIBS@
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBICONV = @LTLIBICONV@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@

View File

@ -41,7 +41,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
subdir = po
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/iconv.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
$(top_srcdir)/../config/unwind_ipinfo.m4 \
@ -139,6 +143,7 @@ LIBS = @LIBS@
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBICONV = @LTLIBICONV@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@

View File

@ -58,7 +58,7 @@ case ${query} in
echo ${PCHFLAGS}
;;
--cxxldflags)
SECTIONLDFLAGS="@SECTION_LDFLAGS@ @LIBICONV@"
SECTIONLDFLAGS="@SECTION_LDFLAGS@"
echo ${SECTIONLDFLAGS}
;;
*)

View File

@ -41,7 +41,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
subdir = src
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/iconv.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
$(top_srcdir)/../config/unwind_ipinfo.m4 \
@ -189,6 +193,7 @@ LIBS = @LIBS@
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBICONV = @LTLIBICONV@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@

View File

@ -1,147 +0,0 @@
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
// Copyright (C) 2003 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
#include <locale>
#include <testsuite_hooks.h>
#ifdef _GLIBCXX_USE___ENC_TRAITS
// Need some char_traits specializations for this to work.
typedef unsigned short unicode_t;
namespace std
{
template<>
struct char_traits<unicode_t>
{
typedef unicode_t char_type;
// Unsigned as wint_t is unsigned.
typedef unsigned long int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2);
static bool
eq(const char_type& __c1, const char_type& __c2);
static bool
lt(const char_type& __c1, const char_type& __c2);
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{ return memcmp(__s1, __s2, __n); }
static size_t
length(const char_type* __s);
static const char_type*
find(const char_type* __s, size_t __n, const char_type& __a);
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n);
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{ return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
static char_type*
assign(char_type* __s, size_t __n, char_type __a);
static char_type
to_char_type(const int_type& __c);
static int_type
to_int_type(const char_type& __c);
static bool
eq_int_type(const int_type& __c1, const int_type& __c2);
static int_type
eof();
static int_type
not_eof(const int_type& __c);
};
}
void
initialize_state(std::__enc_traits& state)
{ state._M_init(); }
bool length_called = false;
class length_codecvt : public std::codecvt<unicode_t, char, std::__enc_traits>
{
typedef std::codecvt<unicode_t, char, std::__enc_traits> unicode_codecvt;
public:
// DR75: type of first argument of do_length is state_type&
virtual int do_length(state_type& state, const extern_type* from,
const extern_type* end, std::size_t max) const
{
length_called = true;
return unicode_codecvt::do_length(state, from, end, max);
}
};
// Partial specialization using __enc_traits.
// codecvt<unicode_t, char, __enc_traits>
// UNICODE - UCS2 (big endian)
void test01()
{
using namespace std;
typedef unicode_t int_type;
typedef char ext_type;
typedef __enc_traits enc_type;
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
bool test __attribute__((unused)) = true;
const ext_type* e_lit = "black pearl jasmine tea";
int size = strlen(e_lit);
// construct a locale object with the specialized facet.
locale loc(locale::classic(), new length_codecvt);
// sanity check the constructed locale has the specialized facet.
VERIFY( has_facet<unicode_codecvt>(loc) );
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
unicode_codecvt::state_type state04("UCS-2BE", "ISO-8859-15", 0xfeff, 0);
initialize_state(state04);
length_called = false;
cvt.length(state04, e_lit, e_lit + size, 5);
VERIFY( length_called );
}
#endif // _GLIBCXX_USE___ENC_TRAITS
int main ()
{
#if _GLIBCXX_USE___ENC_TRAITS
test01();
#endif
return 0;
}

View File

@ -1,300 +0,0 @@
// 2000-08-22 Benjamin Kosnik <bkoz@cygnus.com>
// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
#include <locale>
#include <testsuite_hooks.h>
#ifdef _GLIBCXX_USE___ENC_TRAITS
// Need some char_traits specializations for this to work.
typedef unsigned short unicode_t;
namespace std
{
template<>
struct char_traits<unicode_t>
{
typedef unicode_t char_type;
// Unsigned as wint_t is unsigned.
typedef unsigned long int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2);
static bool
eq(const char_type& __c1, const char_type& __c2);
static bool
lt(const char_type& __c1, const char_type& __c2);
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{ return memcmp(__s1, __s2, __n); }
static size_t
length(const char_type* __s);
static const char_type*
find(const char_type* __s, size_t __n, const char_type& __a);
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n);
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{ return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
static char_type*
assign(char_type* __s, size_t __n, char_type __a);
static char_type
to_char_type(const int_type& __c);
static int_type
to_int_type(const char_type& __c);
static bool
eq_int_type(const int_type& __c1, const int_type& __c2);
static int_type
eof();
static int_type
not_eof(const int_type& __c);
};
}
/*
> how do I check that these conversions are correct?
Very easy. Since all the characters are from ASCII you simply
zero-extend the values.
drepper$ echo 'black pearl jasmine tea' | od -t x1
0000000 62 6c 61 63 6b 20 70 65 61 72 6c 20 6a 61 73 6d
0000020 69 6e 65 20 74 65 61 0a
So the UCS-2 string is
0x0062, 0x006c, 0x0061, ...
You get the idea. With iconv() you have to take care of the
byte-order, though. UCS-2 can mean little- or big endian. Looking at
your result
> $9 = 25856
it shows that the other byte-order is used (25856 == 0x6500).
*/
void
initialize_state(std::__enc_traits& state)
{ state._M_init(); }
// Partial specialization using __enc_traits.
// codecvt<unicode_t, char, __enc_traits>
// UNICODE - UCS2 (big endian)
void test01()
{
using namespace std;
typedef codecvt_base::result result;
typedef unicode_t int_type;
typedef char ext_type;
typedef __enc_traits enc_type;
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
typedef char_traits<int_type> int_traits;
typedef char_traits<ext_type> ext_traits;
bool test __attribute__((unused)) = true;
const ext_type* e_lit = "black pearl jasmine tea";
int size = strlen(e_lit);
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
{
0x00, 0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20,
0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20,
0x00, 0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e,
0x00, 0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0
};
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
const ext_type* efrom_next;
const int_type* ifrom_next;
ext_type* e_arr = new ext_type[size + 1];
ext_type* eto_next;
int_type* i_arr = new int_type[size + 1];
int_type* ito_next;
// construct a locale object with the specialized facet.
locale loc(locale::classic(), new unicode_codecvt);
// sanity check the constructed locale has the specialized facet.
VERIFY( has_facet<unicode_codecvt>(loc) );
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
// in
// unicode_codecvt::state_type state01("UCS-2BE", "ISO-8859-15", 0xfeff, 0);
unicode_codecvt::state_type state01("UCS-2BE", "ISO-8859-15", 0, 0);
initialize_state(state01);
// internal encoding is bigger because of bom
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
i_arr, i_arr + size + 1, ito_next);
VERIFY( r1 == codecvt_base::ok );
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
VERIFY( efrom_next == e_lit + size );
VERIFY( ito_next == i_arr + size );
// out
unicode_codecvt::state_type state02("UCS-2BE", "ISO-8859-15", 0, 0);
initialize_state(state02);
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
e_arr, e_arr + size, eto_next);
VERIFY( r2 == codecvt_base::ok );
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
VERIFY( ifrom_next == i_lit + size );
VERIFY( eto_next == e_arr + size );
// unshift
ext_traits::copy(e_arr, e_lit, size);
unicode_codecvt::state_type state03("UCS-2BE", "ISO-8859-15", 0, 0);
initialize_state(state03);
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
VERIFY( r3 == codecvt_base::noconv );
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
VERIFY( eto_next == e_arr );
int i = cvt.encoding();
VERIFY( i == 2 ); // Target-dependent.
VERIFY( !cvt.always_noconv() );
unicode_codecvt::state_type state04("UCS-2BE", "ISO-8859-15", 0, 0);
initialize_state(state04);
int j = cvt.length(state03, e_lit, e_lit + size, 5);
VERIFY( j == 5 );
int k = cvt.max_length();
VERIFY( k == 1 );
delete [] e_arr;
delete [] i_arr;
}
// Partial specialization using __enc_traits.
// codecvt<unicode_t, char, __enc_traits>
// UNICODE - UCS2 (little endian)
void test02()
{
using namespace std;
typedef codecvt_base::result result;
typedef unsigned short unicode_t;
typedef unicode_t int_type;
typedef char ext_type;
typedef __enc_traits enc_type;
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
typedef char_traits<int_type> int_traits;
typedef char_traits<ext_type> ext_traits;
bool test __attribute__((unused)) = true;
const ext_type* e_lit = "black pearl jasmine tea";
int size = strlen(e_lit);
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
{
0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20, 0x00,
0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20, 0x00,
0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00,
0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0, 0x00
};
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
const ext_type* efrom_next;
const int_type* ifrom_next;
ext_type* e_arr = new ext_type[size + 1];
ext_type* eto_next;
int_type* i_arr = new int_type[size + 1];
int_type* ito_next;
// construct a locale object with the specialized facet.
locale loc(locale::classic(), new unicode_codecvt);
// sanity check the constructed locale has the specialized facet.
VERIFY( has_facet<unicode_codecvt>(loc) );
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
// in
unicode_codecvt::state_type state01("UCS-2LE", "ISO-8859-15", 0, 0);
initialize_state(state01);
// internal encoding is bigger because of bom
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
i_arr, i_arr + size + 1, ito_next);
VERIFY( r1 == codecvt_base::ok );
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
VERIFY( efrom_next == e_lit + size );
VERIFY( ito_next == i_arr + size );
// out
unicode_codecvt::state_type state02("UCS-2LE", "ISO-8859-15", 0, 0);
initialize_state(state02);
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
e_arr, e_arr + size, eto_next);
VERIFY( r2 == codecvt_base::ok );
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
VERIFY( ifrom_next == i_lit + size );
VERIFY( eto_next == e_arr + size );
// unshift
ext_traits::copy(e_arr, e_lit, size);
unicode_codecvt::state_type state03("UCS-2LE", "ISO-8859-15", 0, 0);
initialize_state(state03);
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
VERIFY( r3 == codecvt_base::noconv );
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
VERIFY( eto_next == e_arr );
int i = cvt.encoding();
VERIFY( i == 2 ); // Target-dependent.
VERIFY( !cvt.always_noconv() );
unicode_codecvt::state_type state04("UCS-2LE", "ISO-8859-15", 0, 0);
initialize_state(state04);
int j = cvt.length(state03, e_lit, e_lit + size, 5);
VERIFY( j == 5 );
int k = cvt.max_length();
VERIFY( k == 1 );
delete [] e_arr;
delete [] i_arr;
}
#endif // _GLIBCXX_USE___ENC_TRAITS
int main ()
{
#if _GLIBCXX_USE___ENC_TRAITS
test01();
test02();
#endif
return 0;
}

View File

@ -0,0 +1,81 @@
// { dg-require-iconv "ISO-8859-1" }
// Copyright (C) 2006, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// 22.1.1.2 locale constructors and destructors [lib.locale.cons]
#include <cwchar> // for mbstate_t
#include <locale>
#include <stdexcept>
#include <testsuite_hooks.h>
#include <ext/codecvt_specializations.h>
typedef std::codecvt<char, char, std::mbstate_t> c_codecvt;
#ifdef _GLIBCXX_USE_WCHAR_T
typedef std::codecvt<wchar_t, char, std::mbstate_t> w_codecvt;
#endif
class gnu_facet: public std::locale::facet
{
public:
static std::locale::id id;
};
std::locale::id gnu_facet::id;
void test01()
{
using namespace std;
typedef unsigned short int_type;
typedef char ext_type;
typedef __gnu_cxx::encoding_state state_type;
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
bool test __attribute__((unused)) = true;
// unicode_codecvt
locale loc01(locale::classic());
locale loc13(locale::classic(), new unicode_codecvt);
VERIFY( loc01 != loc13 );
VERIFY( loc13.name() == "*" );
try
{
VERIFY( has_facet<c_codecvt>(loc13) );
#ifdef _GLIBCXX_USE_WCHAR_T
VERIFY( has_facet<w_codecvt>(loc13) );
#endif
VERIFY( has_facet<unicode_codecvt>(loc13) );
}
catch(...)
{ VERIFY( false ); }
try
{ use_facet<gnu_facet>(loc13); }
catch(bad_cast& obj)
{ VERIFY( true ); }
catch(...)
{ VERIFY( false ); }
}
int main()
{
test01();
return 0;
}

View File

@ -1,142 +0,0 @@
// Copyright (C) 2006 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// 22.1.1.2 locale constructors and destructors [lib.locale.cons]
#include <cwchar> // for mbstate_t
#include <locale>
#include <stdexcept>
#include <testsuite_hooks.h>
#if _GLIBCXX_USE___ENC_TRAITS
typedef std::codecvt<char, char, std::mbstate_t> c_codecvt;
#ifdef _GLIBCXX_USE_WCHAR_T
typedef std::codecvt<wchar_t, char, std::mbstate_t> w_codecvt;
#endif
class gnu_facet: public std::locale::facet
{
public:
static std::locale::id id;
};
std::locale::id gnu_facet::id;
// Need some char_traits specializations for this to work.
typedef unsigned short unicode_t;
namespace std
{
template<>
struct char_traits<unicode_t>
{
typedef unicode_t char_type;
// Unsigned as wint_t is unsigned.
typedef unsigned long int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2);
static bool
eq(const char_type& __c1, const char_type& __c2);
static bool
lt(const char_type& __c1, const char_type& __c2);
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{ return memcmp(__s1, __s2, __n); }
static size_t
length(const char_type* __s);
static const char_type*
find(const char_type* __s, size_t __n, const char_type& __a);
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n);
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{ return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
static char_type*
assign(char_type* __s, size_t __n, char_type __a);
static char_type
to_char_type(const int_type& __c);
static int_type
to_int_type(const char_type& __c);
static bool
eq_int_type(const int_type& __c1, const int_type& __c2);
static int_type
eof();
static int_type
not_eof(const int_type& __c);
};
}
void test01()
{
using namespace std;
typedef unicode_t int_type;
typedef char ext_type;
typedef __enc_traits enc_type;
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
bool test __attribute__((unused)) = true;
// unicode_codecvt
locale loc13(locale::classic(), new unicode_codecvt);
VERIFY( loc01 != loc13 );
VERIFY( loc13.name() == "*" );
try
{
VERIFY( has_facet<c_codecvt>(loc13) );
#ifdef _GLIBCXX_USE_WCHAR_T
VERIFY( has_facet<w_codecvt>(loc13) );
#endif
VERIFY( has_facet<unicode_codecvt>(loc13) );
}
catch(...)
{ VERIFY( false ); }
try
{ use_facet<gnu_facet>(loc13); }
catch(bad_cast& obj)
{ VERIFY( true ); }
catch(...)
{ VERIFY( false ); }
}
#endif // _GLIBCXX_USE___ENC_TRAITS
int main()
{
#if _GLIBCXX_USE___ENC_TRAITS
test01();
#endif
return 0;
}

View File

@ -41,7 +41,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
subdir = testsuite
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/iconv.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
$(top_srcdir)/../config/unwind_ipinfo.m4 \
@ -143,6 +147,7 @@ LIBS = @LIBS@
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBICONV = @LTLIBICONV@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@

View File

@ -0,0 +1,58 @@
// { dg-require-iconv "UCS-2BE" }
// { dg-require-iconv "ISO-8859-15" }
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
// Copyright (C) 2003, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
#include <locale>
#include <testsuite_hooks.h>
#include <ext/codecvt_specializations.h>
// Partial specialization using encoding_state
// codecvt<unicode_t, char, encoding_state>
// UNICODE - UCS2 (big endian)
void test01()
{
using namespace std;
typedef unsigned short int_type;
typedef char ext_type;
typedef __gnu_cxx::encoding_state state_type;
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
bool test __attribute__((unused)) = true;
const ext_type* e_lit = "black pearl jasmine tea";
int size = strlen(e_lit);
// construct a locale object with the specialized facet.
locale loc(locale::classic(), new unicode_codecvt);
// sanity check the constructed locale has the specialized facet.
VERIFY( has_facet<unicode_codecvt>(loc) );
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
unicode_codecvt::state_type state04("UCS-2BE", "ISO-8859-15", 0xfeff, 0);
cvt.length(state04, e_lit, e_lit + size, 5);
}
int main ()
{
test01();
return 0;
}

View File

@ -0,0 +1,140 @@
// { dg-require-iconv "UCS-2BE" }
// { dg-require-iconv "ISO-8859-15" }
// 2000-08-22 Benjamin Kosnik <bkoz@cygnus.com>
// Copyright (C) 2000, 2001, 2002, 2003, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
#include <locale>
#include <testsuite_hooks.h>
#include <ext/codecvt_specializations.h>
/*
> how do I check that these conversions are correct?
Very easy. Since all the characters are from ASCII you simply
zero-extend the values.
drepper$ echo 'black pearl jasmine tea' | od -t x1
0000000 62 6c 61 63 6b 20 70 65 61 72 6c 20 6a 61 73 6d
0000020 69 6e 65 20 74 65 61 0a
So the UCS-2 string is
0x0062, 0x006c, 0x0061, ...
You get the idea. With iconv() you have to take care of the
byte-order, though. UCS-2 can mean little- or big endian. Looking at
your result
> $9 = 25856
it shows that the other byte-order is used (25856 == 0x6500).
*/
// Partial specialization using encoding_state.
// codecvt<unicode_t, char, encoding_state>
// UNICODE - UCS2 (big endian)
void test01()
{
using namespace std;
typedef codecvt_base::result result;
typedef unsigned short int_type;
typedef char ext_type;
typedef __gnu_cxx::encoding_state state_type;
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
typedef char_traits<int_type> int_traits;
typedef char_traits<ext_type> ext_traits;
bool test __attribute__((unused)) = true;
const ext_type* e_lit = "black pearl jasmine tea";
int size = strlen(e_lit);
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
{
0x00, 0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20,
0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20,
0x00, 0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e,
0x00, 0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0
};
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
const ext_type* efrom_next;
const int_type* ifrom_next;
ext_type* e_arr = new ext_type[size + 1];
ext_type* eto_next;
int_type* i_arr = new int_type[size + 1];
int_type* ito_next;
// construct a locale object with the specialized facet.
locale loc(locale::classic(), new unicode_codecvt);
// sanity check the constructed locale has the specialized facet.
VERIFY( has_facet<unicode_codecvt>(loc) );
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
// in
// unicode_codecvt::state_type state01("UCS-2BE", "ISO-8859-15", 0xfeff, 0);
unicode_codecvt::state_type state01("UCS-2BE", "ISO-8859-15", 0, 0);
// internal encoding is bigger because of bom
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
i_arr, i_arr + size + 1, ito_next);
VERIFY( r1 == codecvt_base::ok );
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
VERIFY( efrom_next == e_lit + size );
VERIFY( ito_next == i_arr + size );
// out
unicode_codecvt::state_type state02("UCS-2BE", "ISO-8859-15", 0, 0);
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
e_arr, e_arr + size, eto_next);
VERIFY( r2 == codecvt_base::ok );
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
VERIFY( ifrom_next == i_lit + size );
VERIFY( eto_next == e_arr + size );
// unshift
ext_traits::copy(e_arr, e_lit, size);
unicode_codecvt::state_type state03("UCS-2BE", "ISO-8859-15", 0, 0);
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
VERIFY( r3 == codecvt_base::noconv );
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
VERIFY( eto_next == e_arr );
int i = cvt.encoding();
VERIFY( i == 2 ); // Target-dependent.
VERIFY( !cvt.always_noconv() );
unicode_codecvt::state_type state04("UCS-2BE", "ISO-8859-15", 0, 0);
int j = cvt.length(state03, e_lit, e_lit + size, 5);
VERIFY( j == 5 );
int k = cvt.max_length();
VERIFY( k == 1 );
delete [] e_arr;
delete [] i_arr;
}
int main ()
{
test01();
return 0;
}

View File

@ -0,0 +1,138 @@
// { dg-require-iconv "UCS-2LE" }
// { dg-require-iconv "ISO-8859-15" }
// 2000-08-22 Benjamin Kosnik <bkoz@cygnus.com>
// Copyright (C) 2000, 2001, 2002, 2003, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
#include <locale>
#include <testsuite_hooks.h>
#include <ext/codecvt_specializations.h>
/*
> how do I check that these conversions are correct?
Very easy. Since all the characters are from ASCII you simply
zero-extend the values.
drepper$ echo 'black pearl jasmine tea' | od -t x1
0000000 62 6c 61 63 6b 20 70 65 61 72 6c 20 6a 61 73 6d
0000020 69 6e 65 20 74 65 61 0a
So the UCS-2 string is
0x0062, 0x006c, 0x0061, ...
You get the idea. With iconv() you have to take care of the
byte-order, though. UCS-2 can mean little- or big endian. Looking at
your result
> $9 = 25856
it shows that the other byte-order is used (25856 == 0x6500).
*/
// Partial specialization using encoding_state.
// codecvt<unicode_t, char, encoding_state>
// UNICODE - UCS2 (little endian)
void test02()
{
using namespace std;
typedef codecvt_base::result result;
typedef unsigned short int_type;
typedef char ext_type;
typedef __gnu_cxx::encoding_state state_type;
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
typedef char_traits<int_type> int_traits;
typedef char_traits<ext_type> ext_traits;
bool test __attribute__((unused)) = true;
const ext_type* e_lit = "black pearl jasmine tea";
int size = strlen(e_lit);
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
{
0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20, 0x00,
0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20, 0x00,
0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00,
0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0, 0x00
};
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
const ext_type* efrom_next;
const int_type* ifrom_next;
ext_type* e_arr = new ext_type[size + 1];
ext_type* eto_next;
int_type* i_arr = new int_type[size + 1];
int_type* ito_next;
// construct a locale object with the specialized facet.
locale loc(locale::classic(), new unicode_codecvt);
// sanity check the constructed locale has the specialized facet.
VERIFY( has_facet<unicode_codecvt>(loc) );
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
// in
unicode_codecvt::state_type state01("UCS-2LE", "ISO-8859-15", 0, 0);
// internal encoding is bigger because of bom
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
i_arr, i_arr + size + 1, ito_next);
VERIFY( r1 == codecvt_base::ok );
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
VERIFY( efrom_next == e_lit + size );
VERIFY( ito_next == i_arr + size );
// out
unicode_codecvt::state_type state02("UCS-2LE", "ISO-8859-15", 0, 0);
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
e_arr, e_arr + size, eto_next);
VERIFY( r2 == codecvt_base::ok );
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
VERIFY( ifrom_next == i_lit + size );
VERIFY( eto_next == e_arr + size );
// unshift
ext_traits::copy(e_arr, e_lit, size);
unicode_codecvt::state_type state03("UCS-2LE", "ISO-8859-15", 0, 0);
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
VERIFY( r3 == codecvt_base::noconv );
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
VERIFY( eto_next == e_arr );
int i = cvt.encoding();
VERIFY( i == 2 ); // Target-dependent.
VERIFY( !cvt.always_noconv() );
unicode_codecvt::state_type state04("UCS-2LE", "ISO-8859-15", 0, 0);
int j = cvt.length(state03, e_lit, e_lit + size, 5);
VERIFY( j == 5 );
int k = cvt.max_length();
VERIFY( k == 1 );
delete [] e_arr;
delete [] i_arr;
}
int main ()
{
test02();
return 0;
}

View File

@ -1,6 +1,9 @@
// { dg-require-iconv "UCS-2BE" }
// { dg-require-iconv "UCS-4BE" }
// 2000-08-23 Benjamin Kosnik <bkoz@cygnus.com>
// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
// Copyright (C) 2000, 2001, 2002, 2003, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -22,84 +25,18 @@
#include <locale>
#include <testsuite_hooks.h>
#include <ext/codecvt_specializations.h>
#ifdef _GLIBCXX_USE___ENC_TRAITS
// Need some char_traits specializations for this to work.
typedef unsigned short unicode_t;
namespace std
{
template<>
struct char_traits<unicode_t>
{
typedef unicode_t char_type;
// Unsigned as wint_t is unsigned.
typedef unsigned long int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2);
static bool
eq(const char_type& __c1, const char_type& __c2);
static bool
lt(const char_type& __c1, const char_type& __c2);
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{ return memcmp(__s1, __s2, __n); }
static size_t
length(const char_type* __s);
static const char_type*
find(const char_type* __s, size_t __n, const char_type& __a);
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n);
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{ return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
static char_type*
assign(char_type* __s, size_t __n, char_type __a);
static char_type
to_char_type(const int_type& __c);
static int_type
to_int_type(const char_type& __c);
static bool
eq_int_type(const int_type& __c1, const int_type& __c2);
static int_type
eof();
static int_type
not_eof(const int_type& __c);
};
}
void
initialize_state(std::__enc_traits& state)
{ state._M_init(); }
// Partial specialization using __enc_traits.
// codecvt<unicode_t, wchar_t, __enc_traits>
// Partial specialization using encoding_state.
// codecvt<unicode_t, wchar_t, encoding_state>
void test01()
{
using namespace std;
typedef codecvt_base::result result;
typedef unicode_t int_type;
typedef unsigned short int_type;
typedef wchar_t ext_type;
typedef __enc_traits enc_type;
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
typedef __gnu_cxx::encoding_state state_type;
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
typedef char_traits<int_type> int_traits;
typedef char_traits<ext_type> ext_traits;
@ -138,12 +75,11 @@ void test01()
locale loc(locale::classic(), new unicode_codecvt);
// sanity check the constructed locale has the specialized facet.
VERIFY( has_facet<unicode_codecvt>(loc) );
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
// in
// unicode_codecvt::state_type state01("UCS-2BE", "UCS-4BE", 0xfeff, 0);
unicode_codecvt::state_type state01("UCS-2BE", "UCS-4BE", 0, 0);
initialize_state(state01);
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
i_arr, i_arr + size + 1, ito_next);
VERIFY( r1 == codecvt_base::ok );
@ -153,7 +89,6 @@ void test01()
// out
unicode_codecvt::state_type state02("UCS-2BE", "UCS-4BE", 0, 0);
initialize_state(state02);
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
e_arr, e_arr + size, eto_next);
VERIFY( r2 == codecvt_base::ok ); // XXX?
@ -164,7 +99,6 @@ void test01()
// unshift
ext_traits::copy(e_arr, e_lit, size);
unicode_codecvt::state_type state03("UCS-2BE", "UCS-4BE", 0, 0);
initialize_state(state03);
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
VERIFY( r3 == codecvt_base::noconv );
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
@ -176,7 +110,6 @@ void test01()
VERIFY( !cvt.always_noconv() );
unicode_codecvt::state_type state04("UCS-2BE", "UCS-4BE", 0, 0);
initialize_state(state04);
int j = cvt.length(state03, e_lit, e_lit + size, 5);
VERIFY( j == 5 );
@ -186,13 +119,10 @@ void test01()
delete [] e_arr;
delete [] i_arr;
}
#endif // _GLIBCXX_USE___ENC_TRAITS
int main ()
{
#ifdef _GLIBCXX_USE___ENC_TRAITS
test01();
#endif
return 0;
}

View File

@ -1,4 +1,6 @@
// Copyright (C) 2003, 2004, 2005 Free Software Foundation
// { dg-require-iconv "ISO-8859-1" }
// Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -17,17 +19,14 @@
// USA.
#include <testsuite_hooks.h>
#ifdef _GLIBCXX_USE___ENC_TRAITS
#include <ext/enc_filebuf.h>
#endif
void test01()
{
#ifdef _GLIBCXX_USE___ENC_TRAITS
using namespace std;
typedef __enc_traits state_type;
typedef char char_type;
typedef __gnu_cxx::enc_filebuf<char_type> filebuf_type;
typedef filebuf_type::state_type state_type;
typedef codecvt<char_type, char, state_type> enc_codecvt;
bool test __attribute__((unused)) = true;
@ -47,7 +46,6 @@ void test01()
catch(...)
{
}
#endif
}
int main()

View File

@ -1,4 +1,6 @@
// Copyright (C) 2004 Free Software Foundation
// { dg-require-iconv "ISO-8859-1" }
// Copyright (C) 2004, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -19,20 +21,20 @@
#include <locale>
#include <cstring>
#include <testsuite_hooks.h>
#ifdef _GLIBCXX_USE___ENC_TRAITS
#include <ext/enc_filebuf.h>
#endif
int main()
{
#ifdef _GLIBCXX_USE___ENC_TRAITS
bool test __attribute__((unused)) = true;
typedef char char_type;
typedef __gnu_cxx::enc_filebuf<char_type> filebuf_type;
typedef filebuf_type::state_type state_type;
const char* str = "Hello, world!\n";
std::locale loc(std::locale::classic(),
new std::codecvt<char, char, std::__enc_traits>());
std::__enc_traits st("ISO-8859-1", "ISO-8859-1");
__gnu_cxx::enc_filebuf<char> fb(st);
new std::codecvt<char, char, __gnu_cxx::encoding_state>());
state_type st("ISO-8859-1", "ISO-8859-1");
filebuf_type fb(st);
fb.pubimbue(loc);
fb.open("tmp_13598", std::ios_base::out);
@ -42,7 +44,6 @@ int main()
VERIFY( n == std::strlen(str) );
VERIFY( s == 0 );
#endif
return 0;
}

View File

@ -1,4 +1,6 @@
// Copyright (C) 2003, 2004, 2005 Free Software Foundation
// { dg-require-iconv "ISO-8859-1" }
// Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -17,17 +19,14 @@
// USA.
#include <testsuite_hooks.h>
#ifdef _GLIBCXX_USE___ENC_TRAITS
#include <ext/enc_filebuf.h>
#endif
void test01()
{
#ifdef _GLIBCXX_USE___ENC_TRAITS
using namespace std;
typedef __enc_traits state_type;
typedef wchar_t char_type;
typedef __gnu_cxx::enc_filebuf<char_type> filebuf_type;
typedef filebuf_type::state_type state_type;
typedef codecvt<char_type, char, state_type> enc_codecvt;
bool test __attribute__((unused)) = true;
@ -47,7 +46,6 @@ void test01()
catch(...)
{
}
#endif
}
int main()