+2000-08-22 Benjamin Kosnik <bkoz@purist.soma.redhat.com>
+
+ * src/locale-inst.cc: Add codecvt<unicode_t, wchar_t,
+ __enc_traits> instantiations for has_facet and use_facet.
+ * testsuite/22_locale/codecvt_unicode_wchar_t.cc: New file, for
+ testing two-byte unicode encodings converted to four-byte UCS4
+ encodings.
+
+ * bits/codecvt.h (codecvt<__enc_traits>): Fix do_unshift.
+ * testsuite/22_locale/codecvt_unicode_char.cc (test01): Add
+ correct state/encoding information.
+
+ * acinclude.m4 (GLIBCPP_CHECK_WCHAR_T_SUPPORT): Add wcsrtombs,
+ mbsrtowcs checks as codecvt<wchar_t, char, mbstate_t> needs them
+ now.
+ Add checks for langinfo.h, nl_langinfo function call.
+ * libio/iofwide.c (_IO_fwide): Simplify, as nl_langinfo is assumed.
+
2000-08-22 Richard B. Kreckel <Richard.Kreckel@Uni-Mainz.DE>
* config/cpu/alpha/bits/atomicity.h: Change __attribute__
-
dnl
dnl Initialize configure bits.
dnl
AC_MSG_RESULT($has_weof)
dnl Tests for wide character functions used in char_traits<wchar_t>.
- AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset, ac_wfuncs=yes, ac_wfuncs=no)
+ AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset \
+ wcsrtombs mbsrtowcs, ac_wfuncs=yes, ac_wfuncs=no)
AC_MSG_CHECKING([for ISO C9X wchar_t support])
- if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes && test x"$ac_wfuncs" = xyes; then
+ if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes \
+ && test x"$ac_wfuncs" = xyes; then
ac_isoC9X_wchar_t=yes
else
ac_isoC9X_wchar_t=no
dnl Use iconv for wchar_t to char conversions. As such, check for
dnl X/Open Portability Guide, version 2 features (XPG2).
AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
- AC_CHECK_FUNCS(iconv_open iconv_close iconv, ac_XPG2funcs=yes, ac_XPG2funcs=no)
+ AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
+ AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
+ ac_XPG2funcs=yes, ac_XPG2funcs=no)
AC_MSG_CHECKING([for XPG2 wchar_t support])
- if test x"$ac_has_iconv_h" = xyes && test x"$ac_XPG2funcs" = xyes; then
+ if test x"$ac_has_iconv_h" = xyes && test x"$ac_has_langinfo_h" = xyes \
+ && test x"$ac_XPG2funcs" = xyes; then
ac_XPG2_wchar_t=yes
else
ac_XPG2_wchar_t=no
dnl At the moment, only enable wchar_t specializations if all the
dnl above support is present.
- dnl 2000-07-07-bkoz-hack-xxx
-# ac_isoC9X_wchar_t=no
- dnl 2000-07-07-bkoz-hack-xxx
-
AC_MSG_CHECKING([for enabled wchar_t specializations])
- if test x"$ac_isoC9X_wchar_t" = xyes && test x"$ac_XPG2_wchar_t" = xyes; then
+ if test x"$ac_isoC9X_wchar_t" = xyes \
+ && test x"$ac_XPG2_wchar_t" = xyes; then
libinst_wstring_la="libinst-wstring.la"
AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
AC_MSG_RESULT("yes")
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
dnl PARTICULAR PURPOSE.
-
dnl
dnl Initialize configure bits.
dnl
AC_MSG_RESULT($has_weof)
dnl Tests for wide character functions used in char_traits<wchar_t>.
- AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset, ac_wfuncs=yes, ac_wfuncs=no)
+ AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset \
+ wcsrtombs mbsrtowcs, ac_wfuncs=yes, ac_wfuncs=no)
AC_MSG_CHECKING([for ISO C9X wchar_t support])
- if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes && test x"$ac_wfuncs" = xyes; then
+ if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes \
+ && test x"$ac_wfuncs" = xyes; then
ac_isoC9X_wchar_t=yes
else
ac_isoC9X_wchar_t=no
dnl Use iconv for wchar_t to char conversions. As such, check for
dnl X/Open Portability Guide, version 2 features (XPG2).
AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
- AC_CHECK_FUNCS(iconv_open iconv_close iconv, ac_XPG2funcs=yes, ac_XPG2funcs=no)
+ AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
+ AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
+ ac_XPG2funcs=yes, ac_XPG2funcs=no)
AC_MSG_CHECKING([for XPG2 wchar_t support])
- if test x"$ac_has_iconv_h" = xyes && test x"$ac_XPG2funcs" = xyes; then
+ if test x"$ac_has_iconv_h" = xyes && test x"$ac_has_langinfo_h" = xyes \
+ && test x"$ac_XPG2funcs" = xyes; then
ac_XPG2_wchar_t=yes
else
ac_XPG2_wchar_t=no
dnl At the moment, only enable wchar_t specializations if all the
dnl above support is present.
- dnl 2000-07-07-bkoz-hack-xxx
-# ac_isoC9X_wchar_t=no
- dnl 2000-07-07-bkoz-hack-xxx
-
AC_MSG_CHECKING([for enabled wchar_t specializations])
- if test x"$ac_isoC9X_wchar_t" = xyes && test x"$ac_XPG2_wchar_t" = xyes; then
+ if test x"$ac_isoC9X_wchar_t" = xyes \
+ && test x"$ac_XPG2_wchar_t" = xyes; then
libinst_wstring_la="libinst-wstring.la"
AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
AC_MSG_RESULT("yes")
if (__conv != size_t(-1))
{
__to_next = reinterpret_cast<extern_type*>(__cto);
- __ret = ok;
+ if (__tlen == __tmultiple * (__to_end - __to))
+ __ret = noconv;
+ else if (__tlen == 0)
+ __ret = ok;
+ else
+ __ret = partial;
}
else
__ret = error;
/* Define if you have the logl function. */
#undef HAVE_LOGL
+/* Define if you have the mbsrtowcs function. */
+#undef HAVE_MBSRTOWCS
+
/* Define if you have the modff function. */
#undef HAVE_MODFF
/* Define if you have the nan function. */
#undef HAVE_NAN
+/* Define if you have the nl_langinfo function. */
+#undef HAVE_NL_LANGINFO
+
/* Define if you have the powf function. */
#undef HAVE_POWF
/* Define if you have the wcslen function. */
#undef HAVE_WCSLEN
+/* Define if you have the wcsrtombs function. */
+#undef HAVE_WCSRTOMBS
+
/* Define if you have the wmemchr function. */
#undef HAVE_WMEMCHR
rm -f conftest*
echo "$ac_t""$has_weof" 1>&6
- for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
+ for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset \
+ wcsrtombs mbsrtowcs
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17508: checking for $ac_func" >&5
+echo "configure:17509: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17513 "configure"
+#line 17514 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:17536: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo $ac_n "checking for ISO C9X wchar_t support""... $ac_c" 1>&6
-echo "configure:17563: checking for ISO C9X wchar_t support" >&5
- if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes && test x"$ac_wfuncs" = xyes; then
+echo "configure:17564: checking for ISO C9X wchar_t support" >&5
+ if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes \
+ && test x"$ac_wfuncs" = xyes; then
ac_isoC9X_wchar_t=yes
else
ac_isoC9X_wchar_t=no
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:17573: checking for iconv.h" >&5
+echo "configure:17575: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17578 "configure"
+#line 17580 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:17583: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:17585: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
ac_has_iconv_h=no
fi
- for ac_func in iconv_open iconv_close iconv
+ ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
+echo "configure:17609: checking for langinfo.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 17614 "configure"
+#include "confdefs.h"
+#include <langinfo.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:17619: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_has_langinfo_h=yes
+else
+ echo "$ac_t""no" 1>&6
+ac_has_langinfo_h=no
+fi
+
+ for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17608: checking for $ac_func" >&5
+echo "configure:17644: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17613 "configure"
+#line 17649 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:17636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
- ac_XPG2funcs=yes
+ \
+ ac_XPG2funcs=yes
else
echo "$ac_t""no" 1>&6
ac_XPG2funcs=no
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:17663: checking for XPG2 wchar_t support" >&5
- if test x"$ac_has_iconv_h" = xyes && test x"$ac_XPG2funcs" = xyes; then
+echo "configure:17700: checking for XPG2 wchar_t support" >&5
+ if test x"$ac_has_iconv_h" = xyes && test x"$ac_has_langinfo_h" = xyes \
+ && test x"$ac_XPG2funcs" = xyes; then
ac_XPG2_wchar_t=yes
else
ac_XPG2_wchar_t=no
fi
echo "$ac_t""$ac_XPG2_wchar_t" 1>&6
- # ac_isoC9X_wchar_t=no
-
- echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:17674: checking for enabled wchar_t specializations" >&5
- if test x"$ac_isoC9X_wchar_t" = xyes && test x"$ac_XPG2_wchar_t" = xyes; then
+ echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
+echo "configure:17710: checking for enabled wchar_t specializations" >&5
+ if test x"$ac_isoC9X_wchar_t" = xyes \
+ && test x"$ac_XPG2_wchar_t" = xyes; then
libinst_wstring_la="libinst-wstring.la"
cat >> confdefs.h <<\EOF
#define _GLIBCPP_USE_WCHAR_T 1
ac_safe=`echo "ctype.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for ctype.h""... $ac_c" 1>&6
-echo "configure:17699: checking for ctype.h" >&5
+echo "configure:17736: checking for ctype.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17704 "configure"
+#line 17741 "configure"
#include "confdefs.h"
#include <ctype.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:17709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:17746: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
ctype_default=yes
echo $ac_n "checking <ctype> for gnu-linux ""... $ac_c" 1>&6
-echo "configure:17730: checking <ctype> for gnu-linux " >&5
+echo "configure:17767: checking <ctype> for gnu-linux " >&5
cat > conftest.$ac_ext <<EOF
-#line 17732 "configure"
+#line 17769 "configure"
#include "confdefs.h"
#include <ctype.h>
int main() {
+ __ctype_tolower[a] + __ctype_toupper[a] + __ctype_b[a];}
; return 0; }
EOF
-if { (eval echo configure:17743: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
\
ctype_linux=yes
if test $ctype_default = "yes"; then
echo $ac_n "checking <ctype> for freebsd 4.0 ""... $ac_c" 1>&6
-echo "configure:17762: checking <ctype> for freebsd 4.0 " >&5
+echo "configure:17799: checking <ctype> for freebsd 4.0 " >&5
cat > conftest.$ac_ext <<EOF
-#line 17764 "configure"
+#line 17801 "configure"
#include "confdefs.h"
#include <ctype.h>
int main() {
+ _CTYPE_D + _CTYPE_P + _CTYPE_X + _CTYPE_G ;}
; return 0; }
EOF
-if { (eval echo configure:17774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17811: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
\
ctype_bsd=yes
if test $ctype_default = "yes"; then
echo $ac_n "checking <ctype> for freebsd 3.4 ""... $ac_c" 1>&6
-echo "configure:17794: checking <ctype> for freebsd 3.4 " >&5
+echo "configure:17831: checking <ctype> for freebsd 3.4 " >&5
cat > conftest.$ac_ext <<EOF
-#line 17796 "configure"
+#line 17833 "configure"
#include "confdefs.h"
#include <ctype.h>
int main() {
+ _D + _P + _X + _G + __istype (a, 0);}
; return 0; }
EOF
-if { (eval echo configure:17806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
\
ctype_freebsd34=yes
if test $ctype_default = "yes"; then
echo $ac_n "checking <ctype> for solaris 2.6,7,8 ""... $ac_c" 1>&6
-echo "configure:17826: checking <ctype> for solaris 2.6,7,8 " >&5
+echo "configure:17863: checking <ctype> for solaris 2.6,7,8 " >&5
cat > conftest.$ac_ext <<EOF
-#line 17828 "configure"
+#line 17865 "configure"
#include "confdefs.h"
#include <ctype.h>
int main() {
+ __trans_lower[a] + __trans_upper[a] + __ctype_mask[a];}
; return 0; }
EOF
-if { (eval echo configure:17839: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17876: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
\
ctype_solaris=yes
if test $ctype_solaris = "yes"; then
echo $ac_n "checking for version""... $ac_c" 1>&6
-echo "configure:17854: checking for version" >&5
+echo "configure:17891: checking for version" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CXXCPP $CPPFLAGS'
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17863 "configure"
+#line 17900 "configure"
#include "confdefs.h"
#include <ctype.h>
int main() {
typedef long* __to_type; __to_type const& _M_toupper = __trans_upper;
; return 0; }
EOF
-if { (eval echo configure:17870: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17907: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
\
ctype_solaris26=yes
if test $ctype_default = "yes"; then
echo $ac_n "checking <ctype> for solaris 2.5.1 ""... $ac_c" 1>&6
-echo "configure:17902: checking <ctype> for solaris 2.5.1 " >&5
+echo "configure:17939: checking <ctype> for solaris 2.5.1 " >&5
cat > conftest.$ac_ext <<EOF
-#line 17904 "configure"
+#line 17941 "configure"
#include "confdefs.h"
#include <ctype.h>
int main() {
+ __ctype[a];}
; return 0; }
EOF
-if { (eval echo configure:17914: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17951: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
\
ctype_solaris25=yes
if test $ctype_default = "yes"; then
echo $ac_n "checking <ctype> for aix ""... $ac_c" 1>&6
-echo "configure:17934: checking <ctype> for aix " >&5
+echo "configure:17971: checking <ctype> for aix " >&5
cat > conftest.$ac_ext <<EOF
-#line 17936 "configure"
+#line 17973 "configure"
#include "confdefs.h"
#include <ctype.h>
int main() {
+ _VALC('a') + _IS('c', 0);}
; return 0; }
EOF
-if { (eval echo configure:17947: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17984: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
\
ctype_aix=yes
if test $ctype_default = "yes"; then
echo $ac_n "checking <ctype> for newlib ""... $ac_c" 1>&6
-echo "configure:17967: checking <ctype> for newlib " >&5
+echo "configure:18004: checking <ctype> for newlib " >&5
cat > conftest.$ac_ext <<EOF
-#line 17969 "configure"
+#line 18006 "configure"
#include "confdefs.h"
#include <ctype.h>
int main() {
+ _ctype_[a];}
; return 0; }
EOF
-if { (eval echo configure:17979: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
\
ctype_newlib=yes
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:18013: checking for $ac_hdr" >&5
+echo "configure:18050: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18018 "configure"
+#line 18055 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:18023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:18060: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18052: checking for $ac_func" >&5
+echo "configure:18089: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18057 "configure"
+#line 18094 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:18080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:18105: checking for working mmap" >&5
+echo "configure:18142: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
-#line 18113 "configure"
+#line 18150 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
}
EOF
-if { (eval echo configure:18253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:18290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
if test $ac_cv_header_locale_h = yes; then
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:18316: checking for LC_MESSAGES" >&5
+echo "configure:18353: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'ac_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18321 "configure"
+#line 18358 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:18328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_val_LC_MESSAGES=yes
else
+2000-08-22 Benjamin Kosnik <bkoz@gnu.org>
+
+ * iofwide.c (_IO_fwide): Simplify, as nl_langinfo is assumed.
+
2000-08-14 Benjamin Kosnik <bkoz@gnu.org>
* *: Merge with mainline glibc sources.
#ifdef _LIBC
# include <dlfcn.h>
# include <wchar.h>
+# include <locale/localeinfo.h>
+# include <wcsmbs/wcsmbsload.h>
+# include <iconv/gconv_int.h>
#endif
#include <stdlib.h>
#include <string.h>
-#ifdef _LIBC
+#if defined(_LIBC) || defined(_GLIBCPP_USE_WCHAR_T)
# include <langinfo.h>
-# include <locale/localeinfo.h>
-# include <wcsmbs/wcsmbsload.h>
-# include <iconv/gconv_int.h>
#endif
should come up with a solution for the determination of the
currently used internal character set. */
const char *internal_ccs = _G_INTERNAL_CCS;
- const char *external_ccs = NULL;
+ const char *external_ccs = nl_langinfo(CODESET);
-# ifdef HAVE_NL_LANGINFO
- external_ccs = nl_langinfo (CODESET);
-# endif
if (external_ccs == NULL)
external_ccs = "ISO-8859-1";
cc->__cd_in = iconv_open (internal_ccs, external_ccs);
if (cc->__cd_in != (iconv_t) -1)
cc->__cd_out = iconv_open (external_ccs, internal_ccs);
-
- if (cc->__cd_in == (iconv_t) -1 || cc->__cd_out == (iconv_t) -1)
- /* XXX */
- abort ();
}
# else
# error "somehow determine this from LC_CTYPE"
template class __codecvt_abstract_base<char, char, mbstate_t>;
template class __codecvt_abstract_base<wchar_t, char, mbstate_t>;
#ifdef _GLIBCPP_USE_WCHAR_T
+ // XXX This should not be necessary. Unfortunately, the has_facet
+ // and use_facet defines are not in the headers, an instead in
+ // locale_facets.tcc for the time being, as they use std::vector and
+ // thus compile time double when they are pushed up to the top-level
+ // includes.
typedef unsigned short unicode_t;
+
template
const codecvt<unicode_t, char, __enc_traits>&
use_facet<codecvt<unicode_t, char, __enc_traits> >(const locale&);
template
bool
has_facet<codecvt<unicode_t, char, __enc_traits> >(const locale &);
+
+ template
+ const codecvt<unicode_t, wchar_t, __enc_traits>&
+ use_facet<codecvt<unicode_t, wchar_t, __enc_traits> >(const locale&);
+ template
+ bool
+ has_facet<codecvt<unicode_t, wchar_t, __enc_traits> >(const locale &);
#endif
// collate
bool test = true;
const ext_type* e_lit = "black pearl jasmine tea";
- const ext_type* efrom_next;
- const int_type* ifrom_next;
int size = strlen(e_lit);
int_type i_lit_base[24] =
};
const int_type* i_lit = i_lit_base;
+ const ext_type* efrom_next;
+ const int_type* ifrom_next;
ext_type* e_arr = new ext_type[size + 1];
ext_type* eto_next;
int_type* i_arr = new int_type[size + 1];
VERIFY( ito_next == i_arr + size );
// out
- unicode_codecvt::state_type state02;
+ unicode_codecvt::state_type state02("UNICODE", "ISO_8859-1");
initialize_state(state02);
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
e_arr, e_arr + size, eto_next);
// unshift
ext_traits::copy(e_arr, e_lit, size);
- unicode_codecvt::state_type state03;
+ unicode_codecvt::state_type state03("UNICODE", "ISO_8859-1");
initialize_state(state03);
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
VERIFY( r3 == codecvt_base::noconv );
VERIFY( !cvt.always_noconv() );
- unicode_codecvt::state_type state04;
+ unicode_codecvt::state_type state04("UNICODE", "ISO_8859-1");
initialize_state(state04);
int j = cvt.length(state03, e_lit, e_lit + size, 5);
VERIFY( j == 5 );
--- /dev/null
+// 2000-08-22 Benjamin Kosnik <bkoz@cygnus.com>
+
+// Copyright (C) 2000 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
+
+#include <locale>
+#include <debug_assert.h>
+
+using namespace std;
+
+void
+initialize_state(__enc_traits& state)
+{ state._M_init(); }
+
+// Partial specialization using __enc_traits.
+// codecvt<unicode_t, wchar_t, __enc_traits>
+void test01()
+{
+ typedef codecvt_base::result result;
+ typedef unsigned short unicode_t;
+ typedef unicode_t int_type;
+ typedef wchar_t ext_type;
+ typedef __enc_traits enc_type;
+ typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
+ typedef char_traits<int_type> int_traits;
+ typedef char_traits<ext_type> ext_traits;
+
+ bool test = true;
+ const ext_type* e_lit = L"black pearl jasmine tea";
+ int size = ext_traits::length(e_lit);
+
+ int_type i_lit_base[24] =
+ { 25088, 27648, 24832, 25344, 27392, 8192, 28672, 25856, 24832, 29184,
+ 27648, 8192, 27136, 24832, 29440, 27904, 26880, 28160, 25856, 8192, 29696,
+ 25856, 24832, 2560
+ };
+ const int_type* i_lit = i_lit_base;
+
+ const ext_type* efrom_next;
+ const int_type* ifrom_next;
+ ext_type* e_arr = new ext_type[size + 1];
+ ext_type* eto_next;
+ int_type* i_arr = new int_type[size + 1];
+ int_type* ito_next;
+
+ // construct a locale object with the specialized facet.
+ locale loc(locale::classic(), new unicode_codecvt);
+ // sanity check the constructed locale has the specialized facet.
+ VERIFY( has_facet<unicode_codecvt>(loc) );
+ const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
+
+ // in
+ unicode_codecvt::state_type state01("UNICODE", "UCS4");
+ initialize_state(state01);
+ result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
+ i_arr, i_arr + size, ito_next);
+ VERIFY( r1 == codecvt_base::ok );
+ VERIFY( !int_traits::compare(i_arr, i_lit, size) );
+ VERIFY( efrom_next == e_lit + size );
+ VERIFY( ito_next == i_arr + size );
+
+ // out
+ unicode_codecvt::state_type state02("UNICODE", "UCS4");
+ initialize_state(state02);
+ result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
+ e_arr, e_arr + size, eto_next);
+ VERIFY( r2 == codecvt_base::ok );
+ VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
+ VERIFY( ifrom_next == i_lit + size );
+ VERIFY( eto_next == e_arr + size );
+
+ // unshift
+ ext_traits::copy(e_arr, e_lit, size);
+ unicode_codecvt::state_type state03("UNICODE", "UCS4");
+ initialize_state(state03);
+ result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
+ VERIFY( r3 == codecvt_base::noconv );
+ VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
+ VERIFY( eto_next == e_arr );
+
+ int i = cvt.encoding();
+ VERIFY( i == 0 );
+
+ VERIFY( !cvt.always_noconv() );
+
+ unicode_codecvt::state_type state04("UNICODE", "UCS4");
+ initialize_state(state04);
+ int j = cvt.length(state03, e_lit, e_lit + size, 5);
+ VERIFY( j == 5 );
+
+ int k = cvt.max_length();
+ VERIFY( k == 1 );
+
+ delete [] e_arr;
+ delete [] i_arr;
+}
+
+int main ()
+{
+ test01();
+
+ return 0;
+}
+
+
+