+2002-03-08 Benjamin Kosnik <bkoz@redhat.com>
+
+ * c_locale_generic.cc: Move to...
+ * generic/c_locale.cc
+ * c_locale_generic.h: Move to...
+ * generic/c_locale.h
+ * codecvt_specializations_generic.h: Move to...
+ * generic/codecvt_specializations.h
+ * collate_members_generic.cc: Move to...
+ * generic/collate_members.cc
+ * ctype_members_generic.cc: Move to...
+ * generic/ctype_members.cc
+ * messages_members_generic.cc: Move to...
+ * generic/messages_members.cc
+ * messages_members_generic.h: Move to...
+ * generic/messages_members.h
+ * moneypunct_members_generic.cc: Move to...
+ * generic/monetary_members.cc
+ * numpunct_members_generic.cc: Move to...
+ * generic/numeric_members.cc
+ * time_members_generic.cc: Move to...
+ * generic/time_members.cc
+ * c_locale_gnu.cc: Move to...
+ * gnu/c_locale.cc
+ * c_locale_gnu.h: Move to...
+ * gnu/c_locale.h
+ * collate_members_gnu.cc: Move to...
+ * gnu/collate_members.cc
+ * ctype_members_gnu.cc: Move to...
+ * gnu/ctype_members.cc
+ * messages_members_gnu.cc: Move to...
+ * gnu/messages_members.cc
+ * messages_members_gnu.h: Move to...
+ * gnu/messages_members.h
+ * moneypunct_members_gnu.cc: Move to...
+ * gnu/monetary_members.cc
+ * numpunct_members_gnu.cc: Move to...
+ * gnu/numeric_members.cc
+ * time_members_gnu.cc: Move to...
+ * gnu/time_members.cc
+ * c_locale_ieee_1003.1-200x.cc: Move to...
+ * ieee_1003.1-2001/c_locale.cc
+ * c_locale_ieee_1003.1-200x.h: Move to...
+ * ieee_1003.1-2001/c_locale.h
+ * codecvt_specializations_ieee_1003.1-200x.h: Move to...
+ * ieee_1003.1-2001/codecvt_specializations.h
+ * messages_members_ieee_1003.1-200x.cc: Move to...
+ * ieee_1003.1-2001/messages_members.cc
+ * messages_members_ieee_1003.1-200x.h: Move to...
+ * ieee_1003.1-2001/messages_members.h
+
+ * acinclude.m4 (GLIBCPP_ENABLE_CLOCALE): Make consistent.
+ * aclocal.m4: Regenerate.
+ * configure: Regenerate.
+ * src/Makefile.am (sources): Change to monetary and numeric.
+ * src/Makefile.in: Regenerate.
+ * docs/html/configopts.html: Update to ieee_1003.1-2001.
+
2002-03-08 scott snyder <snyder@fnal.gov>
libstdc++/5875
# Don't use gettext.
USE_NLS=no
- CLOCALE_H=config/locale/c_locale_generic.h
- CLOCALE_CC=config/locale/c_locale_generic.cc
- CCODECVT_H=config/locale/codecvt_specializations_generic.h
- CCOLLATE_CC=config/locale/collate_members_generic.cc
- CCTYPE_CC=config/locale/ctype_members_generic.cc
- CMESSAGES_H=config/locale/messages_members_generic.h
- CMESSAGES_CC=config/locale/messages_members_generic.cc
- CMONEY_CC=config/locale/moneypunct_members_generic.cc
- CNUMERIC_CC=config/locale/numpunct_members_generic.cc
- CTIME_CC=config/locale/time_members_generic.cc
+ CLOCALE_H=config/locale/generic/c_locale.h
+ CLOCALE_CC=config/locale/generic/c_locale.cc
+ CCODECVT_H=config/locale/generic/codecvt_specializations.h
+ CCOLLATE_CC=config/locale/generic/collate_members.cc
+ CCTYPE_CC=config/locale/generic/ctype_members.cc
+ CMESSAGES_H=config/locale/generic/messages_members.h
+ CMESSAGES_CC=config/locale/generic/messages_members.cc
+ CMONEY_CC=config/locale/generic/monetary_members.cc
+ CNUMERIC_CC=config/locale/generic/numeric_members.cc
+ CTIME_CC=config/locale/generic/time_members.cc
;;
xgnu)
AC_MSG_RESULT(gnu)
AC_SUBST(glibcpp_MOFILES)
AC_SUBST(glibcpp_POFILES)
- CLOCALE_H=config/locale/c_locale_gnu.h
- CLOCALE_CC=config/locale/c_locale_gnu.cc
- CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h
- CCOLLATE_CC=config/locale/collate_members_gnu.cc
- CCTYPE_CC=config/locale/ctype_members_gnu.cc
- CMESSAGES_H=config/locale/messages_members_gnu.h
- CMESSAGES_CC=config/locale/messages_members_gnu.cc
- CMONEY_CC=config/locale/moneypunct_members_gnu.cc
- CNUMERIC_CC=config/locale/numpunct_members_gnu.cc
- CTIME_CC=config/locale/time_members_gnu.cc
+ CLOCALE_H=config/locale/gnu/c_locale.h
+ CLOCALE_CC=config/locale/gnu/c_locale.cc
+ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
+ CCOLLATE_CC=config/locale/gnu/collate_members.cc
+ CCTYPE_CC=config/locale/gnu/ctype_members.cc
+ CMESSAGES_H=config/locale/gnu/messages_members.h
+ CMESSAGES_CC=config/locale/gnu/messages_members.cc
+ CMONEY_CC=config/locale/gnu/monetary_members.cc
+ CNUMERIC_CC=config/locale/gnu/numeric_members.cc
+ CTIME_CC=config/locale/gnu/time_members.cc
;;
- xieee_1003.1)
+ xieee_1003.1-2001)
AC_MSG_RESULT(generic)
# Don't use gettext.
USE_NLS=no
- CLOCALE_H=config/locale/c_locale_ieee_1003.1-200x.h
- CLOCALE_CC=config/locale/c_locale_ieee_1003.1-200x.cc
- CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h
- CCOLLATE_CC=config/locale/collate_members_generic.cc
- CCTYPE_CC=config/locale/ctype_members_generic.cc
- CMESSAGES_H=config/locale/messages_members_ieee_1003.1-200x.h
- CMESSAGES_CC=config/locale/messages_members_ieee_1003.1-200x.cc
- CMONEY_CC=config/locale/moneypunct_members_generic.cc
- CNUMERIC_CC=config/locale/numpunct_members_generic.cc
- CTIME_CC=config/locale/time_members_generic.cc
+ CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
+ CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
+ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
+ CCOLLATE_CC=config/locale/generic/collate_members.cc
+ CCTYPE_CC=config/locale/generic/ctype_members.cc
+ CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
+ CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
+ CMONEY_CC=config/locale/generic/monetary_members.cc
+ CNUMERIC_CC=config/locale/generic/numeric_members.cc
+ CTIME_CC=config/locale/generic/time_members.cc
;;
*)
echo "$enable_clocale is an unknown locale package" 1>&2
AC_LINK_FILES($CCOLLATE_CC, src/collate.cc)
AC_LINK_FILES($CCTYPE_CC, src/ctype.cc)
AC_LINK_FILES($CMESSAGES_CC, src/messages.cc)
- AC_LINK_FILES($CMONEY_CC, src/moneypunct.cc)
- AC_LINK_FILES($CNUMERIC_CC, src/numpunct.cc)
+ AC_LINK_FILES($CMONEY_CC, src/monetary.cc)
+ AC_LINK_FILES($CNUMERIC_CC, src/numeric.cc)
AC_LINK_FILES($CTIME_CC, src/time.cc)
])
-dnl aclocal.m4 generated automatically by aclocal 1.4
+dnl aclocal.m4 generated automatically by aclocal 1.4-p5
-dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Don't use gettext.
USE_NLS=no
- CLOCALE_H=config/locale/c_locale_generic.h
- CLOCALE_CC=config/locale/c_locale_generic.cc
- CCODECVT_H=config/locale/codecvt_specializations_generic.h
- CCOLLATE_CC=config/locale/collate_members_generic.cc
- CCTYPE_CC=config/locale/ctype_members_generic.cc
- CMESSAGES_H=config/locale/messages_members_generic.h
- CMESSAGES_CC=config/locale/messages_members_generic.cc
- CMONEY_CC=config/locale/moneypunct_members_generic.cc
- CNUMERIC_CC=config/locale/numpunct_members_generic.cc
- CTIME_CC=config/locale/time_members_generic.cc
+ CLOCALE_H=config/locale/generic/c_locale.h
+ CLOCALE_CC=config/locale/generic/c_locale.cc
+ CCODECVT_H=config/locale/generic/codecvt_specializations.h
+ CCOLLATE_CC=config/locale/generic/collate_members.cc
+ CCTYPE_CC=config/locale/generic/ctype_members.cc
+ CMESSAGES_H=config/locale/generic/messages_members.h
+ CMESSAGES_CC=config/locale/generic/messages_members.cc
+ CMONEY_CC=config/locale/generic/monetary_members.cc
+ CNUMERIC_CC=config/locale/generic/numeric_members.cc
+ CTIME_CC=config/locale/generic/time_members.cc
;;
xgnu)
AC_MSG_RESULT(gnu)
AC_SUBST(glibcpp_MOFILES)
AC_SUBST(glibcpp_POFILES)
- CLOCALE_H=config/locale/c_locale_gnu.h
- CLOCALE_CC=config/locale/c_locale_gnu.cc
- CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h
- CCOLLATE_CC=config/locale/collate_members_gnu.cc
- CCTYPE_CC=config/locale/ctype_members_gnu.cc
- CMESSAGES_H=config/locale/messages_members_gnu.h
- CMESSAGES_CC=config/locale/messages_members_gnu.cc
- CMONEY_CC=config/locale/moneypunct_members_gnu.cc
- CNUMERIC_CC=config/locale/numpunct_members_gnu.cc
- CTIME_CC=config/locale/time_members_gnu.cc
+ CLOCALE_H=config/locale/gnu/c_locale.h
+ CLOCALE_CC=config/locale/gnu/c_locale.cc
+ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
+ CCOLLATE_CC=config/locale/gnu/collate_members.cc
+ CCTYPE_CC=config/locale/gnu/ctype_members.cc
+ CMESSAGES_H=config/locale/gnu/messages_members.h
+ CMESSAGES_CC=config/locale/gnu/messages_members.cc
+ CMONEY_CC=config/locale/gnu/monetary_members.cc
+ CNUMERIC_CC=config/locale/gnu/numeric_members.cc
+ CTIME_CC=config/locale/gnu/time_members.cc
;;
xieee_1003.1)
AC_MSG_RESULT(generic)
# Don't use gettext.
USE_NLS=no
- CLOCALE_H=config/locale/c_locale_ieee_1003.1-200x.h
- CLOCALE_CC=config/locale/c_locale_ieee_1003.1-200x.cc
- CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h
- CCOLLATE_CC=config/locale/collate_members_generic.cc
- CCTYPE_CC=config/locale/ctype_members_generic.cc
- CMESSAGES_H=config/locale/messages_members_ieee_1003.1-200x.h
- CMESSAGES_CC=config/locale/messages_members_ieee_1003.1-200x.cc
- CMONEY_CC=config/locale/moneypunct_members_generic.cc
- CNUMERIC_CC=config/locale/numpunct_members_generic.cc
- CTIME_CC=config/locale/time_members_generic.cc
+ CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
+ CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
+ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
+ CCOLLATE_CC=config/locale/generic/collate_members.cc
+ CCTYPE_CC=config/locale/generic/ctype_members.cc
+ CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
+ CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
+ CMONEY_CC=config/locale/generic/monetary_members.cc
+ CNUMERIC_CC=config/locale/generic/numeric_members.cc
+ CTIME_CC=config/locale/generic/time_members.cc
;;
*)
echo "$enable_clocale is an unknown locale package" 1>&2
AC_LINK_FILES($CCOLLATE_CC, src/collate.cc)
AC_LINK_FILES($CCTYPE_CC, src/ctype.cc)
AC_LINK_FILES($CMESSAGES_CC, src/messages.cc)
- AC_LINK_FILES($CMONEY_CC, src/moneypunct.cc)
- AC_LINK_FILES($CNUMERIC_CC, src/numpunct.cc)
+ AC_LINK_FILES($CMONEY_CC, src/monetary.cc)
+ AC_LINK_FILES($CNUMERIC_CC, src/numeric.cc)
AC_LINK_FILES($CTIME_CC, src/time.cc)
])
+#serial 1
+# This test replaces the one in autoconf.
+# Currently this macro should have the same name as the autoconf macro
+# because gettext's gettext.m4 (distributed in the automake package)
+# still uses it. Otherwise, the use in gettext.m4 makes autoheader
+# give these diagnostics:
+# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
+# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
+
+undefine([AC_ISC_POSIX])
+
+AC_DEFUN([AC_ISC_POSIX],
+ [
+ dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
+ AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
+ ]
+)
+
# Add --enable-maintainer-mode option to configure.
# From Jim Meyering
# serial 1
-AC_DEFUN(AM_MAINTAINER_MODE,
+AC_DEFUN([AM_MAINTAINER_MODE],
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
dnl maintainer-mode is disabled by default
AC_ARG_ENABLE(maintainer-mode,
# Define a conditional.
-AC_DEFUN(AM_CONDITIONAL,
+AC_DEFUN([AM_CONDITIONAL],
[AC_SUBST($1_TRUE)
AC_SUBST($1_FALSE)
if $2; then
# Macro to add for using GNU gettext.
# Ulrich Drepper <drepper@cygnus.com>, 1995.
#
-# This file file be copied and used freely without restrictions. It can
+# This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU Public License
# but which still want to provide support for the GNU gettext functionality.
# Please note that the actual code is *not* freely available.
-# serial 3
-
-AC_DEFUN(AM_WITH_NLS,
+# serial 9
+
+dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]).
+dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). Otherwise, a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored.
+dnl LIBDIR is used to find the intl libraries. If empty,
+dnl the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_WITH_NLS],
[AC_MSG_CHECKING([whether NLS is requested])
dnl Default is enabled NLS
AC_ARG_ENABLE(nls,
AC_MSG_RESULT($USE_NLS)
AC_SUBST(USE_NLS)
+ BUILD_INCLUDED_LIBINTL=no
USE_INCLUDED_LIBINTL=no
+ INTLLIBS=
dnl If we use NLS figure out what method
if test "$USE_NLS" = "yes"; then
- AC_DEFINE(ENABLE_NLS)
+ AC_DEFINE(ENABLE_NLS, 1,
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
AC_MSG_CHECKING([whether included gettext is requested])
AC_ARG_WITH(included-gettext,
[ --with-included-gettext use the GNU gettext library included here],
nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
dnl User does not insist on using GNU NLS library. Figure out what
- dnl to use. If gettext or catgets are available (in this order) we
- dnl use this. Else we have to fall back to GNU NLS library.
- dnl catgets is only used if permitted by option --with-catgets.
- nls_cv_header_intl=
- nls_cv_header_libgt=
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
CATOBJEXT=NONE
+ dnl Add a version number to the cache macros.
+ define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc])
+ define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl])
+
AC_CHECK_HEADER(libintl.h,
- [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
- [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
- gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
-
- if test "$gt_cv_func_gettext_libc" != "yes"; then
- AC_CHECK_LIB(intl, bindtextdomain,
- [AC_CACHE_CHECK([for gettext in libintl],
- gt_cv_func_gettext_libintl,
- [AC_TRY_LINK([], [return (int) gettext ("")],
- gt_cv_func_gettext_libintl=yes,
- gt_cv_func_gettext_libintl=no)])])
+ [AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+ [AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;],
+ [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
+ gt_cv_func_gnugettext_libc=yes,
+ gt_cv_func_gnugettext_libc=no)])
+
+ if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ gt_cv_func_gnugettext_libintl,
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -lintl $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;],
+ [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr],
+ gt_cv_func_gnugettext_libintl=yes,
+ gt_cv_func_gnugettext_libintl=no)
+ LIBS="$gt_save_LIBS"])
fi
- if test "$gt_cv_func_gettext_libc" = "yes" \
- || test "$gt_cv_func_gettext_libintl" = "yes"; then
- AC_DEFINE(HAVE_GETTEXT)
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
- if test "$MSGFMT" != "no"; then
- AC_CHECK_FUNCS(dcgettext)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
- AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
- return _nl_msg_cat_cntr],
- [CATOBJEXT=.gmo
- DATADIRNAME=share],
- [CATOBJEXT=.mo
- DATADIRNAME=lib])
- INSTOBJEXT=.mo
- fi
- fi
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if test "$gt_cv_func_gnugettext_libc" = "yes" \
+ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+ && test "$PACKAGE" != gettext; }; then
+ AC_DEFINE(HAVE_GETTEXT, 1,
+ [Define if the GNU gettext() function is already present or preinstalled.])
+
+ if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+ dnl If iconv() is in a separate libiconv library, then anyone
+ dnl linking with libintl{.a,.so} also needs to link with
+ dnl libiconv.
+ INTLLIBS="-lintl $LIBICONV"
+ fi
+
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $INTLLIBS"
+ AC_CHECK_FUNCS(dcgettext)
+ LIBS="$gt_save_LIBS"
+
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
+ if test "$MSGFMT" != "no"; then
+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+ fi
+
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+
+ CATOBJEXT=.gmo
+ fi
])
if test "$CATOBJEXT" = "NONE"; then
- AC_MSG_CHECKING([whether catgets can be used])
- AC_ARG_WITH(catgets,
- [ --with-catgets use catgets functions if available],
- nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
- AC_MSG_RESULT($nls_cv_use_catgets)
-
- if test "$nls_cv_use_catgets" = "yes"; then
- dnl No gettext in C library. Try catgets next.
- AC_CHECK_LIB(i, main)
- AC_CHECK_FUNC(catgets,
- [AC_DEFINE(HAVE_CATGETS)
- INTLOBJS="\$(CATOBJS)"
- AC_PATH_PROG(GENCAT, gencat, no)dnl
- if test "$GENCAT" != "no"; then
- AC_PATH_PROG(GMSGFMT, gmsgfmt, no)
- if test "$GMSGFMT" = "no"; then
- AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)
- fi
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
- USE_INCLUDED_LIBINTL=yes
- CATOBJEXT=.cat
- INSTOBJEXT=.cat
- DATADIRNAME=lib
- INTLDEPS='$(top_builddir)/intl/libintl.a'
- INTLLIBS=$INTLDEPS
- LIBS=`echo $LIBS | sed -e 's/-lintl//'`
- nls_cv_header_intl=intl/libintl.h
- nls_cv_header_libgt=intl/libgettext.h
- fi])
- fi
- fi
-
- if test "$CATOBJEXT" = "NONE"; then
- dnl Neither gettext nor catgets in included in the C library.
+ dnl GNU gettext is not found in the C library.
dnl Fall back on GNU gettext library.
nls_cv_use_gnu_gettext=yes
fi
AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
AC_SUBST(MSGFMT)
+ BUILD_INCLUDED_LIBINTL=yes
USE_INCLUDED_LIBINTL=yes
CATOBJEXT=.gmo
- INSTOBJEXT=.mo
- DATADIRNAME=share
- INTLDEPS='$(top_builddir)/intl/libintl.a'
- INTLLIBS=$INTLDEPS
- LIBS=`echo $LIBS | sed -e 's/-lintl//'`
- nls_cv_header_intl=intl/libintl.h
- nls_cv_header_libgt=intl/libgettext.h
+ INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
fi
dnl Test whether we really found GNU xgettext.
: ;
else
AC_MSG_RESULT(
- [found xgettext programs is not GNU xgettext; ignore it])
+ [found xgettext program is not GNU xgettext; ignore it])
XGETTEXT=":"
fi
fi
- # We need to process the po/ directory.
+ dnl We need to process the po/ directory.
POSUB=po
- else
- DATADIRNAME=share
- nls_cv_header_intl=intl/libintl.h
- nls_cv_header_libgt=intl/libgettext.h
fi
+ AC_OUTPUT_COMMANDS(
+ [for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ echo creating "$ac_dir/POTFILES"
+ sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES"
+ echo creating "$ac_dir/Makefile"
+ sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ fi
+ ;;
+ esac
+ done])
- # If this is used in GNU gettext we have to set USE_NLS to `yes'
- # because some of the sources are only built for this goal.
+
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
if test "$PACKAGE" = gettext; then
- USE_NLS=yes
- USE_INCLUDED_LIBINTL=yes
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+ dnl because plural.y uses bison specific features. It requires at least
+ dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+ dnl compile.
+ dnl bison is only needed for the maintainer (who touches plural.y). But in
+ dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+ dnl the rule in general Makefile. Now, some people carelessly touch the
+ dnl files or have a broken "make" program, hence the plural.c rule will
+ dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+ dnl present or too old.
+ AC_CHECK_PROGS([INTLBISON], [bison])
+ if test -z "$INTLBISON"; then
+ ac_verc_fail=yes
+ else
+ dnl Found it, now check the version.
+ AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison .* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ esac
+ AC_MSG_RESULT([$ac_prog_version])
+ fi
+ if test $ac_verc_fail = yes; then
+ INTLBISON=:
fi
dnl These rules are solely for the distribution goal. While doing this
done
dnl Make all variables we use known to autoconf.
+ AC_SUBST(BUILD_INCLUDED_LIBINTL)
AC_SUBST(USE_INCLUDED_LIBINTL)
AC_SUBST(CATALOGS)
AC_SUBST(CATOBJEXT)
- AC_SUBST(DATADIRNAME)
AC_SUBST(GMOFILES)
- AC_SUBST(INSTOBJEXT)
- AC_SUBST(INTLDEPS)
AC_SUBST(INTLLIBS)
AC_SUBST(INTLOBJS)
AC_SUBST(POFILES)
AC_SUBST(POSUB)
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST(DATADIRNAME)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST(INSTOBJEXT)
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST(GENCAT)
])
-AC_DEFUN(AM_GNU_GETTEXT,
+dnl Usage: Just like AM_WITH_NLS, which see.
+AC_DEFUN([AM_GNU_GETTEXT],
[AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_PROG_RANLIB])dnl
AC_REQUIRE([AC_ISC_POSIX])dnl
AC_REQUIRE([AC_HEADER_STDC])dnl
AC_REQUIRE([AC_TYPE_SIZE_T])dnl
AC_REQUIRE([AC_FUNC_ALLOCA])dnl
AC_REQUIRE([AC_FUNC_MMAP])dnl
+ AC_REQUIRE([jm_GLIBC21])dnl
- AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
-unistd.h values.h sys/param.h])
- AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
-__argz_count __argz_stringify __argz_next])
-
- if test "${ac_cv_func_stpcpy+set}" != "set"; then
- AC_CHECK_FUNCS(stpcpy)
- fi
- if test "${ac_cv_func_stpcpy}" = "yes"; then
- AC_DEFINE(HAVE_STPCPY)
- fi
+ AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+ AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \
+getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
+strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
+ AM_ICONV
+ AM_LANGINFO_CODESET
AM_LC_MESSAGES
- AM_WITH_NLS
+ AM_WITH_NLS([$1],[$2],[$3])
if test "x$CATOBJEXT" != "x"; then
if test "x$ALL_LINGUAS" = "x"; then
else
AC_MSG_CHECKING(for catalogs to be installed)
NEW_LINGUAS=
- for lang in ${LINGUAS=$ALL_LINGUAS}; do
- case "$ALL_LINGUAS" in
- *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
- esac
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ for desiredlang in ${LINGUAS-$ALL_LINGUAS}; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+ fi
done
LINGUAS=$NEW_LINGUAS
AC_MSG_RESULT($LINGUAS)
fi
fi
- dnl The reference to <locale.h> in the installed <libintl.h> file
- dnl must be resolved because we cannot expect the users of this
- dnl to define HAVE_LOCALE_H.
- if test $ac_cv_header_locale_h = yes; then
- INCLUDE_LOCALE_H="#include <locale.h>"
- else
- INCLUDE_LOCALE_H="\
-/* The system does not provide the header <locale.h>. Take care yourself. */"
- fi
- AC_SUBST(INCLUDE_LOCALE_H)
-
- dnl Determine which catalog format we have (if any is needed)
- dnl For now we know about two different formats:
- dnl Linux libc-5 and the normal X/Open format
- test -d intl || mkdir intl
- if test "$CATOBJEXT" = ".cat"; then
- AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
-
- dnl Transform the SED scripts while copying because some dumb SEDs
- dnl cannot handle comments.
- sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
- fi
- dnl po2tbl.sed is always needed.
- sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
- $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
-
- dnl In the intl/Makefile.in we have a special dependency which makes
- dnl only sense for gettext. We comment this out for non-gettext
- dnl packages.
- if test "$PACKAGE" = "gettext"; then
- GT_NO="#NO#"
- GT_YES=
- else
- GT_NO=
- GT_YES="#YES#"
- fi
- AC_SUBST(GT_NO)
- AC_SUBST(GT_YES)
-
dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
- dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
+ dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
dnl Try to locate is.
MKINSTALLDIRS=
if test -n "$ac_aux_dir"; then
fi
AC_SUBST(MKINSTALLDIRS)
- dnl *** For now the libtool support in intl/Makefile is not for real.
- l=
- AC_SUBST(l)
-
- dnl Generate list of files to be processed by xgettext which will
- dnl be included in po/Makefile.
- test -d po || mkdir po
- if test "x$srcdir" != "x."; then
- if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
- posrcprefix="$srcdir/"
- else
- posrcprefix="../$srcdir/"
- fi
- else
- posrcprefix="../"
- fi
- rm -f po/POTFILES
- sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
- < $srcdir/po/POTFILES.in > po/POTFILES
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], [])
+ AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
])
# Search path for a program which passes the given test.
# Ulrich Drepper <drepper@cygnus.com>, 1996.
#
-# This file file be copied and used freely without restrictions. It can
+# This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU Public License
# but which still want to provide support for the GNU gettext functionality.
# Please note that the actual code is *not* freely available.
dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-AC_DEFUN(AM_PATH_PROG_WITH_TEST,
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
[# Extract the first word of "$2", so it can be a program name with args.
set dummy $2; ac_word=[$]2
AC_MSG_CHECKING([for $ac_word])
AC_SUBST($1)dnl
])
+#serial 2
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([jm_GLIBC21],
+ [
+ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+ ac_cv_gnu_library_2_1,
+ [AC_EGREP_CPP([Lucky GNU user],
+ [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+ Lucky GNU user
+ #endif
+#endif
+ ],
+ ac_cv_gnu_library_2_1=yes,
+ ac_cv_gnu_library_2_1=no)
+ ]
+ )
+ AC_SUBST(GLIBC21)
+ GLIBC21="$ac_cv_gnu_library_2_1"
+ ]
+)
+
+#serial AM2
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl 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 LDFLAGS="$LDFLAGS -L$dir/lib"; fi
+ done
+ ])
+
+ AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ am_cv_func_iconv=yes)
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS -liconv"
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes)
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL(am_cv_proto_iconv, [
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([$]{ac_t:-
+ }[$]am_cv_proto_iconv)
+ AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+ [Define as const if the declaration of iconv() needs const.])
+ fi
+ LIBICONV=
+ if test "$am_cv_lib_iconv" = yes; then
+ LIBICONV="-liconv"
+ fi
+ AC_SUBST(LIBICONV)
+])
+
+#serial AM1
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+ [AC_TRY_LINK([#include <langinfo.h>],
+ [char* cs = nl_langinfo(CODESET);],
+ am_cv_langinfo_codeset=yes,
+ am_cv_langinfo_codeset=no)
+ ])
+ if test $am_cv_langinfo_codeset = yes; then
+ AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+ [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+ fi
+])
+
# Check whether LC_MESSAGES is available in <locale.h>.
# Ulrich Drepper <drepper@cygnus.com>, 1995.
#
-# This file file be copied and used freely without restrictions. It can
+# This file can be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU Public License
# but which still want to provide support for the GNU gettext functionality.
# Please note that the actual code is *not* freely available.
-# serial 1
+# serial 2
-AC_DEFUN(AM_LC_MESSAGES,
+AC_DEFUN([AM_LC_MESSAGES],
[if test $ac_cv_header_locale_h = yes; then
AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
[AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
if test $am_cv_val_LC_MESSAGES = yes; then
AC_DEFINE(HAVE_LC_MESSAGES, 1,
- [Define if your locale.h file contains LC_MESSAGES.])
+ [Define if your <locale.h> file defines LC_MESSAGES.])
fi
fi])
dnl Usage:
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
-AC_DEFUN(AM_INIT_AUTOMAKE,
+AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_REQUIRE([AC_PROG_INSTALL])
PACKAGE=[$1]
AC_SUBST(PACKAGE)
# Check to make sure that the build environment is sane.
#
-AC_DEFUN(AM_SANITY_CHECK,
+AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
dnl The program must properly implement --version.
-AC_DEFUN(AM_MISSING_PROG,
+AC_DEFUN([AM_MISSING_PROG],
[AC_MSG_CHECKING(for working $2)
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Like AC_CONFIG_HEADER, but automatically create stamp file.
-AC_DEFUN(AM_CONFIG_HEADER,
+AC_DEFUN([AM_CONFIG_HEADER],
[AC_PREREQ([2.12])
AC_CONFIG_HEADER([$1])
dnl When config.status generates a header, we must update the stamp-h file.
+++ /dev/null
-// Wrapper for underlying C-language localization -*- C++ -*-
-
-// Copyright (C) 2001, 2002 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.
-
-//
-// ISO C++ 14882: 22.8 Standard locale categories.
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-#ifdef _GLIBCPP_HAVE_IEEEFP_H
-#include <ieeefp.h>
-#endif
-
-namespace std
-{
- // Specializations for all types used in num_get.
- template<>
- void
- __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err,
- const __c_locale&, int __base)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- long __l = strtol(__s, &__sanity, __base);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __l;
- else
- __err |= ios_base::failbit;
- }
- }
-
- template<>
- void
- __convert_to_v(const char* __s, unsigned long& __v,
- ios_base::iostate& __err, const __c_locale&, int __base)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- unsigned long __ul = strtoul(__s, &__sanity, __base);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __ul;
- else
- __err |= ios_base::failbit;
- }
- }
-
-#ifdef _GLIBCPP_USE_LONG_LONG
- template<>
- void
- __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err,
- const __c_locale&, int __base)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- long long __ll = strtoll(__s, &__sanity, __base);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __ll;
- else
- __err |= ios_base::failbit;
- }
- }
-
- template<>
- void
- __convert_to_v(const char* __s, unsigned long long& __v,
- ios_base::iostate& __err, const __c_locale&, int __base)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- unsigned long long __ull = strtoull(__s, &__sanity, __base);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __ull;
- else
- __err |= ios_base::failbit;
- }
- }
-#endif
-
- template<>
- void
- __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
- const __c_locale&, int)
- {
- if (!(__err & ios_base::failbit))
- {
- // Assumes __s formatted for "C" locale.
- const char* __old = setlocale(LC_ALL, "C");
- char* __sanity;
- errno = 0;
-#if defined(_GLIBCPP_USE_C99)
- float __f = strtof(__s, &__sanity);
-#else
- double __d = strtod(__s, &__sanity);
- float __f = static_cast<float>(__d);
-#ifdef _GLIBCPP_HAVE_FINITEF
- if (!finitef (__f))
- errno = ERANGE;
-#elif defined (_GLIBCPP_HAVE_FINITE)
- if (!finite (static_cast<double> (__f)))
- errno = ERANGE;
-#elif defined (_GLIBCPP_HAVE_ISINF)
- if (isinf (static_cast<double> (__f)))
- errno = ERANGE;
-#else
- if (fabs(__d) > numeric_limits<float>::max())
- errno = ERANGE;
-#endif
-#endif
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __f;
- else
- __err |= ios_base::failbit;
- setlocale(LC_ALL, __old);
- }
- }
-
- template<>
- void
- __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
- const __c_locale&, int)
- {
- if (!(__err & ios_base::failbit))
- {
- // Assumes __s formatted for "C" locale.
- const char* __old = setlocale(LC_ALL, "C");
- char* __sanity;
- errno = 0;
- double __d = strtod(__s, &__sanity);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __d;
- else
- __err |= ios_base::failbit;
- setlocale(LC_ALL, __old);
- }
- }
-
- template<>
- void
- __convert_to_v(const char* __s, long double& __v,
- ios_base::iostate& __err, const __c_locale&, int)
- {
- if (!(__err & ios_base::failbit))
- {
- // Assumes __s formatted for "C" locale.
- const char* __old = setlocale(LC_ALL, "C");
-#if defined(_GLIBCPP_USE_C99)
- char* __sanity;
- errno = 0;
- long double __ld = strtold(__s, &__sanity);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __ld;
-#else
- typedef char_traits<char>::int_type int_type;
- long double __ld;
- errno = 0;
- int __p = sscanf(__s, "%Lf", &__ld);
- if (errno == ERANGE)
- __p = 0;
-#ifdef _GLIBCPP_HAVE_FINITEL
- if ((__p == 1) && !finitel (__ld))
- __p = 0;
-#endif
- if (__p && static_cast<int_type>(__p) != char_traits<char>::eof())
- __v = __ld;
-#endif
- else
- __err |= ios_base::failbit;
- setlocale(LC_ALL, __old);
- }
- }
-
- void
- locale::facet::_S_create_c_locale(__c_locale& __cloc, const char*)
- { __cloc = NULL; }
-
- void
- locale::facet::_S_destroy_c_locale(__c_locale&)
- { }
-
- __c_locale
- locale::facet::_S_clone_c_locale(__c_locale&)
- { return __c_locale(); }
-} // namespace std
+++ /dev/null
-// Wrapper for underlying C-language localization -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.8 Standard locale categories.
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <clocale>
-
-namespace std
-{
- typedef int* __c_locale;
-}
+++ /dev/null
-// Wrapper for underlying C-language localization -*- C++ -*-
-
-// Copyright (C) 2001, 2002 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.
-
-//
-// ISO C++ 14882: 22.8 Standard locale categories.
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-#include <stdexcept>
-#include <langinfo.h>
-
-namespace std
-{
- template<>
- void
- __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err,
- const __c_locale& __cloc, int __base)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- long __l = __strtol_l(__s, &__sanity, __base, __cloc);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __l;
- else
- __err |= ios_base::failbit;
- }
- }
-
- template<>
- void
- __convert_to_v(const char* __s, unsigned long& __v,
- ios_base::iostate& __err, const __c_locale& __cloc,
- int __base)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __ul;
- else
- __err |= ios_base::failbit;
- }
- }
-
-#ifdef _GLIBCPP_USE_LONG_LONG
- template<>
- void
- __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err,
- const __c_locale& __cloc, int __base)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __ll;
- else
- __err |= ios_base::failbit;
- }
- }
-
- template<>
- void
- __convert_to_v(const char* __s, unsigned long long& __v,
- ios_base::iostate& __err, const __c_locale& __cloc,
- int __base)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- unsigned long long __ull = __strtoull_l(__s, &__sanity, __base,
- __cloc);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __ull;
- else
- __err |= ios_base::failbit;
- }
- }
-#endif
-
- template<>
- void
- __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
- const __c_locale& __cloc, int)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- float __f = __strtof_l(__s, &__sanity, __cloc);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __f;
- else
- __err |= ios_base::failbit;
- }
- }
-
- template<>
- void
- __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
- const __c_locale& __cloc, int)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- double __d = __strtod_l(__s, &__sanity, __cloc);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __d;
- else
- __err |= ios_base::failbit;
- }
- }
-
- template<>
- void
- __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
- const __c_locale& __cloc, int)
- {
- if (!(__err & ios_base::failbit))
- {
- char* __sanity;
- errno = 0;
- long double __ld = __strtold_l(__s, &__sanity, __cloc);
- if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
- __v = __ld;
- else
- __err |= ios_base::failbit;
- }
- }
-
- void
- locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s)
- {
- // XXX
- // Perhaps locale::categories could be made equivalent to LC_*_MASK ?
- // _M_c_locale = __newlocale(1 << LC_ALL, __s, 0);
- // _M_c_locale = __newlocale(locale::all, __s, 0);
- __cloc = __newlocale(1 << LC_ALL, __s, 0);
- if (!__cloc)
- {
- // This named locale is not supported by the underlying OS.
- __throw_runtime_error("attempt to create locale from unknown name");
- }
- }
-
- void
- locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
- { __freelocale(__cloc); }
-
- __c_locale
- locale::facet::_S_clone_c_locale(__c_locale& __cloc)
- { return __duplocale(__cloc); }
-} // namespace std
+++ /dev/null
-// Wrapper for underlying C-language localization -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.8 Standard locale categories.
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <clocale>
-#include <langinfo.h> // For codecvt
-#include <iconv.h> // For codecvt using iconv, iconv_t
-#include <libintl.h> // For messages
-
-#define _GLIBCPP_C_LOCALE_GNU 1
-
-namespace std
-{
- typedef __locale_t __c_locale;
-}
+++ /dev/null
-// Wrapper for underlying C-language localization -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.8 Standard locale categories.
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- void
- locale::facet::_S_create_c_locale(__c_locale&, const char*)
- { }
-
- void
- locale::facet::_S_destroy_c_locale(__c_locale&)
- { }
-
- __c_locale
- locale::facet::_S_clone_c_locale(__c_locale&)
- { return __c_locale(); }
-
- template<>
- void
- numpunct<char>::_M_initialize_numpunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = '.';
- _M_thousands_sep = ',';
- _M_grouping = "";
- _M_truename = "true";
- _M_falsename = "false";
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- void
- numpunct<wchar_t>::_M_initialize_numpunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = L'.';
- _M_thousands_sep = L',';
- _M_grouping = "";
- _M_truename = L"true";
- _M_falsename = L"false";
- }
-#endif
-
- template<>
- void
- moneypunct<char>::_M_initialize_moneypunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = '.';
- _M_thousands_sep = ',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- void
- moneypunct<wchar_t>::_M_initialize_moneypunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = L'.';
- _M_thousands_sep = L',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
-#endif
-} // namespace std
-
+++ /dev/null
-// Wrapper for underlying C-language localization -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.8 Standard locale categories.
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <clocale>
-#include <langinfo.h> // For codecvt
-#include <iconv.h> // For codecvt using iconv, iconv_t
-#include <nl_types.h> // For messages
-
-namespace std
-{
- typedef __locale_t __c_locale;
-}
-
-
-
-
-
+++ /dev/null
-// Locale support (codecvt) -*- C++ -*-
-
-// Copyright (C) 2000, 2001 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.
-
-//
-// ISO C++ 14882: 22.2.1.5 Template class codecvt
-//
-
-// Warning: this file is not meant for user inclusion. Use <locale>.
-
-// Written by Benjamin Kosnik <bkoz@cygnus.com>
-
-// XXX dummy file
+++ /dev/null
-// Locale support (codecvt) -*- C++ -*-
-
-// Copyright (C) 2000, 2001, 2002 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.
-
-//
-// ISO C++ 14882: 22.2.1.5 Template class codecvt
-//
-
-// Warning: this file is not meant for user inclusion. Use <locale>.
-
-// Written by Benjamin Kosnik <bkoz@cygnus.com>
-
- // XXX
- // Define this here to codecvt.cc can have _S_max_size definition.
-#define _GLIBCPP_USE___ENC_TRAITS 1
-
-#if _GLIBCPP_USE_SHADOW_HEADERS
- using _C_legacy::CODESET;
-#endif
-
- // Extension to use icov for dealing with character encodings,
- // including conversions and comparisons between various character
- // sets. This object encapsulates data that may need to be shared between
- // char_traits, codecvt and ctype.
- class __enc_traits
- {
- public:
- // Types:
- // NB: A conversion descriptor subsumes and enhances the
- // functionality of a simple state type such as mbstate_t.
- typedef iconv_t __desc_type;
-
- protected:
- // Data Members:
- // Max size of charset encoding name
- static const int _S_max_size = 32;
- // Name of internal character set encoding.
- char _M_int_enc[_S_max_size];
- // Name of external character set encoding.
- char _M_ext_enc[_S_max_size];
-
- // Conversion descriptor between external encoding to internal encoding.
- __desc_type _M_in_desc;
- // Conversion descriptor between internal encoding to external encoding.
- __desc_type _M_out_desc;
-
- // Details the byte-order marker for the external encoding, if necessary.
- int _M_ext_bom;
-
- // Details the byte-order marker for the internal encoding, if necessary.
- int _M_int_bom;
-
- public:
- explicit __enc_traits()
- : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
- {
- memset(_M_int_enc, 0, _S_max_size);
- memset(_M_ext_enc, 0, _S_max_size);
- }
-
- explicit __enc_traits(const locale& __loc)
- : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
- {
- // __intc_end = whatever we are using internally, which is
- // UCS4 (linux, solaris)
- // UCS2 == UNICODE (microsoft, java, aix, whatever...)
- // XXX Currently don't know how to get this data from target system...
- strcpy(_M_int_enc, "UCS4");
-
- // __extc_end = external codeset in current locale
- // XXX There has got to be a better way to do this.
- __c_locale __cloc;
- locale::facet::_S_create_c_locale(__cloc, __loc.name().c_str());
- strcpy(_M_ext_enc, __nl_langinfo_l(CODESET, __cloc));
- locale::facet::_S_destroy_c_locale(__cloc);
- }
-
- explicit __enc_traits(const char* __int, const char* __ext,
- int __ibom = 0, int __ebom = 0)
- : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
- {
- strncpy(_M_int_enc, __int, _S_max_size);
- strncpy(_M_ext_enc, __ext, _S_max_size);
- }
-
- // 21.1.2 traits typedefs
- // p4
- // typedef STATE_T state_type
- // requires: state_type shall meet the requirements of
- // CopyConstructible types (20.1.3)
- __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0)
- {
- strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
- strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
- _M_ext_bom = __obj._M_ext_bom;
- _M_int_bom = __obj._M_int_bom;
- }
-
- // Need assignment operator as well.
- __enc_traits&
- operator=(const __enc_traits& __obj)
- {
- strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
- strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
- _M_in_desc = 0;
- _M_out_desc = 0;
- _M_ext_bom = __obj._M_ext_bom;
- _M_int_bom = __obj._M_int_bom;
- }
-
- ~__enc_traits()
- {
- __desc_type __err = reinterpret_cast<iconv_t>(-1);
- if (_M_in_desc && _M_in_desc != __err)
- iconv_close(_M_in_desc);
- if (_M_out_desc && _M_out_desc != __err)
- iconv_close(_M_out_desc);
- }
-
- void
- _M_init()
- {
- const __desc_type __err = reinterpret_cast<iconv_t>(-1);
- if (!_M_in_desc)
- {
- _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
- if (_M_in_desc == __err)
- __throw_runtime_error("creating iconv input descriptor failed.");
- }
- if (!_M_out_desc)
- {
- _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
- if (_M_out_desc == __err)
- __throw_runtime_error("creating iconv output descriptor failed.");
- }
- }
-
- bool
- _M_good()
- {
- const __desc_type __err = reinterpret_cast<iconv_t>(-1);
- bool __test = _M_in_desc && _M_in_desc != __err;
- __test &= _M_out_desc && _M_out_desc != __err;
- return __test;
- }
-
- const __desc_type*
- _M_get_in_descriptor()
- { return &_M_in_desc; }
-
- const __desc_type*
- _M_get_out_descriptor()
- { return &_M_out_desc; }
-
- int
- _M_get_external_bom()
- { return _M_ext_bom; }
-
- int
- _M_get_internal_bom()
- { return _M_int_bom; }
-
- const char*
- _M_get_internal_enc()
- { return _M_int_enc; }
-
- const char*
- _M_get_external_enc()
- { return _M_ext_enc; }
- };
-
- // Partial specialization
- // This specialization takes advantage of iconv to provide code
- // conversions between a large number of character encodings.
- template<typename _InternT, typename _ExternT>
- class codecvt<_InternT, _ExternT, __enc_traits>
- : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits>
- {
- public:
- // Types:
- typedef codecvt_base::result result;
- typedef _InternT intern_type;
- typedef _ExternT extern_type;
- typedef __enc_traits state_type;
- typedef __enc_traits::__desc_type __desc_type;
- typedef __enc_traits __enc_type;
-
- // Data Members:
- static locale::id id;
-
- explicit
- codecvt(size_t __refs = 0)
- : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
- { }
-
- explicit
- codecvt(__enc_type* __enc, size_t __refs = 0)
- : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
- { }
-
- protected:
- virtual
- ~codecvt() { }
-
- virtual result
- do_out(state_type& __state, const intern_type* __from,
- const intern_type* __from_end, const intern_type*& __from_next,
- extern_type* __to, extern_type* __to_end,
- extern_type*& __to_next) const;
-
- virtual result
- do_unshift(state_type& __state, extern_type* __to,
- extern_type* __to_end, extern_type*& __to_next) const;
-
- virtual result
- do_in(state_type& __state, const extern_type* __from,
- const extern_type* __from_end, const extern_type*& __from_next,
- intern_type* __to, intern_type* __to_end,
- intern_type*& __to_next) const;
-
- virtual int
- do_encoding() const throw();
-
- virtual bool
- do_always_noconv() const throw();
-
- virtual int
- do_length(const state_type&, const extern_type* __from,
- const extern_type* __end, size_t __max) const;
-
- virtual int
- do_max_length() const throw();
- };
-
- template<typename _InternT, typename _ExternT>
- locale::id
- codecvt<_InternT, _ExternT, __enc_traits>::id;
-
- // This adaptor works around the signature problems of the second
- // argument to iconv(): SUSv2 and others use 'const char**', but glibc 2.2
- // uses 'char**', which matches the POSIX 1003.1-2001 standard.
- // Using this adaptor, g++ will do the work for us.
- template<typename _T>
- inline size_t
- __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*),
- iconv_t __cd, char** __inbuf, size_t* __inbytes,
- char** __outbuf, size_t* __outbytes)
- { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); }
-
- template<typename _InternT, typename _ExternT>
- codecvt_base::result
- codecvt<_InternT, _ExternT, __enc_traits>::
- do_out(state_type& __state, const intern_type* __from,
- const intern_type* __from_end, const intern_type*& __from_next,
- extern_type* __to, extern_type* __to_end,
- extern_type*& __to_next) const
- {
- result __ret = error;
- if (__state._M_good())
- {
- typedef state_type::__desc_type __desc_type;
- const __desc_type* __desc = __state._M_get_out_descriptor();
- const size_t __fmultiple = sizeof(intern_type) / sizeof(char);
- size_t __fbytes = __fmultiple * (__from_end - __from);
- const size_t __tmultiple = sizeof(extern_type) / sizeof(char);
- size_t __tbytes = __tmultiple * (__to_end - __to);
-
- // Argument list for iconv specifies a byte sequence. Thus,
- // all to/from arrays must be brutally casted to char*.
- char* __cto = reinterpret_cast<char*>(__to);
- char* __cfrom;
- size_t __conv;
-
- // Some encodings need a byte order marker as the first item
- // in the byte stream, to designate endian-ness. The default
- // value for the byte order marker is NULL, so if this is
- // the case, it's not necessary and we can just go on our
- // merry way.
- int __int_bom = __state._M_get_internal_bom();
- if (__int_bom)
- {
- size_t __size = __from_end - __from;
- intern_type* __cfixed = static_cast<intern_type*>(__builtin_alloca(sizeof(intern_type) * (__size + 1)));
- __cfixed[0] = static_cast<intern_type>(__int_bom);
- char_traits<intern_type>::copy(__cfixed + 1, __from, __size);
- __cfrom = reinterpret_cast<char*>(__cfixed);
- __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
- &__fbytes, &__cto, &__tbytes);
- }
- else
- {
- intern_type* __cfixed = const_cast<intern_type*>(__from);
- __cfrom = reinterpret_cast<char*>(__cfixed);
- __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes,
- &__cto, &__tbytes);
- }
-
- if (__conv != size_t(-1))
- {
- __from_next = reinterpret_cast<const intern_type*>(__cfrom);
- __to_next = reinterpret_cast<extern_type*>(__cto);
- __ret = ok;
- }
- else
- {
- if (__fbytes < __fmultiple * (__from_end - __from))
- {
- __from_next = reinterpret_cast<const intern_type*>(__cfrom);
- __to_next = reinterpret_cast<extern_type*>(__cto);
- __ret = partial;
- }
- else
- __ret = error;
- }
- }
- return __ret;
- }
-
- template<typename _InternT, typename _ExternT>
- codecvt_base::result
- codecvt<_InternT, _ExternT, __enc_traits>::
- do_unshift(state_type& __state, extern_type* __to,
- extern_type* __to_end, extern_type*& __to_next) const
- {
- result __ret = error;
- if (__state._M_good())
- {
- typedef state_type::__desc_type __desc_type;
- const __desc_type* __desc = __state._M_get_in_descriptor();
- const size_t __tmultiple = sizeof(intern_type) / sizeof(char);
- size_t __tlen = __tmultiple * (__to_end - __to);
-
- // Argument list for iconv specifies a byte sequence. Thus,
- // all to/from arrays must be brutally casted to char*.
- char* __cto = reinterpret_cast<char*>(__to);
- size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL,
- &__cto, &__tlen);
-
- if (__conv != size_t(-1))
- {
- __to_next = reinterpret_cast<extern_type*>(__cto);
- if (__tlen == __tmultiple * (__to_end - __to))
- __ret = noconv;
- else if (__tlen == 0)
- __ret = ok;
- else
- __ret = partial;
- }
- else
- __ret = error;
- }
- return __ret;
- }
-
- template<typename _InternT, typename _ExternT>
- codecvt_base::result
- codecvt<_InternT, _ExternT, __enc_traits>::
- do_in(state_type& __state, const extern_type* __from,
- const extern_type* __from_end, const extern_type*& __from_next,
- intern_type* __to, intern_type* __to_end,
- intern_type*& __to_next) const
- {
- result __ret = error;
- if (__state._M_good())
- {
- typedef state_type::__desc_type __desc_type;
- const __desc_type* __desc = __state._M_get_in_descriptor();
- const size_t __fmultiple = sizeof(extern_type) / sizeof(char);
- size_t __flen = __fmultiple * (__from_end - __from);
- const size_t __tmultiple = sizeof(intern_type) / sizeof(char);
- size_t __tlen = __tmultiple * (__to_end - __to);
-
- // Argument list for iconv specifies a byte sequence. Thus,
- // all to/from arrays must be brutally casted to char*.
- char* __cto = reinterpret_cast<char*>(__to);
- char* __cfrom;
- size_t __conv;
-
- // Some encodings need a byte order marker as the first item
- // in the byte stream, to designate endian-ness. The default
- // value for the byte order marker is NULL, so if this is
- // the case, it's not necessary and we can just go on our
- // merry way.
- int __ext_bom = __state._M_get_external_bom();
- if (__ext_bom)
- {
- size_t __size = __from_end - __from;
- extern_type* __cfixed = static_cast<extern_type*>(__builtin_alloca(sizeof(extern_type) * (__size + 1)));
- __cfixed[0] = static_cast<extern_type>(__ext_bom);
- char_traits<extern_type>::copy(__cfixed + 1, __from, __size);
- __cfrom = reinterpret_cast<char*>(__cfixed);
- __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
- &__flen, &__cto, &__tlen);
- }
- else
- {
- extern_type* __cfixed = const_cast<extern_type*>(__from);
- __cfrom = reinterpret_cast<char*>(__cfixed);
- __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
- &__flen, &__cto, &__tlen);
- }
-
-
- if (__conv != size_t(-1))
- {
- __from_next = reinterpret_cast<const extern_type*>(__cfrom);
- __to_next = reinterpret_cast<intern_type*>(__cto);
- __ret = ok;
- }
- else
- {
- if (__flen < static_cast<size_t>(__from_end - __from))
- {
- __from_next = reinterpret_cast<const extern_type*>(__cfrom);
- __to_next = reinterpret_cast<intern_type*>(__cto);
- __ret = partial;
- }
- else
- __ret = error;
- }
- }
- return __ret;
- }
-
- template<typename _InternT, typename _ExternT>
- int
- codecvt<_InternT, _ExternT, __enc_traits>::
- do_encoding() const throw()
- {
- int __ret = 0;
- if (sizeof(_ExternT) <= sizeof(_InternT))
- __ret = sizeof(_InternT)/sizeof(_ExternT);
- return __ret;
- }
-
- template<typename _InternT, typename _ExternT>
- bool
- codecvt<_InternT, _ExternT, __enc_traits>::
- do_always_noconv() const throw()
- { return false; }
-
- template<typename _InternT, typename _ExternT>
- int
- codecvt<_InternT, _ExternT, __enc_traits>::
- do_length(const state_type&, const extern_type* __from,
- const extern_type* __end, size_t __max) const
- { return min(__max, static_cast<size_t>(__end - __from)); }
-
-#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
-// 74. Garbled text for codecvt::do_max_length
- template<typename _InternT, typename _ExternT>
- int
- codecvt<_InternT, _ExternT, __enc_traits>::
- do_max_length() const throw()
- { return 1; }
-#endif
+++ /dev/null
-// std::collate implementation details, generic version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- // These are basically extensions to char_traits, and perhaps should
- // be put there instead of here.
- template<>
- int
- collate<char>::_M_compare_helper(const char* __one,
- const char* __two) const
- { return strcoll(__one, __two); }
-
- template<>
- size_t
- collate<char>::_M_transform_helper(char* __to, const char* __from,
- size_t __n) const
- { return strxfrm(__to, __from, __n); }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- int
- collate<wchar_t>::_M_compare_helper(const wchar_t* __one,
- const wchar_t* __two) const
- { return wcscoll(__one, __two); }
-
- template<>
- size_t
- collate<wchar_t>::_M_transform_helper(wchar_t* __to, const wchar_t* __from,
- size_t __n) const
- { return wcsxfrm(__to, __from, __n); }
-#endif
-}
+++ /dev/null
-// std::collate implementation details, GNU version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- // These are basically extensions to char_traits, and perhaps should
- // be put there instead of here.
- template<>
- int
- collate<char>::_M_compare_helper(const char* __one,
- const char* __two) const
- { return __strcoll_l(__one, __two, _M_c_locale_collate); }
-
- template<>
- size_t
- collate<char>::_M_transform_helper(char* __to, const char* __from,
- size_t __n) const
- { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- int
- collate<wchar_t>::_M_compare_helper(const wchar_t* __one,
- const wchar_t* __two) const
- { return __wcscoll_l(__one, __two, _M_c_locale_collate); }
-
- template<>
- size_t
- collate<wchar_t>::_M_transform_helper(wchar_t* __to, const wchar_t* __from,
- size_t __n) const
- { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
-#endif
-}
+++ /dev/null
-// std::ctype implementation details, generic version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- // NB: The other ctype<char> specializations are in src/locale.cc and
- // various /config/os/* files.
- template<>
- ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
- : ctype<char>(0, false, __refs)
- {
- _S_destroy_c_locale(_M_c_locale_ctype);
- _S_create_c_locale(_M_c_locale_ctype, __s);
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- ctype<wchar_t>::__wmask_type
- ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
- {
- __wmask_type __ret;
- switch (__m)
- {
- case space:
- __ret = wctype("space");
- break;
- case print:
- __ret = wctype("print");
- break;
- case cntrl:
- __ret = wctype("cntrl");
- break;
- case upper:
- __ret = wctype("upper");
- break;
- case lower:
- __ret = wctype("lower");
- break;
- case alpha:
- __ret = wctype("alpha");
- break;
- case digit:
- __ret = wctype("digit");
- break;
- case punct:
- __ret = wctype("punct");
- break;
- case xdigit:
- __ret = wctype("xdigit");
- break;
- case alnum:
- __ret = wctype("alnum");
- break;
- case graph:
- __ret = wctype("graph");
- break;
- default:
- __ret = 0;
- }
- return __ret;
- };
-
- wchar_t
- ctype<wchar_t>::do_toupper(wchar_t __c) const
- { return towupper(__c); }
-
- const wchar_t*
- ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
- {
- while (__lo < __hi)
- {
- *__lo = towupper(*__lo);
- ++__lo;
- }
- return __hi;
- }
-
- wchar_t
- ctype<wchar_t>::do_tolower(wchar_t __c) const
- { return towlower(__c); }
-
- const wchar_t*
- ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
- {
- while (__lo < __hi)
- {
- *__lo = towlower(*__lo);
- ++__lo;
- }
- return __hi;
- }
-
- bool
- ctype<wchar_t>::
- do_is(mask __m, char_type __c) const
- { return static_cast<bool>(iswctype(__c, _M_convert_to_wmask(__m))); }
-
- const wchar_t*
- ctype<wchar_t>::
- do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __m) const
- {
- while (__lo < __hi && !this->do_is(*__m, *__lo))
- ++__lo;
- return __lo;
- }
-
- const wchar_t*
- ctype<wchar_t>::
- do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
- {
- while (__lo < __hi && !this->do_is(__m, *__lo))
- ++__lo;
- return __lo;
- }
-
- const wchar_t*
- ctype<wchar_t>::
- do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
- {
- while (__lo < __hi && this->do_is(__m, *__lo) != 0)
- ++__lo;
- return __lo;
- }
-
- wchar_t
- ctype<wchar_t>::
- do_widen(char __c) const
- { return btowc(__c); }
-
- const char*
- ctype<wchar_t>::
- do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
- {
- mbstate_t __state;
- memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
- mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
- return __hi;
- }
-
- char
- ctype<wchar_t>::
- do_narrow(wchar_t __wc, char __dfault) const
- {
- int __c = wctob(__wc);
- return (__c == EOF ? __dfault : static_cast<char>(__c));
- }
-
- const wchar_t*
- ctype<wchar_t>::
- do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
- char* __dest) const
- {
- mbstate_t __state;
- memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
- size_t __len = __hi - __lo;
- size_t __conv = wcsrtombs(__dest, &__lo, __len, &__state);
- if (__conv == __len)
- *__dest = __dfault;
- return __hi;
- }
-#endif // _GLIBCPP_USE_WCHAR_T
-}
+++ /dev/null
-// std::ctype implementation details, GNU version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- // NB: The other ctype<char> specializations are in src/locale.cc and
- // various /config/os/* files.
- template<>
- ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
- : ctype<char>(0, false, __refs)
- {
- if (_M_c_locale_ctype)
- _S_destroy_c_locale(_M_c_locale_ctype);
- _S_create_c_locale(_M_c_locale_ctype, __s);
- _M_toupper = _M_c_locale_ctype->__ctype_toupper;
- _M_tolower = _M_c_locale_ctype->__ctype_tolower;
- _M_table = _M_c_locale_ctype->__ctype_b;
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- ctype<wchar_t>::__wmask_type
- ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
- {
- __wmask_type __ret;
- switch (__m)
- {
- case space:
- __ret = __wctype_l("space", _M_c_locale_ctype);
- break;
- case print:
- __ret = __wctype_l("print", _M_c_locale_ctype);
- break;
- case cntrl:
- __ret = __wctype_l("cntrl", _M_c_locale_ctype);
- break;
- case upper:
- __ret = __wctype_l("upper", _M_c_locale_ctype);
- break;
- case lower:
- __ret = __wctype_l("lower", _M_c_locale_ctype);
- break;
- case alpha:
- __ret = __wctype_l("alpha", _M_c_locale_ctype);
- break;
- case digit:
- __ret = __wctype_l("digit", _M_c_locale_ctype);
- break;
- case punct:
- __ret = __wctype_l("punct", _M_c_locale_ctype);
- break;
- case xdigit:
- __ret = __wctype_l("xdigit", _M_c_locale_ctype);
- break;
- case alnum:
- __ret = __wctype_l("alnum", _M_c_locale_ctype);
- break;
- case graph:
- __ret = __wctype_l("graph", _M_c_locale_ctype);
- break;
- default:
- __ret = 0;
- }
- return __ret;
- };
-
- wchar_t
- ctype<wchar_t>::do_toupper(wchar_t __c) const
- { return __towupper_l(__c, _M_c_locale_ctype); }
-
- const wchar_t*
- ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
- {
- while (__lo < __hi)
- {
- *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
- ++__lo;
- }
- return __hi;
- }
-
- wchar_t
- ctype<wchar_t>::do_tolower(wchar_t __c) const
- { return __towlower_l(__c, _M_c_locale_ctype); }
-
- const wchar_t*
- ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
- {
- while (__lo < __hi)
- {
- *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
- ++__lo;
- }
- return __hi;
- }
-
- bool
- ctype<wchar_t>::
- do_is(mask __m, char_type __c) const
- { return static_cast<bool>(__iswctype_l(__c, _M_convert_to_wmask(__m),
- _M_c_locale_ctype)); }
-
- const wchar_t*
- ctype<wchar_t>::
- do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __m) const
- {
- while (__lo < __hi && !this->do_is(*__m, *__lo))
- ++__lo;
- return __lo;
- }
-
- const wchar_t*
- ctype<wchar_t>::
- do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
- {
- while (__lo < __hi && !this->do_is(__m, *__lo))
- ++__lo;
- return __lo;
- }
-
- const wchar_t*
- ctype<wchar_t>::
- do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
- {
- while (__lo < __hi && this->do_is(__m, *__lo) != 0)
- ++__lo;
- return __lo;
- }
-
- wchar_t
- ctype<wchar_t>::
- do_widen(char __c) const
- { return btowc(__c); }
-
- const char*
- ctype<wchar_t>::
- do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
- {
- mbstate_t __state;
- memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
- mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
- return __hi;
- }
-
- char
- ctype<wchar_t>::
- do_narrow(wchar_t __wc, char __dfault) const
- {
- int __c = wctob(__wc);
- return (__c == EOF ? __dfault : static_cast<char>(__c));
- }
-
- const wchar_t*
- ctype<wchar_t>::
- do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
- char* __dest) const
- {
- mbstate_t __state;
- memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
- size_t __len = __hi - __lo;
- size_t __conv = wcsrtombs(__dest, &__lo, __len, &__state);
- if (__conv == __len)
- *__dest = __dfault;
- return __hi;
- }
-#endif // _GLIBCPP_USE_WCHAR_T
-}
--- /dev/null
+// Wrapper for underlying C-language localization -*- C++ -*-
+
+// Copyright (C) 2001, 2002 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.
+
+//
+// ISO C++ 14882: 22.8 Standard locale categories.
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+#ifdef _GLIBCPP_HAVE_IEEEFP_H
+#include <ieeefp.h>
+#endif
+
+namespace std
+{
+ // Specializations for all types used in num_get.
+ template<>
+ void
+ __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err,
+ const __c_locale&, int __base)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ long __l = strtol(__s, &__sanity, __base);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __l;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+
+ template<>
+ void
+ __convert_to_v(const char* __s, unsigned long& __v,
+ ios_base::iostate& __err, const __c_locale&, int __base)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ unsigned long __ul = strtoul(__s, &__sanity, __base);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __ul;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+
+#ifdef _GLIBCPP_USE_LONG_LONG
+ template<>
+ void
+ __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err,
+ const __c_locale&, int __base)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ long long __ll = strtoll(__s, &__sanity, __base);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __ll;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+
+ template<>
+ void
+ __convert_to_v(const char* __s, unsigned long long& __v,
+ ios_base::iostate& __err, const __c_locale&, int __base)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ unsigned long long __ull = strtoull(__s, &__sanity, __base);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __ull;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+#endif
+
+ template<>
+ void
+ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
+ const __c_locale&, int)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ // Assumes __s formatted for "C" locale.
+ const char* __old = setlocale(LC_ALL, "C");
+ char* __sanity;
+ errno = 0;
+#if defined(_GLIBCPP_USE_C99)
+ float __f = strtof(__s, &__sanity);
+#else
+ double __d = strtod(__s, &__sanity);
+ float __f = static_cast<float>(__d);
+#ifdef _GLIBCPP_HAVE_FINITEF
+ if (!finitef (__f))
+ errno = ERANGE;
+#elif defined (_GLIBCPP_HAVE_FINITE)
+ if (!finite (static_cast<double> (__f)))
+ errno = ERANGE;
+#elif defined (_GLIBCPP_HAVE_ISINF)
+ if (isinf (static_cast<double> (__f)))
+ errno = ERANGE;
+#else
+ if (fabs(__d) > numeric_limits<float>::max())
+ errno = ERANGE;
+#endif
+#endif
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __f;
+ else
+ __err |= ios_base::failbit;
+ setlocale(LC_ALL, __old);
+ }
+ }
+
+ template<>
+ void
+ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
+ const __c_locale&, int)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ // Assumes __s formatted for "C" locale.
+ const char* __old = setlocale(LC_ALL, "C");
+ char* __sanity;
+ errno = 0;
+ double __d = strtod(__s, &__sanity);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __d;
+ else
+ __err |= ios_base::failbit;
+ setlocale(LC_ALL, __old);
+ }
+ }
+
+ template<>
+ void
+ __convert_to_v(const char* __s, long double& __v,
+ ios_base::iostate& __err, const __c_locale&, int)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ // Assumes __s formatted for "C" locale.
+ const char* __old = setlocale(LC_ALL, "C");
+#if defined(_GLIBCPP_USE_C99)
+ char* __sanity;
+ errno = 0;
+ long double __ld = strtold(__s, &__sanity);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __ld;
+#else
+ typedef char_traits<char>::int_type int_type;
+ long double __ld;
+ errno = 0;
+ int __p = sscanf(__s, "%Lf", &__ld);
+ if (errno == ERANGE)
+ __p = 0;
+#ifdef _GLIBCPP_HAVE_FINITEL
+ if ((__p == 1) && !finitel (__ld))
+ __p = 0;
+#endif
+ if (__p && static_cast<int_type>(__p) != char_traits<char>::eof())
+ __v = __ld;
+#endif
+ else
+ __err |= ios_base::failbit;
+ setlocale(LC_ALL, __old);
+ }
+ }
+
+ void
+ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char*)
+ { __cloc = NULL; }
+
+ void
+ locale::facet::_S_destroy_c_locale(__c_locale&)
+ { }
+
+ __c_locale
+ locale::facet::_S_clone_c_locale(__c_locale&)
+ { return __c_locale(); }
+} // namespace std
--- /dev/null
+// Wrapper for underlying C-language localization -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.8 Standard locale categories.
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <clocale>
+
+namespace std
+{
+ typedef int* __c_locale;
+}
--- /dev/null
+// Locale support (codecvt) -*- C++ -*-
+
+// Copyright (C) 2000, 2001 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.
+
+//
+// ISO C++ 14882: 22.2.1.5 Template class codecvt
+//
+
+// Warning: this file is not meant for user inclusion. Use <locale>.
+
+// Written by Benjamin Kosnik <bkoz@cygnus.com>
+
+// XXX dummy file
--- /dev/null
+// std::collate implementation details, generic version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ // These are basically extensions to char_traits, and perhaps should
+ // be put there instead of here.
+ template<>
+ int
+ collate<char>::_M_compare_helper(const char* __one,
+ const char* __two) const
+ { return strcoll(__one, __two); }
+
+ template<>
+ size_t
+ collate<char>::_M_transform_helper(char* __to, const char* __from,
+ size_t __n) const
+ { return strxfrm(__to, __from, __n); }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ int
+ collate<wchar_t>::_M_compare_helper(const wchar_t* __one,
+ const wchar_t* __two) const
+ { return wcscoll(__one, __two); }
+
+ template<>
+ size_t
+ collate<wchar_t>::_M_transform_helper(wchar_t* __to, const wchar_t* __from,
+ size_t __n) const
+ { return wcsxfrm(__to, __from, __n); }
+#endif
+}
--- /dev/null
+// std::ctype implementation details, generic version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ // NB: The other ctype<char> specializations are in src/locale.cc and
+ // various /config/os/* files.
+ template<>
+ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
+ : ctype<char>(0, false, __refs)
+ {
+ _S_destroy_c_locale(_M_c_locale_ctype);
+ _S_create_c_locale(_M_c_locale_ctype, __s);
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ ctype<wchar_t>::__wmask_type
+ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
+ {
+ __wmask_type __ret;
+ switch (__m)
+ {
+ case space:
+ __ret = wctype("space");
+ break;
+ case print:
+ __ret = wctype("print");
+ break;
+ case cntrl:
+ __ret = wctype("cntrl");
+ break;
+ case upper:
+ __ret = wctype("upper");
+ break;
+ case lower:
+ __ret = wctype("lower");
+ break;
+ case alpha:
+ __ret = wctype("alpha");
+ break;
+ case digit:
+ __ret = wctype("digit");
+ break;
+ case punct:
+ __ret = wctype("punct");
+ break;
+ case xdigit:
+ __ret = wctype("xdigit");
+ break;
+ case alnum:
+ __ret = wctype("alnum");
+ break;
+ case graph:
+ __ret = wctype("graph");
+ break;
+ default:
+ __ret = 0;
+ }
+ return __ret;
+ };
+
+ wchar_t
+ ctype<wchar_t>::do_toupper(wchar_t __c) const
+ { return towupper(__c); }
+
+ const wchar_t*
+ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
+ {
+ while (__lo < __hi)
+ {
+ *__lo = towupper(*__lo);
+ ++__lo;
+ }
+ return __hi;
+ }
+
+ wchar_t
+ ctype<wchar_t>::do_tolower(wchar_t __c) const
+ { return towlower(__c); }
+
+ const wchar_t*
+ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
+ {
+ while (__lo < __hi)
+ {
+ *__lo = towlower(*__lo);
+ ++__lo;
+ }
+ return __hi;
+ }
+
+ bool
+ ctype<wchar_t>::
+ do_is(mask __m, char_type __c) const
+ { return static_cast<bool>(iswctype(__c, _M_convert_to_wmask(__m))); }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __m) const
+ {
+ while (__lo < __hi && !this->do_is(*__m, *__lo))
+ ++__lo;
+ return __lo;
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
+ {
+ while (__lo < __hi && !this->do_is(__m, *__lo))
+ ++__lo;
+ return __lo;
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
+ {
+ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
+ ++__lo;
+ return __lo;
+ }
+
+ wchar_t
+ ctype<wchar_t>::
+ do_widen(char __c) const
+ { return btowc(__c); }
+
+ const char*
+ ctype<wchar_t>::
+ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
+ {
+ mbstate_t __state;
+ memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
+ mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
+ return __hi;
+ }
+
+ char
+ ctype<wchar_t>::
+ do_narrow(wchar_t __wc, char __dfault) const
+ {
+ int __c = wctob(__wc);
+ return (__c == EOF ? __dfault : static_cast<char>(__c));
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
+ char* __dest) const
+ {
+ mbstate_t __state;
+ memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
+ size_t __len = __hi - __lo;
+ size_t __conv = wcsrtombs(__dest, &__lo, __len, &__state);
+ if (__conv == __len)
+ *__dest = __dfault;
+ return __hi;
+ }
+#endif // _GLIBCPP_USE_WCHAR_T
+}
--- /dev/null
+// std::messages implementation details, generic version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ // Specializations
+ template<>
+ string
+ messages<char>::do_get(catalog, int, int, const string& __dfault) const
+ { return __dfault; }
+}
--- /dev/null
+// std::messages implementation details, generic version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+ // Non-virtual member functions.
+ template<typename _CharT>
+ typename messages<_CharT>::catalog
+ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
+ const char*) const
+ { return this->do_open(__s, __loc); }
+
+ // Virtual member functions.
+ template<typename _CharT>
+ typename messages<_CharT>::catalog
+ messages<_CharT>::do_open(const basic_string<char>&, const locale&) const
+ { return 0; }
+
+ template<typename _CharT>
+ typename messages<_CharT>::string_type
+ messages<_CharT>::do_get(catalog, int, int,
+ const string_type& __dfault) const
+ { return __dfault; }
+
+ template<typename _CharT>
+ void
+ messages<_CharT>::do_close(catalog) const
+ { }
--- /dev/null
+// std::moneypunct implementation details, generic version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ // Construct and return valid pattern consisting of some combination of:
+ // space none symbol sign value
+ money_base::pattern
+ money_base::_S_construct_pattern(char, char, char)
+ { return _S_default_pattern; }
+
+ template<>
+ void
+ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = '.';
+ _M_thousands_sep = ',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+
+ template<>
+ void
+ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = '.';
+ _M_thousands_sep = ',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ void
+ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = L'.';
+ _M_thousands_sep = L',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+
+ template<>
+ void
+ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = L'.';
+ _M_thousands_sep = L',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+#endif
+}
--- /dev/null
+// std::numpunct implementation details, generic version -*- C++ -*-
+
+// Copyright (C) 2001, 2002 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.
+
+//
+// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ template<>
+ void
+ numpunct<char>::_M_initialize_numpunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = '.';
+ _M_thousands_sep = ',';
+ _M_grouping = "";
+ _M_truename = "true";
+ _M_falsename = "false";
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ void
+ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = L'.';
+ _M_thousands_sep = L',';
+ _M_grouping = "";
+ _M_truename = L"true";
+ _M_falsename = L"false";
+ }
+#endif
+}
--- /dev/null
+// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
+
+// Copyright (C) 2001, 2002 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.
+
+//
+// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
+// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ template<>
+ void
+ __timepunct<char>::
+ _M_put_helper(char* __s, size_t __maxlen, const char* __format,
+ const tm* __tm) const
+ {
+ const char* __old = setlocale(LC_ALL, _M_name_timepunct);
+ strftime(__s, __maxlen, __format, __tm);
+ setlocale(LC_ALL, __old);
+ }
+
+ template<>
+ void
+ __timepunct<char>::_M_initialize_timepunct(__c_locale)
+ {
+ // "C" locale
+ _M_date_format = "%m/%d/%Y";
+ _M_date_era_format = "%m/%d/%Y";
+ _M_time_format = "%H:%M:%S";
+ _M_time_era_format = "%H:%M:%S";
+ _M_date_time_format = "";
+ _M_date_time_era_format = "";
+ _M_am = "AM";
+ _M_pm = "PM";
+ _M_am_pm_format = "";
+
+ // Day names, starting with "C"'s Sunday.
+ _M_day1 = "Sunday";
+ _M_day2 = "Monday";
+ _M_day3 = "Tuesday";
+ _M_day4 = "Wednesday";
+ _M_day5 = "Thursday";
+ _M_day6 = "Friday";
+ _M_day7 = "Saturday";
+
+ // Abbreviated day names, starting with "C"'s Sun.
+ _M_day_a1 = "Sun";
+ _M_day_a2 = "Mon";
+ _M_day_a3 = "Tue";
+ _M_day_a4 = "Wed";
+ _M_day_a5 = "Thu";
+ _M_day_a6 = "Fri";
+ _M_day_a7 = "Sat";
+
+ // Month names, starting with "C"'s January.
+ _M_month01 = "January";
+ _M_month02 = "February";
+ _M_month03 = "March";
+ _M_month04 = "April";
+ _M_month05 = "May";
+ _M_month06 = "June";
+ _M_month07 = "July";
+ _M_month08 = "August";
+ _M_month09 = "September";
+ _M_month10 = "October";
+ _M_month11 = "November";
+ _M_month12 = "December";
+
+ // Abbreviated month names, starting with "C"'s Jan.
+ _M_month_a01 = "Jan";
+ _M_month_a02 = "Feb";
+ _M_month_a03 = "Mar";
+ _M_month_a04 = "Apr";
+ _M_month_a05 = "May";
+ _M_month_a06 = "Jun";
+ _M_month_a07 = "July";
+ _M_month_a08 = "Aug";
+ _M_month_a09 = "Sep";
+ _M_month_a10 = "Oct";
+ _M_month_a11 = "Nov";
+ _M_month_a12 = "Dec";
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ void
+ __timepunct<wchar_t>::
+ _M_put_helper(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
+ const tm* __tm) const
+ {
+ const char* __old = setlocale(LC_ALL, _M_name_timepunct);
+ wcsftime(__s, __maxlen, __format, __tm);
+ setlocale(LC_ALL, __old);
+ }
+
+ template<>
+ void
+ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale)
+ {
+ // "C" locale
+ _M_date_format = L"%m/%d/%y";
+ _M_date_era_format = L"%m/%d/%y";
+ _M_time_format = L"%H:%M:%S";
+ _M_time_era_format = L"%H:%M:%S";
+ _M_date_time_format = L"";
+ _M_date_time_era_format = L"";
+ _M_am = L"AM";
+ _M_pm = L"PM";
+ _M_am_pm_format = L"";
+
+ // Day names, starting with "C"'s Sunday.
+ _M_day1 = L"Sunday";
+ _M_day2 = L"Monday";
+ _M_day3 = L"Tuesday";
+ _M_day4 = L"Wednesday";
+ _M_day5 = L"Thursday";
+ _M_day6 = L"Friday";
+ _M_day7 = L"Saturday";
+
+ // Abbreviated day names, starting with "C"'s Sun.
+ _M_day_a1 = L"Sun";
+ _M_day_a2 = L"Mon";
+ _M_day_a3 = L"Tue";
+ _M_day_a4 = L"Wed";
+ _M_day_a5 = L"Thu";
+ _M_day_a6 = L"Fri";
+ _M_day_a7 = L"Sat";
+
+ // Month names, starting with "C"'s January.
+ _M_month01 = L"January";
+ _M_month02 = L"February";
+ _M_month03 = L"March";
+ _M_month04 = L"April";
+ _M_month05 = L"May";
+ _M_month06 = L"June";
+ _M_month07 = L"July";
+ _M_month08 = L"August";
+ _M_month09 = L"September";
+ _M_month10 = L"October";
+ _M_month11 = L"November";
+ _M_month12 = L"December";
+
+ // Abbreviated month names, starting with "C"'s Jan.
+ _M_month_a01 = L"Jan";
+ _M_month_a02 = L"Feb";
+ _M_month_a03 = L"Mar";
+ _M_month_a04 = L"Apr";
+ _M_month_a05 = L"May";
+ _M_month_a06 = L"Jun";
+ _M_month_a07 = L"July";
+ _M_month_a08 = L"Aug";
+ _M_month_a09 = L"Sep";
+ _M_month_a10 = L"Oct";
+ _M_month_a11 = L"Nov";
+ _M_month_a12 = L"Dec";
+ }
+#endif
+}
--- /dev/null
+// Wrapper for underlying C-language localization -*- C++ -*-
+
+// Copyright (C) 2001, 2002 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.
+
+//
+// ISO C++ 14882: 22.8 Standard locale categories.
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+#include <stdexcept>
+#include <langinfo.h>
+
+namespace std
+{
+ template<>
+ void
+ __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err,
+ const __c_locale& __cloc, int __base)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ long __l = __strtol_l(__s, &__sanity, __base, __cloc);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __l;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+
+ template<>
+ void
+ __convert_to_v(const char* __s, unsigned long& __v,
+ ios_base::iostate& __err, const __c_locale& __cloc,
+ int __base)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __ul;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+
+#ifdef _GLIBCPP_USE_LONG_LONG
+ template<>
+ void
+ __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err,
+ const __c_locale& __cloc, int __base)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __ll;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+
+ template<>
+ void
+ __convert_to_v(const char* __s, unsigned long long& __v,
+ ios_base::iostate& __err, const __c_locale& __cloc,
+ int __base)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ unsigned long long __ull = __strtoull_l(__s, &__sanity, __base,
+ __cloc);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __ull;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+#endif
+
+ template<>
+ void
+ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
+ const __c_locale& __cloc, int)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ float __f = __strtof_l(__s, &__sanity, __cloc);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __f;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+
+ template<>
+ void
+ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
+ const __c_locale& __cloc, int)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ double __d = __strtod_l(__s, &__sanity, __cloc);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __d;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+
+ template<>
+ void
+ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
+ const __c_locale& __cloc, int)
+ {
+ if (!(__err & ios_base::failbit))
+ {
+ char* __sanity;
+ errno = 0;
+ long double __ld = __strtold_l(__s, &__sanity, __cloc);
+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
+ __v = __ld;
+ else
+ __err |= ios_base::failbit;
+ }
+ }
+
+ void
+ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s)
+ {
+ // XXX
+ // Perhaps locale::categories could be made equivalent to LC_*_MASK ?
+ // _M_c_locale = __newlocale(1 << LC_ALL, __s, 0);
+ // _M_c_locale = __newlocale(locale::all, __s, 0);
+ __cloc = __newlocale(1 << LC_ALL, __s, 0);
+ if (!__cloc)
+ {
+ // This named locale is not supported by the underlying OS.
+ __throw_runtime_error("attempt to create locale from unknown name");
+ }
+ }
+
+ void
+ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
+ { __freelocale(__cloc); }
+
+ __c_locale
+ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
+ { return __duplocale(__cloc); }
+} // namespace std
--- /dev/null
+// Wrapper for underlying C-language localization -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.8 Standard locale categories.
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <clocale>
+#include <langinfo.h> // For codecvt
+#include <iconv.h> // For codecvt using iconv, iconv_t
+#include <libintl.h> // For messages
+
+#define _GLIBCPP_C_LOCALE_GNU 1
+
+namespace std
+{
+ typedef __locale_t __c_locale;
+}
--- /dev/null
+// std::collate implementation details, GNU version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ // These are basically extensions to char_traits, and perhaps should
+ // be put there instead of here.
+ template<>
+ int
+ collate<char>::_M_compare_helper(const char* __one,
+ const char* __two) const
+ { return __strcoll_l(__one, __two, _M_c_locale_collate); }
+
+ template<>
+ size_t
+ collate<char>::_M_transform_helper(char* __to, const char* __from,
+ size_t __n) const
+ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ int
+ collate<wchar_t>::_M_compare_helper(const wchar_t* __one,
+ const wchar_t* __two) const
+ { return __wcscoll_l(__one, __two, _M_c_locale_collate); }
+
+ template<>
+ size_t
+ collate<wchar_t>::_M_transform_helper(wchar_t* __to, const wchar_t* __from,
+ size_t __n) const
+ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
+#endif
+}
--- /dev/null
+// std::ctype implementation details, GNU version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ // NB: The other ctype<char> specializations are in src/locale.cc and
+ // various /config/os/* files.
+ template<>
+ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
+ : ctype<char>(0, false, __refs)
+ {
+ if (_M_c_locale_ctype)
+ _S_destroy_c_locale(_M_c_locale_ctype);
+ _S_create_c_locale(_M_c_locale_ctype, __s);
+ _M_toupper = _M_c_locale_ctype->__ctype_toupper;
+ _M_tolower = _M_c_locale_ctype->__ctype_tolower;
+ _M_table = _M_c_locale_ctype->__ctype_b;
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ ctype<wchar_t>::__wmask_type
+ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
+ {
+ __wmask_type __ret;
+ switch (__m)
+ {
+ case space:
+ __ret = __wctype_l("space", _M_c_locale_ctype);
+ break;
+ case print:
+ __ret = __wctype_l("print", _M_c_locale_ctype);
+ break;
+ case cntrl:
+ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
+ break;
+ case upper:
+ __ret = __wctype_l("upper", _M_c_locale_ctype);
+ break;
+ case lower:
+ __ret = __wctype_l("lower", _M_c_locale_ctype);
+ break;
+ case alpha:
+ __ret = __wctype_l("alpha", _M_c_locale_ctype);
+ break;
+ case digit:
+ __ret = __wctype_l("digit", _M_c_locale_ctype);
+ break;
+ case punct:
+ __ret = __wctype_l("punct", _M_c_locale_ctype);
+ break;
+ case xdigit:
+ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
+ break;
+ case alnum:
+ __ret = __wctype_l("alnum", _M_c_locale_ctype);
+ break;
+ case graph:
+ __ret = __wctype_l("graph", _M_c_locale_ctype);
+ break;
+ default:
+ __ret = 0;
+ }
+ return __ret;
+ };
+
+ wchar_t
+ ctype<wchar_t>::do_toupper(wchar_t __c) const
+ { return __towupper_l(__c, _M_c_locale_ctype); }
+
+ const wchar_t*
+ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
+ {
+ while (__lo < __hi)
+ {
+ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
+ ++__lo;
+ }
+ return __hi;
+ }
+
+ wchar_t
+ ctype<wchar_t>::do_tolower(wchar_t __c) const
+ { return __towlower_l(__c, _M_c_locale_ctype); }
+
+ const wchar_t*
+ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
+ {
+ while (__lo < __hi)
+ {
+ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
+ ++__lo;
+ }
+ return __hi;
+ }
+
+ bool
+ ctype<wchar_t>::
+ do_is(mask __m, char_type __c) const
+ { return static_cast<bool>(__iswctype_l(__c, _M_convert_to_wmask(__m),
+ _M_c_locale_ctype)); }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __m) const
+ {
+ while (__lo < __hi && !this->do_is(*__m, *__lo))
+ ++__lo;
+ return __lo;
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
+ {
+ while (__lo < __hi && !this->do_is(__m, *__lo))
+ ++__lo;
+ return __lo;
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
+ {
+ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
+ ++__lo;
+ return __lo;
+ }
+
+ wchar_t
+ ctype<wchar_t>::
+ do_widen(char __c) const
+ { return btowc(__c); }
+
+ const char*
+ ctype<wchar_t>::
+ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
+ {
+ mbstate_t __state;
+ memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
+ mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
+ return __hi;
+ }
+
+ char
+ ctype<wchar_t>::
+ do_narrow(wchar_t __wc, char __dfault) const
+ {
+ int __c = wctob(__wc);
+ return (__c == EOF ? __dfault : static_cast<char>(__c));
+ }
+
+ const wchar_t*
+ ctype<wchar_t>::
+ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
+ char* __dest) const
+ {
+ mbstate_t __state;
+ memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
+ size_t __len = __hi - __lo;
+ size_t __conv = wcsrtombs(__dest, &__lo, __len, &__state);
+ if (__conv == __len)
+ *__dest = __dfault;
+ return __hi;
+ }
+#endif // _GLIBCPP_USE_WCHAR_T
+}
--- /dev/null
+// std::messages implementation details, GNU version -*- C++ -*-
+
+// Copyright (C) 2001, 2002 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.
+
+//
+// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ // Specializations
+ template<>
+ string
+ messages<char>::do_get(catalog, int, int, const string& __dfault) const
+ {
+#if 0
+ // Requires glibc 2.3
+ __c_locale __old = uselocale(_M_c_locale_messages);
+ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
+ uselocale(__old);
+ return string(__msg);
+#else
+ const char* __old = setlocale(LC_ALL, _M_name_messages);
+ const char* __msg = gettext(__dfault.c_str());
+ setlocale(LC_ALL, __old);
+ return string(__msg);
+#endif
+ }
+}
--- /dev/null
+// std::messages implementation details, GNU version -*- C++ -*-
+
+// Copyright (C) 2001, 2002 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.
+
+//
+// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+ // Non-virtual member functions.
+ template<typename _CharT>
+ typename messages<_CharT>::catalog
+ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
+ const char* __dir) const
+ {
+ bindtextdomain(__s.c_str(), __dir);
+ return this->do_open(__s, __loc);
+ }
+
+ template<typename _CharT>
+ typename messages<_CharT>::catalog
+ messages<_CharT>::do_open(const basic_string<char>& __s,
+ const locale&) const
+ {
+ // No error checking is done, assume the catalog exists and can
+ // be used.
+ textdomain(__s.c_str());
+ return 0;
+ }
+
+ template<typename _CharT>
+ typename messages<_CharT>::string_type
+ messages<_CharT>::do_get(catalog, int, int,
+ const string_type& __dfault) const
+ {
+#if 0
+ // Requires glibc 2.3
+ __c_locale __old = uselocale(_M_c_locale_messages);
+ char* __msg = gettext(_M_convert_to_char(__dfault));
+ uselocale(__old);
+ return _M_convert_from_char(__msg);
+#else
+ const char* __old = setlocale(LC_ALL, _M_name_messages);
+ char* __msg = gettext(_M_convert_to_char(__dfault));
+ setlocale(LC_ALL, __old);
+ return _M_convert_from_char(__msg);
+#endif
+ }
+
+ template<typename _CharT>
+ void
+ messages<_CharT>::do_close(catalog) const
+ { }
--- /dev/null
+// std::moneypunct implementation details, GNU version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ // Construct and return valid pattern consisting of some combination of:
+ // space none symbol sign value
+ money_base::pattern
+ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
+ {
+ pattern __ret;
+
+ // This insanely complicated routine attempts to construct a valid
+ // pattern for use with monyepunct. A couple of invariants:
+
+ // if (__precedes) symbol -> value
+ // else value -> symbol
+
+ // if (__space) space
+ // else none
+
+ // none == never first
+ // space never first or last
+
+ // Any elegant implementations of this are welcome.
+ switch (__posn)
+ {
+ case 0:
+ case 1:
+ // 1 The sign precedes the value and symbol.
+ if (__space)
+ {
+ // Pattern starts with sign.
+ if (__precedes)
+ {
+ __ret.field[1] = symbol;
+ __ret.field[2] = space;
+ __ret.field[3] = value;
+ }
+ else
+ {
+ __ret.field[1] = value;
+ __ret.field[2] = space;
+ __ret.field[3] = symbol;
+ }
+ __ret.field[0] = sign;
+ }
+ else
+ {
+ // Pattern starts with sign and ends with none.
+ if (__precedes)
+ {
+ __ret.field[1] = symbol;
+ __ret.field[2] = value;
+ }
+ else
+ {
+ __ret.field[1] = value;
+ __ret.field[2] = symbol;
+ }
+ __ret.field[0] = sign;
+ __ret.field[3] = none;
+ }
+ break;
+ case 2:
+ // 2 The sign follows the value and symbol.
+ if (__space)
+ {
+ // Pattern either ends with sign.
+ if (__precedes)
+ {
+ __ret.field[0] = symbol;
+ __ret.field[1] = space;
+ __ret.field[2] = value;
+ }
+ else
+ {
+ __ret.field[0] = value;
+ __ret.field[1] = space;
+ __ret.field[2] = symbol;
+ }
+ __ret.field[3] = sign;
+ }
+ else
+ {
+ // Pattern ends with sign then none.
+ if (__precedes)
+ {
+ __ret.field[0] = symbol;
+ __ret.field[1] = value;
+ }
+ else
+ {
+ __ret.field[0] = value;
+ __ret.field[1] = symbol;
+ }
+ __ret.field[2] = sign;
+ __ret.field[3] = none;
+ }
+ break;
+ case 3:
+ // 3 The sign immediately precedes the symbol.
+ if (__space)
+ {
+ // Have space.
+ if (__precedes)
+ {
+ __ret.field[0] = sign;
+ __ret.field[1] = symbol;
+ __ret.field[2] = space;
+ __ret.field[3] = value;
+ }
+ else
+ {
+ __ret.field[0] = value;
+ __ret.field[1] = space;
+ __ret.field[2] = sign;
+ __ret.field[3] = symbol;
+ }
+ }
+ else
+ {
+ // Have none.
+ if (__precedes)
+ {
+ __ret.field[0] = sign;
+ __ret.field[1] = symbol;
+ __ret.field[2] = value;
+ }
+ else
+ {
+ __ret.field[0] = value;
+ __ret.field[1] = sign;
+ __ret.field[2] = symbol;
+ }
+ __ret.field[3] = none;
+ }
+ break;
+ case 4:
+ // 4 The sign immediately follows the symbol.
+ if (__space)
+ {
+ // Have space.
+ if (__precedes)
+ {
+ __ret.field[0] = symbol;
+ __ret.field[1] = sign;
+ __ret.field[2] = space;
+ __ret.field[3] = value;
+ }
+ else
+ {
+ __ret.field[0] = value;
+ __ret.field[1] = space;
+ __ret.field[2] = symbol;
+ __ret.field[3] = sign;
+ }
+ }
+ else
+ {
+ // Have none.
+ if (__precedes)
+ {
+ __ret.field[0] = symbol;
+ __ret.field[1] = sign;
+ __ret.field[2] = value;
+ }
+ else
+ {
+ __ret.field[0] = value;
+ __ret.field[1] = symbol;
+ __ret.field[2] = sign;
+ }
+ __ret.field[3] = none;
+ }
+ break;
+ default:
+ ;
+ }
+ return __ret;
+ }
+
+ template<>
+ void
+ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc)
+ {
+ if (!__cloc)
+ {
+ // "C" locale
+ _M_decimal_point = '.';
+ _M_thousands_sep = ',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+ else
+ {
+ // Named locale.
+ _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
+ _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
+ _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
+ _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
+ _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
+
+ // _Intl == true
+ _M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
+ _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
+ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
+ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
+ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
+ _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
+ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
+ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
+ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
+ if (!__nposn)
+ _M_negative_sign = "()";
+ _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
+ }
+ }
+
+ template<>
+ void
+ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc)
+ {
+ if (!__cloc)
+ {
+ // "C" locale
+ _M_decimal_point = '.';
+ _M_thousands_sep = ',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+ else
+ {
+ // Named locale.
+ _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
+ _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
+ _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
+ _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
+ _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
+
+ // _Intl == false
+ _M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
+ _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
+ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
+ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
+ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
+ _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
+ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
+ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
+ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
+ if (!__nposn)
+ _M_negative_sign = "()";
+ _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
+ }
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ void
+ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc)
+ {
+ if (!__cloc)
+ {
+ // "C" locale
+ _M_decimal_point = L'.';
+ _M_thousands_sep = L',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+ else
+ {
+ // Named locale.
+ _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
+
+ _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
+ _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
+
+ mbstate_t __state;
+ const char* __cs;
+ string __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
+ string __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
+ string __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
+ string::size_type __len = max(__cpossign.size(), __cnegsign.size());
+ __len = max(__len, __ccurr.size()) + 1;
+ wchar_t* __ws = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) * __len));
+
+ // NB: Should swich to __cloc's ctype info first.
+ if (__cpossign.size())
+ {
+ memset(&__state, 0, sizeof(mbstate_t));
+ __cs = __cpossign.c_str();
+ mbsrtowcs(__ws, &__cs, __cpossign.size() + 1, &__state);
+ _M_positive_sign = string_type(__ws);
+ }
+ else
+ _M_positive_sign = string_type();
+
+ if (__cnegsign.size())
+ {
+ memset(&__state, 0, sizeof(mbstate_t));
+ __cs = __cnegsign.c_str();
+ mbsrtowcs(__ws, &__cs, __cnegsign.size() + 1, &__state);
+ _M_negative_sign = string_type(__ws);
+ }
+ else
+ _M_negative_sign = string_type();
+
+ // _Intl == true.
+ if (__ccurr.size())
+ {
+ memset(&__state, 0, sizeof(mbstate_t));
+ __cs = __ccurr.c_str();
+ mbsrtowcs(__ws, &__cs, __ccurr.size() + 1, &__state);
+ _M_curr_symbol = string_type(__ws);
+ }
+ else
+ _M_curr_symbol = string_type();
+
+ _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
+ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
+ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
+ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
+ _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
+ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
+ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
+ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
+ if (!__nposn)
+ _M_negative_sign = L"()";
+ _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
+ }
+ }
+
+ template<>
+ void
+ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc)
+ {
+ if (!__cloc)
+ {
+ // "C" locale
+ _M_decimal_point = L'.';
+ _M_thousands_sep = L',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+ else
+ {
+ // Named locale.
+ _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
+ _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
+ _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
+
+ mbstate_t __state;
+ const char* __cs;
+ string __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
+ string __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
+ string __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
+ string::size_type __len = max(__cpossign.size(), __cnegsign.size());
+ __len = max(__len, __ccurr.size()) + 1;
+ wchar_t* __ws = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) * __len));
+
+ // NB: Should swich to __cloc's ctype info first.
+ if (__cpossign.size())
+ {
+ memset(&__state, 0, sizeof(mbstate_t));
+ __cs = __cpossign.c_str();
+ mbsrtowcs(__ws, &__cs, __cpossign.size() + 1, &__state);
+ _M_positive_sign = string_type(__ws);
+ }
+ else
+ _M_positive_sign = string_type();
+
+ if (__cnegsign.size())
+ {
+ memset(&__state, 0, sizeof(mbstate_t));
+ __cs = __cnegsign.c_str();
+ mbsrtowcs(__ws, &__cs, __cnegsign.size() + 1, &__state);
+ _M_negative_sign = string_type(__ws);
+ }
+ else
+ _M_negative_sign = string_type();
+
+ // _Intl == false.
+ if (__ccurr.size())
+ {
+ memset(&__state, 0, sizeof(mbstate_t));
+ __cs = __ccurr.c_str();
+ mbsrtowcs(__ws, &__cs, __ccurr.size() + 1, &__state);
+ _M_curr_symbol = string_type(__ws);
+ }
+ else
+ _M_curr_symbol = string_type();
+
+ _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
+ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
+ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
+ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
+ _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
+ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
+ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
+ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
+ if (!__nposn)
+ _M_negative_sign = L"()";
+ _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
+ }
+ }
+#endif
+}
--- /dev/null
+// std::numpunct implementation details, GNU version -*- C++ -*-
+
+// Copyright (C) 2001, 2002 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.
+
+//
+// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ template<>
+ void
+ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
+ {
+ if (!__cloc)
+ {
+ // "C" locale
+ _M_decimal_point = '.';
+ _M_thousands_sep = ',';
+ _M_grouping = "";
+ }
+ else
+ {
+ // Named locale.
+ _M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc));
+ _M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc));
+ // Check for NUL, which implies no grouping.
+ if (_M_thousands_sep == '\0')
+ _M_grouping = "";
+ else
+ _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
+ }
+ // NB: There is no way to extact this info from posix locales.
+ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
+ _M_truename = "true";
+ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
+ _M_falsename = "false";
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ void
+ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
+ {
+ if (!__cloc)
+ {
+ // "C" locale
+ _M_decimal_point = L'.';
+ _M_thousands_sep = L',';
+ _M_grouping = "";
+ }
+ else
+ {
+ // Named locale.
+ _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
+ _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
+ if (_M_thousands_sep == L'\0')
+ _M_grouping = "";
+ else
+ _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
+ }
+ // NB: There is no way to extact this info from posix locales.
+ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
+ _M_truename = L"true";
+ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
+ _M_falsename = L"false";
+ }
+#endif
+}
--- /dev/null
+// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
+
+// Copyright (C) 2001, 2002 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.
+
+//
+// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
+// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ template<>
+ void
+ __timepunct<char>::
+ _M_put_helper(char* __s, size_t __maxlen, const char* __format,
+ const tm* __tm) const
+ {
+#if 0
+ // Requires glibc 2.3
+ if (_M_c_locale_timepunct)
+ __strftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
+ else
+ strftime(__s, __maxlen, __format, __tm);
+#else
+ const char* __old = setlocale(LC_ALL, _M_name_timepunct);
+ strftime(__s, __maxlen, __format, __tm);
+ setlocale(LC_ALL, __old);
+#endif
+ }
+
+ template<>
+ void
+ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
+ {
+ if (!__cloc)
+ {
+ // "C" locale
+ _M_date_format = "%m/%d/%y";
+ _M_date_era_format = "%m/%d/%y";
+ _M_time_format = "%H:%M:%S";
+ _M_time_era_format = "%H:%M:%S";
+ _M_date_time_format = "";
+ _M_date_time_era_format = "";
+ _M_am = "AM";
+ _M_pm = "PM";
+ _M_am_pm_format = "";
+
+ // Day names, starting with "C"'s Sunday.
+ _M_day1 = "Sunday";
+ _M_day2 = "Monday";
+ _M_day3 = "Tuesday";
+ _M_day4 = "Wednesday";
+ _M_day5 = "Thursday";
+ _M_day6 = "Friday";
+ _M_day7 = "Saturday";
+
+ // Abbreviated day names, starting with "C"'s Sun.
+ _M_day_a1 = "Sun";
+ _M_day_a2 = "Mon";
+ _M_day_a3 = "Tue";
+ _M_day_a4 = "Wed";
+ _M_day_a5 = "Thu";
+ _M_day_a6 = "Fri";
+ _M_day_a7 = "Sat";
+
+ // Month names, starting with "C"'s January.
+ _M_month01 = "January";
+ _M_month02 = "February";
+ _M_month03 = "March";
+ _M_month04 = "April";
+ _M_month05 = "May";
+ _M_month06 = "June";
+ _M_month07 = "July";
+ _M_month08 = "August";
+ _M_month09 = "September";
+ _M_month10 = "October";
+ _M_month11 = "November";
+ _M_month12 = "December";
+
+ // Abbreviated month names, starting with "C"'s Jan.
+ _M_month_a01 = "Jan";
+ _M_month_a02 = "Feb";
+ _M_month_a03 = "Mar";
+ _M_month_a04 = "Apr";
+ _M_month_a05 = "May";
+ _M_month_a06 = "Jun";
+ _M_month_a07 = "July";
+ _M_month_a08 = "Aug";
+ _M_month_a09 = "Sep";
+ _M_month_a10 = "Oct";
+ _M_month_a11 = "Nov";
+ _M_month_a12 = "Dec";
+ }
+ else
+ {
+ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
+
+ _M_date_format = __nl_langinfo_l(D_FMT, __cloc);
+ _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
+ _M_time_format = __nl_langinfo_l(T_FMT, __cloc);
+ _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
+ _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
+ _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
+ _M_am = __nl_langinfo_l(AM_STR, __cloc);
+ _M_pm = __nl_langinfo_l(PM_STR, __cloc);
+ _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
+
+ // Day names, starting with "C"'s Sunday.
+ _M_day1 = __nl_langinfo_l(DAY_1, __cloc);
+ _M_day2 = __nl_langinfo_l(DAY_2, __cloc);
+ _M_day3 = __nl_langinfo_l(DAY_3, __cloc);
+ _M_day4 = __nl_langinfo_l(DAY_4, __cloc);
+ _M_day5 = __nl_langinfo_l(DAY_5, __cloc);
+ _M_day6 = __nl_langinfo_l(DAY_6, __cloc);
+ _M_day7 = __nl_langinfo_l(DAY_7, __cloc);
+
+ // Abbreviated day names, starting with "C"'s Sun.
+ _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc);
+ _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc);
+ _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc);
+ _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc);
+ _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc);
+ _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc);
+ _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc);
+
+ // Month names, starting with "C"'s January.
+ _M_month01 = __nl_langinfo_l(MON_1, __cloc);
+ _M_month02 = __nl_langinfo_l(MON_2, __cloc);
+ _M_month03 = __nl_langinfo_l(MON_3, __cloc);
+ _M_month04 = __nl_langinfo_l(MON_4, __cloc);
+ _M_month05 = __nl_langinfo_l(MON_5, __cloc);
+ _M_month06 = __nl_langinfo_l(MON_6, __cloc);
+ _M_month07 = __nl_langinfo_l(MON_7, __cloc);
+ _M_month08 = __nl_langinfo_l(MON_8, __cloc);
+ _M_month09 = __nl_langinfo_l(MON_9, __cloc);
+ _M_month10 = __nl_langinfo_l(MON_10, __cloc);
+ _M_month11 = __nl_langinfo_l(MON_11, __cloc);
+ _M_month12 = __nl_langinfo_l(MON_12, __cloc);
+
+ // Abbreviated month names, starting with "C"'s Jan.
+ _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc);
+ _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc);
+ _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc);
+ _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc);
+ _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc);
+ _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc);
+ _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc);
+ _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc);
+ _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc);
+ _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc);
+ _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc);
+ _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc);
+ }
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ void
+ __timepunct<wchar_t>::
+ _M_put_helper(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
+ const tm* __tm) const
+ {
+#if 0
+ // Requires glibc 2.3
+ if (_M_c_locale_timepunct)
+ __wcsftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
+ else
+ wcsftime(__s, __maxlen, __format, __tm);
+#else
+ const char* __old = setlocale(LC_ALL, _M_name_timepunct);
+ wcsftime(__s, __maxlen, __format, __tm);
+ setlocale(LC_ALL, __old);
+#endif
+ }
+
+ template<>
+ void
+ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
+ {
+ if (!__cloc)
+ {
+ // "C" locale
+ _M_date_format = L"%m/%d/%y";
+ _M_date_era_format = L"%m/%d/%y";
+ _M_time_format = L"%H:%M:%S";
+ _M_time_era_format = L"%H:%M:%S";
+ _M_date_time_format = L"";
+ _M_date_time_era_format = L"";
+ _M_am = L"AM";
+ _M_pm = L"PM";
+ _M_am_pm_format = L"";
+
+ // Day names, starting with "C"'s Sunday.
+ _M_day1 = L"Sunday";
+ _M_day2 = L"Monday";
+ _M_day3 = L"Tuesday";
+ _M_day4 = L"Wednesday";
+ _M_day5 = L"Thursday";
+ _M_day6 = L"Friday";
+ _M_day7 = L"Saturday";
+
+ // Abbreviated day names, starting with "C"'s Sun.
+ _M_day_a1 = L"Sun";
+ _M_day_a2 = L"Mon";
+ _M_day_a3 = L"Tue";
+ _M_day_a4 = L"Wed";
+ _M_day_a5 = L"Thu";
+ _M_day_a6 = L"Fri";
+ _M_day_a7 = L"Sat";
+
+ // Month names, starting with "C"'s January.
+ _M_month01 = L"January";
+ _M_month02 = L"February";
+ _M_month03 = L"March";
+ _M_month04 = L"April";
+ _M_month05 = L"May";
+ _M_month06 = L"June";
+ _M_month07 = L"July";
+ _M_month08 = L"August";
+ _M_month09 = L"September";
+ _M_month10 = L"October";
+ _M_month11 = L"November";
+ _M_month12 = L"December";
+
+ // Abbreviated month names, starting with "C"'s Jan.
+ _M_month_a01 = L"Jan";
+ _M_month_a02 = L"Feb";
+ _M_month_a03 = L"Mar";
+ _M_month_a04 = L"Apr";
+ _M_month_a05 = L"May";
+ _M_month_a06 = L"Jun";
+ _M_month_a07 = L"July";
+ _M_month_a08 = L"Aug";
+ _M_month_a09 = L"Sep";
+ _M_month_a10 = L"Oct";
+ _M_month_a11 = L"Nov";
+ _M_month_a12 = L"Dec";
+ }
+ else
+ {
+ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
+
+ _M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
+ _M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
+ _M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
+ _M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
+ _M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
+ _M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
+ _M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
+ _M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
+ _M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
+
+ // Day names, starting with "C"'s Sunday.
+ _M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
+ _M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
+ _M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
+ _M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
+ _M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
+ _M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
+ _M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
+
+ // Abbreviated day names, starting with "C"'s Sun.
+ _M_day_a1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
+ _M_day_a2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
+ _M_day_a3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
+ _M_day_a4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
+ _M_day_a5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
+ _M_day_a6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
+ _M_day_a7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
+
+ // Month names, starting with "C"'s January.
+ _M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
+ _M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
+ _M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
+ _M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
+ _M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
+ _M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
+ _M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
+ _M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
+ _M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
+ _M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
+ _M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
+ _M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
+
+ // Abbreviated month names, starting with "C"'s Jan.
+ _M_month_a01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
+ _M_month_a02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
+ _M_month_a03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
+ _M_month_a04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
+ _M_month_a05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
+ _M_month_a06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
+ _M_month_a07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
+ _M_month_a08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
+ _M_month_a09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
+ _M_month_a10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
+ _M_month_a11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
+ _M_month_a12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
+ }
+ }
+#endif
+}
--- /dev/null
+// Wrapper for underlying C-language localization -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.8 Standard locale categories.
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ void
+ locale::facet::_S_create_c_locale(__c_locale&, const char*)
+ { }
+
+ void
+ locale::facet::_S_destroy_c_locale(__c_locale&)
+ { }
+
+ __c_locale
+ locale::facet::_S_clone_c_locale(__c_locale&)
+ { return __c_locale(); }
+
+ template<>
+ void
+ numpunct<char>::_M_initialize_numpunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = '.';
+ _M_thousands_sep = ',';
+ _M_grouping = "";
+ _M_truename = "true";
+ _M_falsename = "false";
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ void
+ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = L'.';
+ _M_thousands_sep = L',';
+ _M_grouping = "";
+ _M_truename = L"true";
+ _M_falsename = L"false";
+ }
+#endif
+
+ template<>
+ void
+ moneypunct<char>::_M_initialize_moneypunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = '.';
+ _M_thousands_sep = ',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ template<>
+ void
+ moneypunct<wchar_t>::_M_initialize_moneypunct(__c_locale)
+ {
+ // "C" locale
+ _M_decimal_point = L'.';
+ _M_thousands_sep = L',';
+ _M_grouping = "";
+ _M_curr_symbol = string_type();
+ _M_positive_sign = string_type();
+ _M_negative_sign = string_type();
+ _M_frac_digits = 0;
+ _M_pos_format = money_base::_S_default_pattern;
+ _M_neg_format = money_base::_S_default_pattern;
+ }
+#endif
+} // namespace std
+
--- /dev/null
+// Wrapper for underlying C-language localization -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.8 Standard locale categories.
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <clocale>
+#include <langinfo.h> // For codecvt
+#include <iconv.h> // For codecvt using iconv, iconv_t
+#include <nl_types.h> // For messages
+
+namespace std
+{
+ typedef __locale_t __c_locale;
+}
+
+
+
+
+
--- /dev/null
+// Locale support (codecvt) -*- C++ -*-
+
+// Copyright (C) 2000, 2001, 2002 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.
+
+//
+// ISO C++ 14882: 22.2.1.5 Template class codecvt
+//
+
+// Warning: this file is not meant for user inclusion. Use <locale>.
+
+// Written by Benjamin Kosnik <bkoz@cygnus.com>
+
+ // XXX
+ // Define this here to codecvt.cc can have _S_max_size definition.
+#define _GLIBCPP_USE___ENC_TRAITS 1
+
+#if _GLIBCPP_USE_SHADOW_HEADERS
+ using _C_legacy::CODESET;
+#endif
+
+ // Extension to use icov for dealing with character encodings,
+ // including conversions and comparisons between various character
+ // sets. This object encapsulates data that may need to be shared between
+ // char_traits, codecvt and ctype.
+ class __enc_traits
+ {
+ public:
+ // Types:
+ // NB: A conversion descriptor subsumes and enhances the
+ // functionality of a simple state type such as mbstate_t.
+ typedef iconv_t __desc_type;
+
+ protected:
+ // Data Members:
+ // Max size of charset encoding name
+ static const int _S_max_size = 32;
+ // Name of internal character set encoding.
+ char _M_int_enc[_S_max_size];
+ // Name of external character set encoding.
+ char _M_ext_enc[_S_max_size];
+
+ // Conversion descriptor between external encoding to internal encoding.
+ __desc_type _M_in_desc;
+ // Conversion descriptor between internal encoding to external encoding.
+ __desc_type _M_out_desc;
+
+ // Details the byte-order marker for the external encoding, if necessary.
+ int _M_ext_bom;
+
+ // Details the byte-order marker for the internal encoding, if necessary.
+ int _M_int_bom;
+
+ public:
+ explicit __enc_traits()
+ : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
+ {
+ memset(_M_int_enc, 0, _S_max_size);
+ memset(_M_ext_enc, 0, _S_max_size);
+ }
+
+ explicit __enc_traits(const locale& __loc)
+ : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
+ {
+ // __intc_end = whatever we are using internally, which is
+ // UCS4 (linux, solaris)
+ // UCS2 == UNICODE (microsoft, java, aix, whatever...)
+ // XXX Currently don't know how to get this data from target system...
+ strcpy(_M_int_enc, "UCS4");
+
+ // __extc_end = external codeset in current locale
+ // XXX There has got to be a better way to do this.
+ __c_locale __cloc;
+ locale::facet::_S_create_c_locale(__cloc, __loc.name().c_str());
+ strcpy(_M_ext_enc, __nl_langinfo_l(CODESET, __cloc));
+ locale::facet::_S_destroy_c_locale(__cloc);
+ }
+
+ explicit __enc_traits(const char* __int, const char* __ext,
+ int __ibom = 0, int __ebom = 0)
+ : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
+ {
+ strncpy(_M_int_enc, __int, _S_max_size);
+ strncpy(_M_ext_enc, __ext, _S_max_size);
+ }
+
+ // 21.1.2 traits typedefs
+ // p4
+ // typedef STATE_T state_type
+ // requires: state_type shall meet the requirements of
+ // CopyConstructible types (20.1.3)
+ __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0)
+ {
+ strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
+ strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
+ _M_ext_bom = __obj._M_ext_bom;
+ _M_int_bom = __obj._M_int_bom;
+ }
+
+ // Need assignment operator as well.
+ __enc_traits&
+ operator=(const __enc_traits& __obj)
+ {
+ strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
+ strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
+ _M_in_desc = 0;
+ _M_out_desc = 0;
+ _M_ext_bom = __obj._M_ext_bom;
+ _M_int_bom = __obj._M_int_bom;
+ }
+
+ ~__enc_traits()
+ {
+ __desc_type __err = reinterpret_cast<iconv_t>(-1);
+ if (_M_in_desc && _M_in_desc != __err)
+ iconv_close(_M_in_desc);
+ if (_M_out_desc && _M_out_desc != __err)
+ iconv_close(_M_out_desc);
+ }
+
+ void
+ _M_init()
+ {
+ const __desc_type __err = reinterpret_cast<iconv_t>(-1);
+ if (!_M_in_desc)
+ {
+ _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
+ if (_M_in_desc == __err)
+ __throw_runtime_error("creating iconv input descriptor failed.");
+ }
+ if (!_M_out_desc)
+ {
+ _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
+ if (_M_out_desc == __err)
+ __throw_runtime_error("creating iconv output descriptor failed.");
+ }
+ }
+
+ bool
+ _M_good()
+ {
+ const __desc_type __err = reinterpret_cast<iconv_t>(-1);
+ bool __test = _M_in_desc && _M_in_desc != __err;
+ __test &= _M_out_desc && _M_out_desc != __err;
+ return __test;
+ }
+
+ const __desc_type*
+ _M_get_in_descriptor()
+ { return &_M_in_desc; }
+
+ const __desc_type*
+ _M_get_out_descriptor()
+ { return &_M_out_desc; }
+
+ int
+ _M_get_external_bom()
+ { return _M_ext_bom; }
+
+ int
+ _M_get_internal_bom()
+ { return _M_int_bom; }
+
+ const char*
+ _M_get_internal_enc()
+ { return _M_int_enc; }
+
+ const char*
+ _M_get_external_enc()
+ { return _M_ext_enc; }
+ };
+
+ // Partial specialization
+ // This specialization takes advantage of iconv to provide code
+ // conversions between a large number of character encodings.
+ template<typename _InternT, typename _ExternT>
+ class codecvt<_InternT, _ExternT, __enc_traits>
+ : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits>
+ {
+ public:
+ // Types:
+ typedef codecvt_base::result result;
+ typedef _InternT intern_type;
+ typedef _ExternT extern_type;
+ typedef __enc_traits state_type;
+ typedef __enc_traits::__desc_type __desc_type;
+ typedef __enc_traits __enc_type;
+
+ // Data Members:
+ static locale::id id;
+
+ explicit
+ codecvt(size_t __refs = 0)
+ : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
+ { }
+
+ explicit
+ codecvt(__enc_type* __enc, size_t __refs = 0)
+ : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
+ { }
+
+ protected:
+ virtual
+ ~codecvt() { }
+
+ virtual result
+ do_out(state_type& __state, const intern_type* __from,
+ const intern_type* __from_end, const intern_type*& __from_next,
+ extern_type* __to, extern_type* __to_end,
+ extern_type*& __to_next) const;
+
+ virtual result
+ do_unshift(state_type& __state, extern_type* __to,
+ extern_type* __to_end, extern_type*& __to_next) const;
+
+ virtual result
+ do_in(state_type& __state, const extern_type* __from,
+ const extern_type* __from_end, const extern_type*& __from_next,
+ intern_type* __to, intern_type* __to_end,
+ intern_type*& __to_next) const;
+
+ virtual int
+ do_encoding() const throw();
+
+ virtual bool
+ do_always_noconv() const throw();
+
+ virtual int
+ do_length(const state_type&, const extern_type* __from,
+ const extern_type* __end, size_t __max) const;
+
+ virtual int
+ do_max_length() const throw();
+ };
+
+ template<typename _InternT, typename _ExternT>
+ locale::id
+ codecvt<_InternT, _ExternT, __enc_traits>::id;
+
+ // This adaptor works around the signature problems of the second
+ // argument to iconv(): SUSv2 and others use 'const char**', but glibc 2.2
+ // uses 'char**', which matches the POSIX 1003.1-2001 standard.
+ // Using this adaptor, g++ will do the work for us.
+ template<typename _T>
+ inline size_t
+ __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*),
+ iconv_t __cd, char** __inbuf, size_t* __inbytes,
+ char** __outbuf, size_t* __outbytes)
+ { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); }
+
+ template<typename _InternT, typename _ExternT>
+ codecvt_base::result
+ codecvt<_InternT, _ExternT, __enc_traits>::
+ do_out(state_type& __state, const intern_type* __from,
+ const intern_type* __from_end, const intern_type*& __from_next,
+ extern_type* __to, extern_type* __to_end,
+ extern_type*& __to_next) const
+ {
+ result __ret = error;
+ if (__state._M_good())
+ {
+ typedef state_type::__desc_type __desc_type;
+ const __desc_type* __desc = __state._M_get_out_descriptor();
+ const size_t __fmultiple = sizeof(intern_type) / sizeof(char);
+ size_t __fbytes = __fmultiple * (__from_end - __from);
+ const size_t __tmultiple = sizeof(extern_type) / sizeof(char);
+ size_t __tbytes = __tmultiple * (__to_end - __to);
+
+ // Argument list for iconv specifies a byte sequence. Thus,
+ // all to/from arrays must be brutally casted to char*.
+ char* __cto = reinterpret_cast<char*>(__to);
+ char* __cfrom;
+ size_t __conv;
+
+ // Some encodings need a byte order marker as the first item
+ // in the byte stream, to designate endian-ness. The default
+ // value for the byte order marker is NULL, so if this is
+ // the case, it's not necessary and we can just go on our
+ // merry way.
+ int __int_bom = __state._M_get_internal_bom();
+ if (__int_bom)
+ {
+ size_t __size = __from_end - __from;
+ intern_type* __cfixed = static_cast<intern_type*>(__builtin_alloca(sizeof(intern_type) * (__size + 1)));
+ __cfixed[0] = static_cast<intern_type>(__int_bom);
+ char_traits<intern_type>::copy(__cfixed + 1, __from, __size);
+ __cfrom = reinterpret_cast<char*>(__cfixed);
+ __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
+ &__fbytes, &__cto, &__tbytes);
+ }
+ else
+ {
+ intern_type* __cfixed = const_cast<intern_type*>(__from);
+ __cfrom = reinterpret_cast<char*>(__cfixed);
+ __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes,
+ &__cto, &__tbytes);
+ }
+
+ if (__conv != size_t(-1))
+ {
+ __from_next = reinterpret_cast<const intern_type*>(__cfrom);
+ __to_next = reinterpret_cast<extern_type*>(__cto);
+ __ret = ok;
+ }
+ else
+ {
+ if (__fbytes < __fmultiple * (__from_end - __from))
+ {
+ __from_next = reinterpret_cast<const intern_type*>(__cfrom);
+ __to_next = reinterpret_cast<extern_type*>(__cto);
+ __ret = partial;
+ }
+ else
+ __ret = error;
+ }
+ }
+ return __ret;
+ }
+
+ template<typename _InternT, typename _ExternT>
+ codecvt_base::result
+ codecvt<_InternT, _ExternT, __enc_traits>::
+ do_unshift(state_type& __state, extern_type* __to,
+ extern_type* __to_end, extern_type*& __to_next) const
+ {
+ result __ret = error;
+ if (__state._M_good())
+ {
+ typedef state_type::__desc_type __desc_type;
+ const __desc_type* __desc = __state._M_get_in_descriptor();
+ const size_t __tmultiple = sizeof(intern_type) / sizeof(char);
+ size_t __tlen = __tmultiple * (__to_end - __to);
+
+ // Argument list for iconv specifies a byte sequence. Thus,
+ // all to/from arrays must be brutally casted to char*.
+ char* __cto = reinterpret_cast<char*>(__to);
+ size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL,
+ &__cto, &__tlen);
+
+ if (__conv != size_t(-1))
+ {
+ __to_next = reinterpret_cast<extern_type*>(__cto);
+ if (__tlen == __tmultiple * (__to_end - __to))
+ __ret = noconv;
+ else if (__tlen == 0)
+ __ret = ok;
+ else
+ __ret = partial;
+ }
+ else
+ __ret = error;
+ }
+ return __ret;
+ }
+
+ template<typename _InternT, typename _ExternT>
+ codecvt_base::result
+ codecvt<_InternT, _ExternT, __enc_traits>::
+ do_in(state_type& __state, const extern_type* __from,
+ const extern_type* __from_end, const extern_type*& __from_next,
+ intern_type* __to, intern_type* __to_end,
+ intern_type*& __to_next) const
+ {
+ result __ret = error;
+ if (__state._M_good())
+ {
+ typedef state_type::__desc_type __desc_type;
+ const __desc_type* __desc = __state._M_get_in_descriptor();
+ const size_t __fmultiple = sizeof(extern_type) / sizeof(char);
+ size_t __flen = __fmultiple * (__from_end - __from);
+ const size_t __tmultiple = sizeof(intern_type) / sizeof(char);
+ size_t __tlen = __tmultiple * (__to_end - __to);
+
+ // Argument list for iconv specifies a byte sequence. Thus,
+ // all to/from arrays must be brutally casted to char*.
+ char* __cto = reinterpret_cast<char*>(__to);
+ char* __cfrom;
+ size_t __conv;
+
+ // Some encodings need a byte order marker as the first item
+ // in the byte stream, to designate endian-ness. The default
+ // value for the byte order marker is NULL, so if this is
+ // the case, it's not necessary and we can just go on our
+ // merry way.
+ int __ext_bom = __state._M_get_external_bom();
+ if (__ext_bom)
+ {
+ size_t __size = __from_end - __from;
+ extern_type* __cfixed = static_cast<extern_type*>(__builtin_alloca(sizeof(extern_type) * (__size + 1)));
+ __cfixed[0] = static_cast<extern_type>(__ext_bom);
+ char_traits<extern_type>::copy(__cfixed + 1, __from, __size);
+ __cfrom = reinterpret_cast<char*>(__cfixed);
+ __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
+ &__flen, &__cto, &__tlen);
+ }
+ else
+ {
+ extern_type* __cfixed = const_cast<extern_type*>(__from);
+ __cfrom = reinterpret_cast<char*>(__cfixed);
+ __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
+ &__flen, &__cto, &__tlen);
+ }
+
+
+ if (__conv != size_t(-1))
+ {
+ __from_next = reinterpret_cast<const extern_type*>(__cfrom);
+ __to_next = reinterpret_cast<intern_type*>(__cto);
+ __ret = ok;
+ }
+ else
+ {
+ if (__flen < static_cast<size_t>(__from_end - __from))
+ {
+ __from_next = reinterpret_cast<const extern_type*>(__cfrom);
+ __to_next = reinterpret_cast<intern_type*>(__cto);
+ __ret = partial;
+ }
+ else
+ __ret = error;
+ }
+ }
+ return __ret;
+ }
+
+ template<typename _InternT, typename _ExternT>
+ int
+ codecvt<_InternT, _ExternT, __enc_traits>::
+ do_encoding() const throw()
+ {
+ int __ret = 0;
+ if (sizeof(_ExternT) <= sizeof(_InternT))
+ __ret = sizeof(_InternT)/sizeof(_ExternT);
+ return __ret;
+ }
+
+ template<typename _InternT, typename _ExternT>
+ bool
+ codecvt<_InternT, _ExternT, __enc_traits>::
+ do_always_noconv() const throw()
+ { return false; }
+
+ template<typename _InternT, typename _ExternT>
+ int
+ codecvt<_InternT, _ExternT, __enc_traits>::
+ do_length(const state_type&, const extern_type* __from,
+ const extern_type* __end, size_t __max) const
+ { return min(__max, static_cast<size_t>(__end - __from)); }
+
+#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
+// 74. Garbled text for codecvt::do_max_length
+ template<typename _InternT, typename _ExternT>
+ int
+ codecvt<_InternT, _ExternT, __enc_traits>::
+ do_max_length() const throw()
+ { return 1; }
+#endif
--- /dev/null
+// std::messages implementation details, IEEE 1003.1-200x version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+#include <locale>
+
+namespace std
+{
+ // Specializations
+ template<>
+ string
+ messages<char>::do_get(catalog __c, int __setid, int __msgid,
+ const string& __dfault) const
+ {
+ nl_catd __nlc = reinterpret_cast<nl_catd>(__c);
+ return string(catgets(__nlc, __setid, __msgid, __dfault.c_str()));
+ }
+}
--- /dev/null
+// std::messages implementation details, IEEE 1003.1-200x version -*- C++ -*-
+
+// Copyright (C) 2001 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.
+
+//
+// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
+//
+
+// Written by Benjamin Kosnik <bkoz@redhat.com>
+
+ // Non-virtual member functions.
+ template<typename _CharT>
+ typename messages<_CharT>::catalog
+ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
+ const char*) const
+ { return this->do_open(__s, __loc); }
+
+ // Virtual member functions.
+ template<typename _CharT>
+ messages<_CharT>::~messages()
+ { }
+
+ template<typename _CharT>
+ typename messages<_CharT>::catalog
+ messages<_CharT>::do_open(const basic_string<char>& __s,
+ const locale&) const
+ { return reinterpret_cast<catalog>(catopen(__s.c_str(), NL_CAT_LOCALE)); }
+
+ template<typename _CharT>
+ typename messages<_CharT>::string_type
+ messages<_CharT>::do_get(catalog __c, int __setid, int __msgid,
+ const string_type& __dfault) const
+ {
+ nl_catd __nlc = reinterpret_cast<nl_catd>(__c);
+ char* __msg = catgets(__nlc, __setid, __msgid,
+ _M_convert_to_char(__dfault));
+ return _M_convert_from_char(__msg);
+ }
+
+ template<typename _CharT>
+ void
+ messages<_CharT>::do_close(catalog __c) const
+ { catclose(reinterpret_cast<nl_catd>(__c)); }
+
+
+++ /dev/null
-// std::messages implementation details, generic version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- // Specializations
- template<>
- string
- messages<char>::do_get(catalog, int, int, const string& __dfault) const
- { return __dfault; }
-}
+++ /dev/null
-// std::messages implementation details, generic version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
- // Non-virtual member functions.
- template<typename _CharT>
- typename messages<_CharT>::catalog
- messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
- const char*) const
- { return this->do_open(__s, __loc); }
-
- // Virtual member functions.
- template<typename _CharT>
- typename messages<_CharT>::catalog
- messages<_CharT>::do_open(const basic_string<char>&, const locale&) const
- { return 0; }
-
- template<typename _CharT>
- typename messages<_CharT>::string_type
- messages<_CharT>::do_get(catalog, int, int,
- const string_type& __dfault) const
- { return __dfault; }
-
- template<typename _CharT>
- void
- messages<_CharT>::do_close(catalog) const
- { }
+++ /dev/null
-// std::messages implementation details, GNU version -*- C++ -*-
-
-// Copyright (C) 2001, 2002 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.
-
-//
-// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- // Specializations
- template<>
- string
- messages<char>::do_get(catalog, int, int, const string& __dfault) const
- {
-#if 0
- // Requires glibc 2.3
- __c_locale __old = uselocale(_M_c_locale_messages);
- const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
- uselocale(__old);
- return string(__msg);
-#else
- const char* __old = setlocale(LC_ALL, _M_name_messages);
- const char* __msg = gettext(__dfault.c_str());
- setlocale(LC_ALL, __old);
- return string(__msg);
-#endif
- }
-}
+++ /dev/null
-// std::messages implementation details, GNU version -*- C++ -*-
-
-// Copyright (C) 2001, 2002 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.
-
-//
-// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
- // Non-virtual member functions.
- template<typename _CharT>
- typename messages<_CharT>::catalog
- messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
- const char* __dir) const
- {
- bindtextdomain(__s.c_str(), __dir);
- return this->do_open(__s, __loc);
- }
-
- template<typename _CharT>
- typename messages<_CharT>::catalog
- messages<_CharT>::do_open(const basic_string<char>& __s,
- const locale&) const
- {
- // No error checking is done, assume the catalog exists and can
- // be used.
- textdomain(__s.c_str());
- return 0;
- }
-
- template<typename _CharT>
- typename messages<_CharT>::string_type
- messages<_CharT>::do_get(catalog, int, int,
- const string_type& __dfault) const
- {
-#if 0
- // Requires glibc 2.3
- __c_locale __old = uselocale(_M_c_locale_messages);
- char* __msg = gettext(_M_convert_to_char(__dfault));
- uselocale(__old);
- return _M_convert_from_char(__msg);
-#else
- const char* __old = setlocale(LC_ALL, _M_name_messages);
- char* __msg = gettext(_M_convert_to_char(__dfault));
- setlocale(LC_ALL, __old);
- return _M_convert_from_char(__msg);
-#endif
- }
-
- template<typename _CharT>
- void
- messages<_CharT>::do_close(catalog) const
- { }
-
-
-
-
-
-
-
+++ /dev/null
-// std::messages implementation details, IEEE 1003.1-200x version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- // Specializations
- template<>
- string
- messages<char>::do_get(catalog __c, int __setid, int __msgid,
- const string& __dfault) const
- {
- nl_catd __nlc = reinterpret_cast<nl_catd>(__c);
- return string(catgets(__nlc, __setid, __msgid, __dfault.c_str()));
- }
-}
+++ /dev/null
-// std::messages implementation details, IEEE 1003.1-200x version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
- // Non-virtual member functions.
- template<typename _CharT>
- typename messages<_CharT>::catalog
- messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
- const char*) const
- { return this->do_open(__s, __loc); }
-
- // Virtual member functions.
- template<typename _CharT>
- messages<_CharT>::~messages()
- { }
-
- template<typename _CharT>
- typename messages<_CharT>::catalog
- messages<_CharT>::do_open(const basic_string<char>& __s,
- const locale&) const
- { return reinterpret_cast<catalog>(catopen(__s.c_str(), NL_CAT_LOCALE)); }
-
- template<typename _CharT>
- typename messages<_CharT>::string_type
- messages<_CharT>::do_get(catalog __c, int __setid, int __msgid,
- const string_type& __dfault) const
- {
- nl_catd __nlc = reinterpret_cast<nl_catd>(__c);
- char* __msg = catgets(__nlc, __setid, __msgid,
- _M_convert_to_char(__dfault));
- return _M_convert_from_char(__msg);
- }
-
- template<typename _CharT>
- void
- messages<_CharT>::do_close(catalog __c) const
- { catclose(reinterpret_cast<nl_catd>(__c)); }
-
-
+++ /dev/null
-// std::moneypunct implementation details, generic version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- // Construct and return valid pattern consisting of some combination of:
- // space none symbol sign value
- money_base::pattern
- money_base::_S_construct_pattern(char, char, char)
- { return _S_default_pattern; }
-
- template<>
- void
- moneypunct<char, true>::_M_initialize_moneypunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = '.';
- _M_thousands_sep = ',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
-
- template<>
- void
- moneypunct<char, false>::_M_initialize_moneypunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = '.';
- _M_thousands_sep = ',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- void
- moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = L'.';
- _M_thousands_sep = L',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
-
- template<>
- void
- moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = L'.';
- _M_thousands_sep = L',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
-#endif
-}
+++ /dev/null
-// std::moneypunct implementation details, GNU version -*- C++ -*-
-
-// Copyright (C) 2001 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.
-
-//
-// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- // Construct and return valid pattern consisting of some combination of:
- // space none symbol sign value
- money_base::pattern
- money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
- {
- pattern __ret;
-
- // This insanely complicated routine attempts to construct a valid
- // pattern for use with monyepunct. A couple of invariants:
-
- // if (__precedes) symbol -> value
- // else value -> symbol
-
- // if (__space) space
- // else none
-
- // none == never first
- // space never first or last
-
- // Any elegant implementations of this are welcome.
- switch (__posn)
- {
- case 0:
- case 1:
- // 1 The sign precedes the value and symbol.
- if (__space)
- {
- // Pattern starts with sign.
- if (__precedes)
- {
- __ret.field[1] = symbol;
- __ret.field[2] = space;
- __ret.field[3] = value;
- }
- else
- {
- __ret.field[1] = value;
- __ret.field[2] = space;
- __ret.field[3] = symbol;
- }
- __ret.field[0] = sign;
- }
- else
- {
- // Pattern starts with sign and ends with none.
- if (__precedes)
- {
- __ret.field[1] = symbol;
- __ret.field[2] = value;
- }
- else
- {
- __ret.field[1] = value;
- __ret.field[2] = symbol;
- }
- __ret.field[0] = sign;
- __ret.field[3] = none;
- }
- break;
- case 2:
- // 2 The sign follows the value and symbol.
- if (__space)
- {
- // Pattern either ends with sign.
- if (__precedes)
- {
- __ret.field[0] = symbol;
- __ret.field[1] = space;
- __ret.field[2] = value;
- }
- else
- {
- __ret.field[0] = value;
- __ret.field[1] = space;
- __ret.field[2] = symbol;
- }
- __ret.field[3] = sign;
- }
- else
- {
- // Pattern ends with sign then none.
- if (__precedes)
- {
- __ret.field[0] = symbol;
- __ret.field[1] = value;
- }
- else
- {
- __ret.field[0] = value;
- __ret.field[1] = symbol;
- }
- __ret.field[2] = sign;
- __ret.field[3] = none;
- }
- break;
- case 3:
- // 3 The sign immediately precedes the symbol.
- if (__space)
- {
- // Have space.
- if (__precedes)
- {
- __ret.field[0] = sign;
- __ret.field[1] = symbol;
- __ret.field[2] = space;
- __ret.field[3] = value;
- }
- else
- {
- __ret.field[0] = value;
- __ret.field[1] = space;
- __ret.field[2] = sign;
- __ret.field[3] = symbol;
- }
- }
- else
- {
- // Have none.
- if (__precedes)
- {
- __ret.field[0] = sign;
- __ret.field[1] = symbol;
- __ret.field[2] = value;
- }
- else
- {
- __ret.field[0] = value;
- __ret.field[1] = sign;
- __ret.field[2] = symbol;
- }
- __ret.field[3] = none;
- }
- break;
- case 4:
- // 4 The sign immediately follows the symbol.
- if (__space)
- {
- // Have space.
- if (__precedes)
- {
- __ret.field[0] = symbol;
- __ret.field[1] = sign;
- __ret.field[2] = space;
- __ret.field[3] = value;
- }
- else
- {
- __ret.field[0] = value;
- __ret.field[1] = space;
- __ret.field[2] = symbol;
- __ret.field[3] = sign;
- }
- }
- else
- {
- // Have none.
- if (__precedes)
- {
- __ret.field[0] = symbol;
- __ret.field[1] = sign;
- __ret.field[2] = value;
- }
- else
- {
- __ret.field[0] = value;
- __ret.field[1] = symbol;
- __ret.field[2] = sign;
- }
- __ret.field[3] = none;
- }
- break;
- default:
- ;
- }
- return __ret;
- }
-
- template<>
- void
- moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc)
- {
- if (!__cloc)
- {
- // "C" locale
- _M_decimal_point = '.';
- _M_thousands_sep = ',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
- else
- {
- // Named locale.
- _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
- _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
- _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
- _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
- _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
-
- // _Intl == true
- _M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
- _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
- char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
- char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
- char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
- _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
- char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
- char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
- char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
- if (!__nposn)
- _M_negative_sign = "()";
- _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
- }
- }
-
- template<>
- void
- moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc)
- {
- if (!__cloc)
- {
- // "C" locale
- _M_decimal_point = '.';
- _M_thousands_sep = ',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
- else
- {
- // Named locale.
- _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
- _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
- _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
- _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
- _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
-
- // _Intl == false
- _M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
- _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
- char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
- char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
- char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
- _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
- char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
- char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
- char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
- if (!__nposn)
- _M_negative_sign = "()";
- _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
- }
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- void
- moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc)
- {
- if (!__cloc)
- {
- // "C" locale
- _M_decimal_point = L'.';
- _M_thousands_sep = L',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
- else
- {
- // Named locale.
- _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
-
- _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
- _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
-
- mbstate_t __state;
- const char* __cs;
- string __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
- string __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
- string __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
- string::size_type __len = max(__cpossign.size(), __cnegsign.size());
- __len = max(__len, __ccurr.size()) + 1;
- wchar_t* __ws = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) * __len));
-
- // NB: Should swich to __cloc's ctype info first.
- if (__cpossign.size())
- {
- memset(&__state, 0, sizeof(mbstate_t));
- __cs = __cpossign.c_str();
- mbsrtowcs(__ws, &__cs, __cpossign.size() + 1, &__state);
- _M_positive_sign = string_type(__ws);
- }
- else
- _M_positive_sign = string_type();
-
- if (__cnegsign.size())
- {
- memset(&__state, 0, sizeof(mbstate_t));
- __cs = __cnegsign.c_str();
- mbsrtowcs(__ws, &__cs, __cnegsign.size() + 1, &__state);
- _M_negative_sign = string_type(__ws);
- }
- else
- _M_negative_sign = string_type();
-
- // _Intl == true.
- if (__ccurr.size())
- {
- memset(&__state, 0, sizeof(mbstate_t));
- __cs = __ccurr.c_str();
- mbsrtowcs(__ws, &__cs, __ccurr.size() + 1, &__state);
- _M_curr_symbol = string_type(__ws);
- }
- else
- _M_curr_symbol = string_type();
-
- _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
- char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
- char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
- char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
- _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
- char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
- char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
- char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
- if (!__nposn)
- _M_negative_sign = L"()";
- _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
- }
- }
-
- template<>
- void
- moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc)
- {
- if (!__cloc)
- {
- // "C" locale
- _M_decimal_point = L'.';
- _M_thousands_sep = L',';
- _M_grouping = "";
- _M_curr_symbol = string_type();
- _M_positive_sign = string_type();
- _M_negative_sign = string_type();
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
- }
- else
- {
- // Named locale.
- _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
- _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
- _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
-
- mbstate_t __state;
- const char* __cs;
- string __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
- string __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
- string __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
- string::size_type __len = max(__cpossign.size(), __cnegsign.size());
- __len = max(__len, __ccurr.size()) + 1;
- wchar_t* __ws = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t) * __len));
-
- // NB: Should swich to __cloc's ctype info first.
- if (__cpossign.size())
- {
- memset(&__state, 0, sizeof(mbstate_t));
- __cs = __cpossign.c_str();
- mbsrtowcs(__ws, &__cs, __cpossign.size() + 1, &__state);
- _M_positive_sign = string_type(__ws);
- }
- else
- _M_positive_sign = string_type();
-
- if (__cnegsign.size())
- {
- memset(&__state, 0, sizeof(mbstate_t));
- __cs = __cnegsign.c_str();
- mbsrtowcs(__ws, &__cs, __cnegsign.size() + 1, &__state);
- _M_negative_sign = string_type(__ws);
- }
- else
- _M_negative_sign = string_type();
-
- // _Intl == false.
- if (__ccurr.size())
- {
- memset(&__state, 0, sizeof(mbstate_t));
- __cs = __ccurr.c_str();
- mbsrtowcs(__ws, &__cs, __ccurr.size() + 1, &__state);
- _M_curr_symbol = string_type(__ws);
- }
- else
- _M_curr_symbol = string_type();
-
- _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
- char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
- char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
- char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
- _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
- char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
- char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
- char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
- if (!__nposn)
- _M_negative_sign = L"()";
- _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
- }
- }
-#endif
-}
+++ /dev/null
-// std::numpunct implementation details, generic version -*- C++ -*-
-
-// Copyright (C) 2001, 2002 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.
-
-//
-// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- template<>
- void
- numpunct<char>::_M_initialize_numpunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = '.';
- _M_thousands_sep = ',';
- _M_grouping = "";
- _M_truename = "true";
- _M_falsename = "false";
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- void
- numpunct<wchar_t>::_M_initialize_numpunct(__c_locale)
- {
- // "C" locale
- _M_decimal_point = L'.';
- _M_thousands_sep = L',';
- _M_grouping = "";
- _M_truename = L"true";
- _M_falsename = L"false";
- }
-#endif
-}
+++ /dev/null
-// std::numpunct implementation details, GNU version -*- C++ -*-
-
-// Copyright (C) 2001, 2002 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.
-
-//
-// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- template<>
- void
- numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
- {
- if (!__cloc)
- {
- // "C" locale
- _M_decimal_point = '.';
- _M_thousands_sep = ',';
- _M_grouping = "";
- }
- else
- {
- // Named locale.
- _M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc));
- _M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc));
- // Check for NUL, which implies no grouping.
- if (_M_thousands_sep == '\0')
- _M_grouping = "";
- else
- _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
- }
- // NB: There is no way to extact this info from posix locales.
- // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
- _M_truename = "true";
- // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
- _M_falsename = "false";
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- void
- numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
- {
- if (!__cloc)
- {
- // "C" locale
- _M_decimal_point = L'.';
- _M_thousands_sep = L',';
- _M_grouping = "";
- }
- else
- {
- // Named locale.
- _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
- _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
- if (_M_thousands_sep == L'\0')
- _M_grouping = "";
- else
- _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
- }
- // NB: There is no way to extact this info from posix locales.
- // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
- _M_truename = L"true";
- // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
- _M_falsename = L"false";
- }
-#endif
-}
+++ /dev/null
-// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
-
-// Copyright (C) 2001, 2002 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.
-
-//
-// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
-// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- template<>
- void
- __timepunct<char>::
- _M_put_helper(char* __s, size_t __maxlen, const char* __format,
- const tm* __tm) const
- {
- const char* __old = setlocale(LC_ALL, _M_name_timepunct);
- strftime(__s, __maxlen, __format, __tm);
- setlocale(LC_ALL, __old);
- }
-
- template<>
- void
- __timepunct<char>::_M_initialize_timepunct(__c_locale)
- {
- // "C" locale
- _M_date_format = "%m/%d/%Y";
- _M_date_era_format = "%m/%d/%Y";
- _M_time_format = "%H:%M:%S";
- _M_time_era_format = "%H:%M:%S";
- _M_date_time_format = "";
- _M_date_time_era_format = "";
- _M_am = "AM";
- _M_pm = "PM";
- _M_am_pm_format = "";
-
- // Day names, starting with "C"'s Sunday.
- _M_day1 = "Sunday";
- _M_day2 = "Monday";
- _M_day3 = "Tuesday";
- _M_day4 = "Wednesday";
- _M_day5 = "Thursday";
- _M_day6 = "Friday";
- _M_day7 = "Saturday";
-
- // Abbreviated day names, starting with "C"'s Sun.
- _M_day_a1 = "Sun";
- _M_day_a2 = "Mon";
- _M_day_a3 = "Tue";
- _M_day_a4 = "Wed";
- _M_day_a5 = "Thu";
- _M_day_a6 = "Fri";
- _M_day_a7 = "Sat";
-
- // Month names, starting with "C"'s January.
- _M_month01 = "January";
- _M_month02 = "February";
- _M_month03 = "March";
- _M_month04 = "April";
- _M_month05 = "May";
- _M_month06 = "June";
- _M_month07 = "July";
- _M_month08 = "August";
- _M_month09 = "September";
- _M_month10 = "October";
- _M_month11 = "November";
- _M_month12 = "December";
-
- // Abbreviated month names, starting with "C"'s Jan.
- _M_month_a01 = "Jan";
- _M_month_a02 = "Feb";
- _M_month_a03 = "Mar";
- _M_month_a04 = "Apr";
- _M_month_a05 = "May";
- _M_month_a06 = "Jun";
- _M_month_a07 = "July";
- _M_month_a08 = "Aug";
- _M_month_a09 = "Sep";
- _M_month_a10 = "Oct";
- _M_month_a11 = "Nov";
- _M_month_a12 = "Dec";
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- void
- __timepunct<wchar_t>::
- _M_put_helper(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
- const tm* __tm) const
- {
- const char* __old = setlocale(LC_ALL, _M_name_timepunct);
- wcsftime(__s, __maxlen, __format, __tm);
- setlocale(LC_ALL, __old);
- }
-
- template<>
- void
- __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale)
- {
- // "C" locale
- _M_date_format = L"%m/%d/%y";
- _M_date_era_format = L"%m/%d/%y";
- _M_time_format = L"%H:%M:%S";
- _M_time_era_format = L"%H:%M:%S";
- _M_date_time_format = L"";
- _M_date_time_era_format = L"";
- _M_am = L"AM";
- _M_pm = L"PM";
- _M_am_pm_format = L"";
-
- // Day names, starting with "C"'s Sunday.
- _M_day1 = L"Sunday";
- _M_day2 = L"Monday";
- _M_day3 = L"Tuesday";
- _M_day4 = L"Wednesday";
- _M_day5 = L"Thursday";
- _M_day6 = L"Friday";
- _M_day7 = L"Saturday";
-
- // Abbreviated day names, starting with "C"'s Sun.
- _M_day_a1 = L"Sun";
- _M_day_a2 = L"Mon";
- _M_day_a3 = L"Tue";
- _M_day_a4 = L"Wed";
- _M_day_a5 = L"Thu";
- _M_day_a6 = L"Fri";
- _M_day_a7 = L"Sat";
-
- // Month names, starting with "C"'s January.
- _M_month01 = L"January";
- _M_month02 = L"February";
- _M_month03 = L"March";
- _M_month04 = L"April";
- _M_month05 = L"May";
- _M_month06 = L"June";
- _M_month07 = L"July";
- _M_month08 = L"August";
- _M_month09 = L"September";
- _M_month10 = L"October";
- _M_month11 = L"November";
- _M_month12 = L"December";
-
- // Abbreviated month names, starting with "C"'s Jan.
- _M_month_a01 = L"Jan";
- _M_month_a02 = L"Feb";
- _M_month_a03 = L"Mar";
- _M_month_a04 = L"Apr";
- _M_month_a05 = L"May";
- _M_month_a06 = L"Jun";
- _M_month_a07 = L"July";
- _M_month_a08 = L"Aug";
- _M_month_a09 = L"Sep";
- _M_month_a10 = L"Oct";
- _M_month_a11 = L"Nov";
- _M_month_a12 = L"Dec";
- }
-#endif
-}
+++ /dev/null
-// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
-
-// Copyright (C) 2001, 2002 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.
-
-//
-// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
-// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
-//
-
-// Written by Benjamin Kosnik <bkoz@redhat.com>
-
-#include <locale>
-
-namespace std
-{
- template<>
- void
- __timepunct<char>::
- _M_put_helper(char* __s, size_t __maxlen, const char* __format,
- const tm* __tm) const
- {
-#if 0
- // Requires glibc 2.3
- if (_M_c_locale_timepunct)
- __strftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
- else
- strftime(__s, __maxlen, __format, __tm);
-#else
- const char* __old = setlocale(LC_ALL, _M_name_timepunct);
- strftime(__s, __maxlen, __format, __tm);
- setlocale(LC_ALL, __old);
-#endif
- }
-
- template<>
- void
- __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
- {
- if (!__cloc)
- {
- // "C" locale
- _M_date_format = "%m/%d/%y";
- _M_date_era_format = "%m/%d/%y";
- _M_time_format = "%H:%M:%S";
- _M_time_era_format = "%H:%M:%S";
- _M_date_time_format = "";
- _M_date_time_era_format = "";
- _M_am = "AM";
- _M_pm = "PM";
- _M_am_pm_format = "";
-
- // Day names, starting with "C"'s Sunday.
- _M_day1 = "Sunday";
- _M_day2 = "Monday";
- _M_day3 = "Tuesday";
- _M_day4 = "Wednesday";
- _M_day5 = "Thursday";
- _M_day6 = "Friday";
- _M_day7 = "Saturday";
-
- // Abbreviated day names, starting with "C"'s Sun.
- _M_day_a1 = "Sun";
- _M_day_a2 = "Mon";
- _M_day_a3 = "Tue";
- _M_day_a4 = "Wed";
- _M_day_a5 = "Thu";
- _M_day_a6 = "Fri";
- _M_day_a7 = "Sat";
-
- // Month names, starting with "C"'s January.
- _M_month01 = "January";
- _M_month02 = "February";
- _M_month03 = "March";
- _M_month04 = "April";
- _M_month05 = "May";
- _M_month06 = "June";
- _M_month07 = "July";
- _M_month08 = "August";
- _M_month09 = "September";
- _M_month10 = "October";
- _M_month11 = "November";
- _M_month12 = "December";
-
- // Abbreviated month names, starting with "C"'s Jan.
- _M_month_a01 = "Jan";
- _M_month_a02 = "Feb";
- _M_month_a03 = "Mar";
- _M_month_a04 = "Apr";
- _M_month_a05 = "May";
- _M_month_a06 = "Jun";
- _M_month_a07 = "July";
- _M_month_a08 = "Aug";
- _M_month_a09 = "Sep";
- _M_month_a10 = "Oct";
- _M_month_a11 = "Nov";
- _M_month_a12 = "Dec";
- }
- else
- {
- _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
-
- _M_date_format = __nl_langinfo_l(D_FMT, __cloc);
- _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
- _M_time_format = __nl_langinfo_l(T_FMT, __cloc);
- _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
- _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
- _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
- _M_am = __nl_langinfo_l(AM_STR, __cloc);
- _M_pm = __nl_langinfo_l(PM_STR, __cloc);
- _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
-
- // Day names, starting with "C"'s Sunday.
- _M_day1 = __nl_langinfo_l(DAY_1, __cloc);
- _M_day2 = __nl_langinfo_l(DAY_2, __cloc);
- _M_day3 = __nl_langinfo_l(DAY_3, __cloc);
- _M_day4 = __nl_langinfo_l(DAY_4, __cloc);
- _M_day5 = __nl_langinfo_l(DAY_5, __cloc);
- _M_day6 = __nl_langinfo_l(DAY_6, __cloc);
- _M_day7 = __nl_langinfo_l(DAY_7, __cloc);
-
- // Abbreviated day names, starting with "C"'s Sun.
- _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc);
- _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc);
- _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc);
- _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc);
- _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc);
- _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc);
- _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc);
-
- // Month names, starting with "C"'s January.
- _M_month01 = __nl_langinfo_l(MON_1, __cloc);
- _M_month02 = __nl_langinfo_l(MON_2, __cloc);
- _M_month03 = __nl_langinfo_l(MON_3, __cloc);
- _M_month04 = __nl_langinfo_l(MON_4, __cloc);
- _M_month05 = __nl_langinfo_l(MON_5, __cloc);
- _M_month06 = __nl_langinfo_l(MON_6, __cloc);
- _M_month07 = __nl_langinfo_l(MON_7, __cloc);
- _M_month08 = __nl_langinfo_l(MON_8, __cloc);
- _M_month09 = __nl_langinfo_l(MON_9, __cloc);
- _M_month10 = __nl_langinfo_l(MON_10, __cloc);
- _M_month11 = __nl_langinfo_l(MON_11, __cloc);
- _M_month12 = __nl_langinfo_l(MON_12, __cloc);
-
- // Abbreviated month names, starting with "C"'s Jan.
- _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc);
- _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc);
- _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc);
- _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc);
- _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc);
- _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc);
- _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc);
- _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc);
- _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc);
- _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc);
- _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc);
- _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc);
- }
- }
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- template<>
- void
- __timepunct<wchar_t>::
- _M_put_helper(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
- const tm* __tm) const
- {
-#if 0
- // Requires glibc 2.3
- if (_M_c_locale_timepunct)
- __wcsftime_l(__s, __maxlen, _M_c_locale_timepunct, __format, __tm);
- else
- wcsftime(__s, __maxlen, __format, __tm);
-#else
- const char* __old = setlocale(LC_ALL, _M_name_timepunct);
- wcsftime(__s, __maxlen, __format, __tm);
- setlocale(LC_ALL, __old);
-#endif
- }
-
- template<>
- void
- __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
- {
- if (!__cloc)
- {
- // "C" locale
- _M_date_format = L"%m/%d/%y";
- _M_date_era_format = L"%m/%d/%y";
- _M_time_format = L"%H:%M:%S";
- _M_time_era_format = L"%H:%M:%S";
- _M_date_time_format = L"";
- _M_date_time_era_format = L"";
- _M_am = L"AM";
- _M_pm = L"PM";
- _M_am_pm_format = L"";
-
- // Day names, starting with "C"'s Sunday.
- _M_day1 = L"Sunday";
- _M_day2 = L"Monday";
- _M_day3 = L"Tuesday";
- _M_day4 = L"Wednesday";
- _M_day5 = L"Thursday";
- _M_day6 = L"Friday";
- _M_day7 = L"Saturday";
-
- // Abbreviated day names, starting with "C"'s Sun.
- _M_day_a1 = L"Sun";
- _M_day_a2 = L"Mon";
- _M_day_a3 = L"Tue";
- _M_day_a4 = L"Wed";
- _M_day_a5 = L"Thu";
- _M_day_a6 = L"Fri";
- _M_day_a7 = L"Sat";
-
- // Month names, starting with "C"'s January.
- _M_month01 = L"January";
- _M_month02 = L"February";
- _M_month03 = L"March";
- _M_month04 = L"April";
- _M_month05 = L"May";
- _M_month06 = L"June";
- _M_month07 = L"July";
- _M_month08 = L"August";
- _M_month09 = L"September";
- _M_month10 = L"October";
- _M_month11 = L"November";
- _M_month12 = L"December";
-
- // Abbreviated month names, starting with "C"'s Jan.
- _M_month_a01 = L"Jan";
- _M_month_a02 = L"Feb";
- _M_month_a03 = L"Mar";
- _M_month_a04 = L"Apr";
- _M_month_a05 = L"May";
- _M_month_a06 = L"Jun";
- _M_month_a07 = L"July";
- _M_month_a08 = L"Aug";
- _M_month_a09 = L"Sep";
- _M_month_a10 = L"Oct";
- _M_month_a11 = L"Nov";
- _M_month_a12 = L"Dec";
- }
- else
- {
- _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
-
- _M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
- _M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
- _M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
- _M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
- _M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
- _M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
- _M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
- _M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
- _M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
-
- // Day names, starting with "C"'s Sunday.
- _M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
- _M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
- _M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
- _M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
- _M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
- _M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
- _M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
-
- // Abbreviated day names, starting with "C"'s Sun.
- _M_day_a1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
- _M_day_a2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
- _M_day_a3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
- _M_day_a4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
- _M_day_a5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
- _M_day_a6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
- _M_day_a7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
-
- // Month names, starting with "C"'s January.
- _M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
- _M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
- _M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
- _M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
- _M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
- _M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
- _M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
- _M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
- _M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
- _M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
- _M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
- _M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
-
- // Abbreviated month names, starting with "C"'s Jan.
- _M_month_a01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
- _M_month_a02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
- _M_month_a03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
- _M_month_a04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
- _M_month_a05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
- _M_month_a06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
- _M_month_a07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
- _M_month_a08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
- _M_month_a09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
- _M_month_a10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
- _M_month_a11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
- _M_month_a12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
- }
- }
-#endif
-}
# Don't use gettext.
USE_NLS=no
- CLOCALE_H=config/locale/c_locale_generic.h
- CLOCALE_CC=config/locale/c_locale_generic.cc
- CCODECVT_H=config/locale/codecvt_specializations_generic.h
- CCOLLATE_CC=config/locale/collate_members_generic.cc
- CCTYPE_CC=config/locale/ctype_members_generic.cc
- CMESSAGES_H=config/locale/messages_members_generic.h
- CMESSAGES_CC=config/locale/messages_members_generic.cc
- CMONEY_CC=config/locale/moneypunct_members_generic.cc
- CNUMERIC_CC=config/locale/numpunct_members_generic.cc
- CTIME_CC=config/locale/time_members_generic.cc
+ CLOCALE_H=config/locale/generic/c_locale.h
+ CLOCALE_CC=config/locale/generic/c_locale.cc
+ CCODECVT_H=config/locale/generic/codecvt_specializations.h
+ CCOLLATE_CC=config/locale/generic/collate_members.cc
+ CCTYPE_CC=config/locale/generic/ctype_members.cc
+ CMESSAGES_H=config/locale/generic/messages_members.h
+ CMESSAGES_CC=config/locale/generic/messages_members.cc
+ CMONEY_CC=config/locale/generic/monetary_members.cc
+ CNUMERIC_CC=config/locale/generic/numeric_members.cc
+ CTIME_CC=config/locale/generic/time_members.cc
;;
xgnu)
echo "$ac_t""gnu" 1>&6
- CLOCALE_H=config/locale/c_locale_gnu.h
- CLOCALE_CC=config/locale/c_locale_gnu.cc
- CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h
- CCOLLATE_CC=config/locale/collate_members_gnu.cc
- CCTYPE_CC=config/locale/ctype_members_gnu.cc
- CMESSAGES_H=config/locale/messages_members_gnu.h
- CMESSAGES_CC=config/locale/messages_members_gnu.cc
- CMONEY_CC=config/locale/moneypunct_members_gnu.cc
- CNUMERIC_CC=config/locale/numpunct_members_gnu.cc
- CTIME_CC=config/locale/time_members_gnu.cc
+ CLOCALE_H=config/locale/gnu/c_locale.h
+ CLOCALE_CC=config/locale/gnu/c_locale.cc
+ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
+ CCOLLATE_CC=config/locale/gnu/collate_members.cc
+ CCTYPE_CC=config/locale/gnu/ctype_members.cc
+ CMESSAGES_H=config/locale/gnu/messages_members.h
+ CMESSAGES_CC=config/locale/gnu/messages_members.cc
+ CMONEY_CC=config/locale/gnu/monetary_members.cc
+ CNUMERIC_CC=config/locale/gnu/numeric_members.cc
+ CTIME_CC=config/locale/gnu/time_members.cc
;;
xieee_1003.1)
echo "$ac_t""generic" 1>&6
# Don't use gettext.
USE_NLS=no
- CLOCALE_H=config/locale/c_locale_ieee_1003.1-200x.h
- CLOCALE_CC=config/locale/c_locale_ieee_1003.1-200x.cc
- CCODECVT_H=config/locale/codecvt_specializations_ieee_1003.1-200x.h
- CCOLLATE_CC=config/locale/collate_members_generic.cc
- CCTYPE_CC=config/locale/ctype_members_generic.cc
- CMESSAGES_H=config/locale/messages_members_ieee_1003.1-200x.h
- CMESSAGES_CC=config/locale/messages_members_ieee_1003.1-200x.cc
- CMONEY_CC=config/locale/moneypunct_members_generic.cc
- CNUMERIC_CC=config/locale/numpunct_members_generic.cc
- CTIME_CC=config/locale/time_members_generic.cc
+ CLOCALE_H=config/locale/ieee_1003.1-2001/c_locale.h
+ CLOCALE_CC=config/locale/ieee_1003.1-2001/c_locale.cc
+ CCODECVT_H=config/locale/ieee_1003.1-2001/codecvt_specializations.h
+ CCOLLATE_CC=config/locale/generic/collate_members.cc
+ CCTYPE_CC=config/locale/generic/ctype_members.cc
+ CMESSAGES_H=config/locale/ieee_1003.1-2001/messages_members.h
+ CMESSAGES_CC=config/locale/ieee_1003.1-2001/messages_members.cc
+ CMONEY_CC=config/locale/generic/monetary_members.cc
+ CNUMERIC_CC=config/locale/generic/numeric_members.cc
+ CTIME_CC=config/locale/generic/time_members.cc
;;
*)
echo "$enable_clocale is an unknown locale package" 1>&2
echo 'FOO { global: f[a-z]o; local: *; };' > conftest.map
cat > conftest.$ac_ext <<EOF
-#line 19344 "configure"
+#line 19366 "configure"
#include "confdefs.h"
int foo;
int main() {
; return 0; }
EOF
-if { (eval echo configure:19351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
enable_symvers=gnu
else
GLIBCPP_BUILD_VERSIONED_SHLIB_FALSE=
fi
echo $ac_n "checking versioning on shared library symbols""... $ac_c" 1>&6
-echo "configure:19383: checking versioning on shared library symbols" >&5
+echo "configure:19415: checking versioning on shared library symbols" >&5
echo "$ac_t""$enable_symvers" 1>&6
glibcpp_prefixdir=${prefix}
echo $ac_n "checking for interface version number""... $ac_c" 1>&6
-echo "configure:19473: checking for interface version number" >&5
+echo "configure:19505: checking for interface version number" >&5
libstdcxx_interface=$INTERFACE
echo "$ac_t""$libstdcxx_interface" 1>&6
# Process the option --with-gxx-include-dir=<path to include-files directory>
echo $ac_n "checking for --with-gxx-include-dir""... $ac_c" 1>&6
-echo "configure:19479: checking for --with-gxx-include-dir" >&5
+echo "configure:19511: checking for --with-gxx-include-dir" >&5
# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
if test "${with_gxx_include_dir+set}" = set; then
withval="$with_gxx_include_dir"
# Process the option "--enable-version-specific-runtime-libs"
echo $ac_n "checking for --enable-version-specific-runtime-libs""... $ac_c" 1>&6
-echo "configure:19503: checking for --enable-version-specific-runtime-libs" >&5
+echo "configure:19535: checking for --enable-version-specific-runtime-libs" >&5
# Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given.
if test "${enable_version_specific_runtime_libs+set}" = set; then
enableval="$enable_version_specific_runtime_libs"
fi
echo $ac_n "checking for install location""... $ac_c" 1>&6
-echo "configure:19550: checking for install location" >&5
+echo "configure:19582: checking for install location" >&5
echo "$ac_t""$gxx_include_dir" 1>&6
cat >> $CONFIG_STATUS <<EOF
ac_sources="$BASIC_FILE_CC $CLOCALE_CC $CCOLLATE_CC $CCTYPE_CC $CMESSAGES_CC $CMONEY_CC $CNUMERIC_CC $CTIME_CC $LINKER_MAP"
-ac_dests="src/basic_file.cc src/c++locale.cc src/collate.cc src/ctype.cc src/messages.cc src/moneypunct.cc src/numpunct.cc src/time.cc src/linker.map"
+ac_dests="src/basic_file.cc src/c++locale.cc src/collate.cc src/ctype.cc src/messages.cc src/monetary.cc src/numeric.cc src/time.cc src/linker.map"
EOF
cat >> $CONFIG_STATUS <<\EOF
<dt><code>--enable-clocale=MODEL </code>
<dd><p>Select a target-specific underlying locale package. The
- choices are 'ieee_1003.1' to specify an X/Open, Standard Unix
- (IEEE Std. 1003.1-200x) model based on langinfo/iconv/catgets,
+ choices are 'ieee_1003.1-2001' to specify an X/Open, Standard Unix
+ (IEEE Std. 1003.1-2001) model based on langinfo/iconv/catgets,
'gnu' to specify a model based on functionality from the GNU C
library (langinfo/iconv/gettext) (from <A
href="http://sources.redhat.com/glibc/">glibc</a>, the GNU C
ATOMICITY_INC_SRCDIR = @ATOMICITY_INC_SRCDIR@
AWK = @AWK@
BASIC_FILE_H = @BASIC_FILE_H@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
GCJ = @GCJ@
GCJFLAGS = @GCJFLAGS@
GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
GLIBCPP_INCLUDES = @GLIBCPP_INCLUDES@
GLIBCPP_IS_CROSS_COMPILING = @GLIBCPP_IS_CROSS_COMPILING@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
-GT_NO = @GT_NO@
-GT_YES = @GT_YES@
-INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
INSTOBJEXT = @INSTOBJEXT@
-INTLDEPS = @INTLDEPS@
+INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LIBICONV = @LIBICONV@
LIBIO_INCLUDES = @LIBIO_INCLUDES@
LIBMATHOBJS = @LIBMATHOBJS@
LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
glibcpp_toolexecdir = @glibcpp_toolexecdir@
glibcpp_toolexeclibdir = @glibcpp_toolexeclibdir@
ifGNUmake = @ifGNUmake@
-l = @l@
libio_la = @libio_la@
libtool_VERSION = @libtool_VERSION@
release_VERSION = @release_VERSION@
bits_srcdir = ${glibcpp_srcdir}/include/bits
bits_builddir = ./bits
-bits_headers = ${bits_srcdir}/basic_ios.h ${bits_srcdir}/basic_ios.tcc ${bits_srcdir}/basic_string.h ${bits_srcdir}/basic_string.tcc ${bits_srcdir}/boost_concept_check.h ${bits_srcdir}/char_traits.h ${bits_srcdir}/codecvt.h ${bits_srcdir}/concept_check.h ${bits_srcdir}/cpp_type_traits.h ${bits_srcdir}/fpos.h ${bits_srcdir}/fstream.tcc ${bits_srcdir}/functexcept.h ${bits_srcdir}/generic_shadow.h ${bits_srcdir}/gslice.h ${bits_srcdir}/gslice_array.h ${bits_srcdir}/indirect_array.h ${bits_srcdir}/ios_base.h ${bits_srcdir}/istream.tcc ${bits_srcdir}/locale_facets.h ${bits_srcdir}/locale_facets.tcc ${bits_srcdir}/localefwd.h ${bits_srcdir}/mask_array.h ${bits_srcdir}/ostream.tcc ${bits_srcdir}/pthread_allocimpl.h ${bits_srcdir}/stream_iterator.h ${bits_srcdir}/streambuf_iterator.h ${bits_srcdir}/slice.h ${bits_srcdir}/slice_array.h ${bits_srcdir}/sstream.tcc ${bits_srcdir}/stl_algo.h ${bits_srcdir}/stl_algobase.h ${bits_srcdir}/stl_alloc.h ${bits_srcdir}/stl_bvector.h ${bits_srcdir}/stl_construct.h ${bits_srcdir}/stl_deque.h ${bits_srcdir}/stl_function.h ${bits_srcdir}/stl_heap.h ${bits_srcdir}/stl_iterator.h ${bits_srcdir}/stl_iterator_base_funcs.h ${bits_srcdir}/stl_iterator_base_types.h ${bits_srcdir}/stl_list.h ${bits_srcdir}/stl_map.h ${bits_srcdir}/stl_multimap.h ${bits_srcdir}/stl_multiset.h ${bits_srcdir}/stl_numeric.h ${bits_srcdir}/stl_pair.h ${bits_srcdir}/stl_pthread_alloc.h ${bits_srcdir}/stl_queue.h ${bits_srcdir}/stl_raw_storage_iter.h ${bits_srcdir}/stl_relops.h ${bits_srcdir}/stl_set.h ${bits_srcdir}/stl_stack.h ${bits_srcdir}/stl_tempbuf.h ${bits_srcdir}/stl_threads.h ${bits_srcdir}/stl_tree.h ${bits_srcdir}/stl_uninitialized.h ${bits_srcdir}/stl_vector.h ${bits_srcdir}/streambuf.tcc ${bits_srcdir}/stringfwd.h ${bits_srcdir}/type_traits.h ${bits_srcdir}/valarray_array.h ${bits_srcdir}/valarray_array.tcc ${bits_srcdir}/valarray_meta.h
+bits_headers = \
+ ${bits_srcdir}/basic_ios.h \
+ ${bits_srcdir}/basic_ios.tcc \
+ ${bits_srcdir}/basic_string.h \
+ ${bits_srcdir}/basic_string.tcc \
+ ${bits_srcdir}/boost_concept_check.h \
+ ${bits_srcdir}/char_traits.h \
+ ${bits_srcdir}/codecvt.h \
+ ${bits_srcdir}/concept_check.h \
+ ${bits_srcdir}/cpp_type_traits.h \
+ ${bits_srcdir}/fpos.h \
+ ${bits_srcdir}/fstream.tcc \
+ ${bits_srcdir}/functexcept.h \
+ ${bits_srcdir}/generic_shadow.h \
+ ${bits_srcdir}/gslice.h \
+ ${bits_srcdir}/gslice_array.h \
+ ${bits_srcdir}/indirect_array.h \
+ ${bits_srcdir}/ios_base.h \
+ ${bits_srcdir}/istream.tcc \
+ ${bits_srcdir}/locale_facets.h \
+ ${bits_srcdir}/locale_facets.tcc \
+ ${bits_srcdir}/localefwd.h \
+ ${bits_srcdir}/mask_array.h \
+ ${bits_srcdir}/ostream.tcc \
+ ${bits_srcdir}/pthread_allocimpl.h \
+ ${bits_srcdir}/stream_iterator.h \
+ ${bits_srcdir}/streambuf_iterator.h \
+ ${bits_srcdir}/slice.h \
+ ${bits_srcdir}/slice_array.h \
+ ${bits_srcdir}/sstream.tcc \
+ ${bits_srcdir}/stl_algo.h \
+ ${bits_srcdir}/stl_algobase.h \
+ ${bits_srcdir}/stl_alloc.h \
+ ${bits_srcdir}/stl_bvector.h \
+ ${bits_srcdir}/stl_construct.h \
+ ${bits_srcdir}/stl_deque.h \
+ ${bits_srcdir}/stl_function.h \
+ ${bits_srcdir}/stl_heap.h \
+ ${bits_srcdir}/stl_iterator.h \
+ ${bits_srcdir}/stl_iterator_base_funcs.h \
+ ${bits_srcdir}/stl_iterator_base_types.h \
+ ${bits_srcdir}/stl_list.h \
+ ${bits_srcdir}/stl_map.h \
+ ${bits_srcdir}/stl_multimap.h \
+ ${bits_srcdir}/stl_multiset.h \
+ ${bits_srcdir}/stl_numeric.h \
+ ${bits_srcdir}/stl_pair.h \
+ ${bits_srcdir}/stl_pthread_alloc.h \
+ ${bits_srcdir}/stl_queue.h \
+ ${bits_srcdir}/stl_raw_storage_iter.h \
+ ${bits_srcdir}/stl_relops.h \
+ ${bits_srcdir}/stl_set.h \
+ ${bits_srcdir}/stl_stack.h \
+ ${bits_srcdir}/stl_tempbuf.h \
+ ${bits_srcdir}/stl_threads.h \
+ ${bits_srcdir}/stl_tree.h \
+ ${bits_srcdir}/stl_uninitialized.h \
+ ${bits_srcdir}/stl_vector.h \
+ ${bits_srcdir}/streambuf.tcc \
+ ${bits_srcdir}/stringfwd.h \
+ ${bits_srcdir}/type_traits.h \
+ ${bits_srcdir}/valarray_array.h \
+ ${bits_srcdir}/valarray_array.tcc \
+ ${bits_srcdir}/valarray_meta.h
backward_srcdir = ${glibcpp_srcdir}/include/backward
backward_builddir = ./backward
-backward_headers = ${backward_srcdir}/complex.h ${backward_srcdir}/iomanip.h ${backward_srcdir}/istream.h ${backward_srcdir}/ostream.h ${backward_srcdir}/stream.h ${backward_srcdir}/streambuf.h ${backward_srcdir}/algo.h ${backward_srcdir}/algobase.h ${backward_srcdir}/alloc.h ${backward_srcdir}/bvector.h ${backward_srcdir}/defalloc.h ${backward_srcdir}/deque.h ${backward_srcdir}/function.h ${backward_srcdir}/hash_map.h ${backward_srcdir}/hash_set.h ${backward_srcdir}/hashtable.h ${backward_srcdir}/heap.h ${backward_srcdir}/iostream.h ${backward_srcdir}/iterator.h ${backward_srcdir}/list.h ${backward_srcdir}/map.h ${backward_srcdir}/multimap.h ${backward_srcdir}/new.h ${backward_srcdir}/multiset.h ${backward_srcdir}/pair.h ${backward_srcdir}/queue.h ${backward_srcdir}/rope.h ${backward_srcdir}/set.h ${backward_srcdir}/slist.h ${backward_srcdir}/stack.h ${backward_srcdir}/tempbuf.h ${backward_srcdir}/tree.h ${backward_srcdir}/vector.h ${backward_srcdir}/fstream.h ${backward_srcdir}/strstream.h ${backward_srcdir}/strstream ${backward_srcdir}/backward_warning.h
+backward_headers = \
+ ${backward_srcdir}/complex.h \
+ ${backward_srcdir}/iomanip.h \
+ ${backward_srcdir}/istream.h \
+ ${backward_srcdir}/ostream.h \
+ ${backward_srcdir}/stream.h \
+ ${backward_srcdir}/streambuf.h \
+ ${backward_srcdir}/algo.h \
+ ${backward_srcdir}/algobase.h \
+ ${backward_srcdir}/alloc.h \
+ ${backward_srcdir}/bvector.h \
+ ${backward_srcdir}/defalloc.h \
+ ${backward_srcdir}/deque.h \
+ ${backward_srcdir}/function.h \
+ ${backward_srcdir}/hash_map.h \
+ ${backward_srcdir}/hash_set.h \
+ ${backward_srcdir}/hashtable.h \
+ ${backward_srcdir}/heap.h \
+ ${backward_srcdir}/iostream.h \
+ ${backward_srcdir}/iterator.h \
+ ${backward_srcdir}/list.h \
+ ${backward_srcdir}/map.h \
+ ${backward_srcdir}/multimap.h \
+ ${backward_srcdir}/new.h \
+ ${backward_srcdir}/multiset.h \
+ ${backward_srcdir}/pair.h \
+ ${backward_srcdir}/queue.h \
+ ${backward_srcdir}/rope.h \
+ ${backward_srcdir}/set.h \
+ ${backward_srcdir}/slist.h \
+ ${backward_srcdir}/stack.h \
+ ${backward_srcdir}/tempbuf.h \
+ ${backward_srcdir}/tree.h \
+ ${backward_srcdir}/vector.h \
+ ${backward_srcdir}/fstream.h \
+ ${backward_srcdir}/strstream.h \
+ ${backward_srcdir}/strstream \
+ ${backward_srcdir}/backward_warning.h
ext_srcdir = ${glibcpp_srcdir}/include/ext
ext_builddir = ./ext
-ext_headers = ${ext_srcdir}/algorithm ${ext_srcdir}/functional ${ext_srcdir}/hash_map ${ext_srcdir}/hash_set ${ext_srcdir}/iterator ${ext_srcdir}/memory ${ext_srcdir}/numeric ${ext_srcdir}/rb_tree ${ext_srcdir}/rope ${ext_srcdir}/ropeimpl.h ${ext_srcdir}/slist ${ext_srcdir}/stl_hash_fun.h ${ext_srcdir}/stl_hashtable.h ${ext_srcdir}/stl_rope.h
+ext_headers = \
+ ${ext_srcdir}/algorithm \
+ ${ext_srcdir}/functional \
+ ${ext_srcdir}/hash_map \
+ ${ext_srcdir}/hash_set \
+ ${ext_srcdir}/iterator \
+ ${ext_srcdir}/memory \
+ ${ext_srcdir}/numeric \
+ ${ext_srcdir}/rb_tree \
+ ${ext_srcdir}/rope \
+ ${ext_srcdir}/ropeimpl.h \
+ ${ext_srcdir}/slist \
+ ${ext_srcdir}/stl_hash_fun.h \
+ ${ext_srcdir}/stl_hashtable.h \
+ ${ext_srcdir}/stl_rope.h
# This is the common subset of files that all three "C" header models use.
c_base_srcdir = @C_INCLUDE_DIR@
c_base_builddir = .
-c_base_headers = ${c_base_srcdir}/std_cassert.h ${c_base_srcdir}/std_cctype.h ${c_base_srcdir}/std_cerrno.h ${c_base_srcdir}/std_cfloat.h ${c_base_srcdir}/std_ciso646.h ${c_base_srcdir}/std_climits.h ${c_base_srcdir}/std_clocale.h ${c_base_srcdir}/std_cmath.h ${c_base_srcdir}/std_csetjmp.h ${c_base_srcdir}/std_csignal.h ${c_base_srcdir}/std_cstdarg.h ${c_base_srcdir}/std_cstddef.h ${c_base_srcdir}/std_cstdio.h ${c_base_srcdir}/std_cstdlib.h ${c_base_srcdir}/std_cstring.h ${c_base_srcdir}/std_ctime.h ${c_base_srcdir}/std_cwchar.h ${c_base_srcdir}/std_cwctype.h
+c_base_headers = \
+ ${c_base_srcdir}/std_cassert.h \
+ ${c_base_srcdir}/std_cctype.h \
+ ${c_base_srcdir}/std_cerrno.h \
+ ${c_base_srcdir}/std_cfloat.h \
+ ${c_base_srcdir}/std_ciso646.h \
+ ${c_base_srcdir}/std_climits.h \
+ ${c_base_srcdir}/std_clocale.h \
+ ${c_base_srcdir}/std_cmath.h \
+ ${c_base_srcdir}/std_csetjmp.h \
+ ${c_base_srcdir}/std_csignal.h \
+ ${c_base_srcdir}/std_cstdarg.h \
+ ${c_base_srcdir}/std_cstddef.h \
+ ${c_base_srcdir}/std_cstdio.h \
+ ${c_base_srcdir}/std_cstdlib.h \
+ ${c_base_srcdir}/std_cstring.h \
+ ${c_base_srcdir}/std_ctime.h \
+ ${c_base_srcdir}/std_cwchar.h \
+ ${c_base_srcdir}/std_cwctype.h
# Some of the "C" headers need extra files.
-c_base_headers_extra = ${c_base_srcdir}/cmath.tcc
-
-c_base_headers_rename = cassert cctype cerrno cfloat ciso646 climits clocale cmath csetjmp csignal cstdarg cstddef cstdio cstdlib cstring ctime cwchar cwctype
+c_base_headers_extra = \
+ ${c_base_srcdir}/cmath.tcc
+
+c_base_headers_rename = \
+ cassert \
+ cctype \
+ cerrno \
+ cfloat \
+ ciso646 \
+ climits \
+ clocale \
+ cmath \
+ csetjmp \
+ csignal \
+ cstdarg \
+ cstddef \
+ cstdio \
+ cstdlib \
+ cstring \
+ ctime \
+ cwchar \
+ cwctype
std_srcdir = ${glibcpp_srcdir}/include/std
std_builddir = .
-std_headers = ${std_srcdir}/std_algorithm.h ${std_srcdir}/std_bitset.h ${std_srcdir}/std_complex.h ${std_srcdir}/std_deque.h ${std_srcdir}/std_fstream.h ${std_srcdir}/std_functional.h ${std_srcdir}/std_iomanip.h ${std_srcdir}/std_ios.h ${std_srcdir}/std_iosfwd.h ${std_srcdir}/std_iostream.h ${std_srcdir}/std_istream.h ${std_srcdir}/std_iterator.h ${std_srcdir}/std_limits.h ${std_srcdir}/std_list.h ${std_srcdir}/std_locale.h ${std_srcdir}/std_map.h ${std_srcdir}/std_memory.h ${std_srcdir}/std_numeric.h ${std_srcdir}/std_ostream.h ${std_srcdir}/std_queue.h ${std_srcdir}/std_set.h ${std_srcdir}/std_sstream.h ${std_srcdir}/std_stack.h ${std_srcdir}/std_stdexcept.h ${std_srcdir}/std_streambuf.h ${std_srcdir}/std_string.h ${std_srcdir}/std_utility.h ${std_srcdir}/std_valarray.h ${std_srcdir}/std_vector.h
+std_headers = \
+ ${std_srcdir}/std_algorithm.h \
+ ${std_srcdir}/std_bitset.h \
+ ${std_srcdir}/std_complex.h \
+ ${std_srcdir}/std_deque.h \
+ ${std_srcdir}/std_fstream.h \
+ ${std_srcdir}/std_functional.h \
+ ${std_srcdir}/std_iomanip.h \
+ ${std_srcdir}/std_ios.h \
+ ${std_srcdir}/std_iosfwd.h \
+ ${std_srcdir}/std_iostream.h \
+ ${std_srcdir}/std_istream.h \
+ ${std_srcdir}/std_iterator.h \
+ ${std_srcdir}/std_limits.h \
+ ${std_srcdir}/std_list.h \
+ ${std_srcdir}/std_locale.h \
+ ${std_srcdir}/std_map.h \
+ ${std_srcdir}/std_memory.h \
+ ${std_srcdir}/std_numeric.h \
+ ${std_srcdir}/std_ostream.h \
+ ${std_srcdir}/std_queue.h \
+ ${std_srcdir}/std_set.h \
+ ${std_srcdir}/std_sstream.h \
+ ${std_srcdir}/std_stack.h \
+ ${std_srcdir}/std_stdexcept.h \
+ ${std_srcdir}/std_streambuf.h \
+ ${std_srcdir}/std_string.h \
+ ${std_srcdir}/std_utility.h \
+ ${std_srcdir}/std_valarray.h \
+ ${std_srcdir}/std_vector.h
# Renamed at build time.
-std_headers_rename = algorithm bitset complex deque fstream functional iomanip ios iosfwd iostream istream iterator limits list locale map memory numeric ostream queue set sstream stack stdexcept streambuf string utility valarray vector
+std_headers_rename = \
+ algorithm \
+ bitset \
+ complex \
+ deque \
+ fstream \
+ functional \
+ iomanip \
+ ios \
+ iosfwd \
+ iostream \
+ istream \
+ iterator \
+ limits \
+ list \
+ locale \
+ map \
+ memory \
+ numeric \
+ ostream \
+ queue \
+ set \
+ sstream \
+ stack \
+ stdexcept \
+ streambuf \
+ string \
+ utility \
+ valarray \
+ vector
target_srcdir = ${glibcpp_srcdir}/@OS_INC_SRCDIR@
target_builddir = ./${target_alias}/bits
-target_headers = ${target_srcdir}/ctype_base.h ${target_srcdir}/ctype_inline.h ${target_srcdir}/ctype_noninline.h ${target_srcdir}/os_defines.h ${glibcpp_srcdir}/@ATOMICITY_INC_SRCDIR@/atomicity.h ${glibcpp_srcdir}/@CPU_LIMITS_INC_SRCDIR@/cpu_limits.h
+target_headers = \
+ ${target_srcdir}/ctype_base.h \
+ ${target_srcdir}/ctype_inline.h \
+ ${target_srcdir}/ctype_noninline.h \
+ ${target_srcdir}/os_defines.h \
+ ${glibcpp_srcdir}/@ATOMICITY_INC_SRCDIR@/atomicity.h \
+ ${glibcpp_srcdir}/@CPU_LIMITS_INC_SRCDIR@/cpu_limits.h
# These extra_target_headers files are all built with ad hoc naming rules.
-extra_target_headers = ${target_builddir}/basic_file.h ${target_builddir}/c++config.h ${target_builddir}/c++io.h ${target_builddir}/c++locale.h ${target_builddir}/messages_members.h ${target_builddir}/codecvt_specializations.h
+extra_target_headers = \
+ ${target_builddir}/basic_file.h \
+ ${target_builddir}/c++config.h \
+ ${target_builddir}/c++io.h \
+ ${target_builddir}/c++locale.h \
+ ${target_builddir}/messages_members.h \
+ ${target_builddir}/codecvt_specializations.h
-thread_target_headers = ${target_builddir}/gthr.h ${target_builddir}/gthr-single.h ${target_builddir}/gthr-posix.h ${target_builddir}/gthr-default.h
+thread_target_headers = \
+ ${target_builddir}/gthr.h \
+ ${target_builddir}/gthr-single.h \
+ ${target_builddir}/gthr-posix.h \
+ ${target_builddir}/gthr-default.h
# List of all timestamp files. By keeping only one copy of this list, both
# CLEANFILES and all-local are kept up-to-date.
-allstamps = stamp-std stamp-bits stamp-c_base stamp-backward stamp-ext ${target_builddir}/stamp-target
+allstamps = stamp-std stamp-bits stamp-c_base stamp-backward stamp-ext \
+ ${target_builddir}/stamp-target
# Target includes for threads
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = tar
+TAR = gtar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
cmath.cc bitset.cc \
functexcept.cc stdexcept.cc vterminate.cc \
c++locale.cc locale.cc localename.cc codecvt.cc \
- collate.cc ctype.cc messages.cc moneypunct.cc numpunct.cc time.cc \
+ collate.cc ctype.cc messages.cc monetary.cc numeric.cc time.cc \
concept-inst.cc locale-inst.cc misc-inst.cc stl-inst.cc \
string-inst.cc wstring-inst.cc valarray-inst.cc ext-inst.cc
cmath.cc bitset.cc \
functexcept.cc stdexcept.cc vterminate.cc \
c++locale.cc locale.cc localename.cc codecvt.cc \
- collate.cc ctype.cc messages.cc moneypunct.cc numpunct.cc time.cc \
+ collate.cc ctype.cc messages.cc monetary.cc numeric.cc time.cc \
concept-inst.cc locale-inst.cc misc-inst.cc stl-inst.cc \
string-inst.cc wstring-inst.cc valarray-inst.cc ext-inst.cc
libstdc___la_OBJECTS = globals.lo limits.lo basic_file.lo complex_io.lo \
ios.lo strstream.lo cmath.lo bitset.lo functexcept.lo stdexcept.lo \
vterminate.lo c++locale.lo locale.lo localename.lo codecvt.lo \
-collate.lo ctype.lo messages.lo moneypunct.lo numpunct.lo time.lo \
+collate.lo ctype.lo messages.lo monetary.lo numeric.lo time.lo \
concept-inst.lo locale-inst.lo misc-inst.lo stl-inst.lo string-inst.lo \
wstring-inst.lo valarray-inst.lo ext-inst.lo
CXXFLAGS = @CXXFLAGS@