From: Benjamin Kosnik Date: Fri, 13 Sep 2002 02:25:49 +0000 (+0000) Subject: [multiple changes] X-Git-Tag: releases/gcc-3.2.1~286 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8be5fee1f395ed89e41a07e08951987157eb57a;p=thirdparty%2Fgcc.git [multiple changes] 2002-09-12 Benjamin Kosnik * libmath/Makefile.am (LIBTOOL): Use --tag CC always for this directory. * libmath/Makefile.in: Regenerate. * src/Makefile.am: Tweak comment. * src/Makefile.in: Regenerate. * config/locale/gnu/c_locale.h: Remove warnings. Inject __uselocale into __gnu_cxx. * config/locale/generic/c_locale.h: Match. 2002-09-12 Benjamin Kosnik * include/bits/locale_facets.tcc (__convert_from_v): Remove. * config/locale/gnu/c_locale.h (__convert_from_v): Add. * config/locale/generic/c_locale.h (__convert_from_v): Add. 2002-09-12 Paolo Carlini * include/bits/locale_facets.tcc (__convert_from_v): Use __uselocale instead of setlocale for glibc 2.3+. From-SVN: r57088 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 2633f4cd0abe..85ef8f782c3d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,26 @@ +2002-09-12 Benjamin Kosnik + + * libmath/Makefile.am (LIBTOOL): Use --tag CC always for this + directory. + * libmath/Makefile.in: Regenerate. + * src/Makefile.am: Tweak comment. + * src/Makefile.in: Regenerate. + + * config/locale/gnu/c_locale.h: Remove warnings. + Inject __uselocale into __gnu_cxx. + * config/locale/generic/c_locale.h: Match. + +2002-09-12 Benjamin Kosnik + + * include/bits/locale_facets.tcc (__convert_from_v): Remove. + * config/locale/gnu/c_locale.h (__convert_from_v): Add. + * config/locale/generic/c_locale.h (__convert_from_v): Add. + +2002-09-12 Paolo Carlini + + * include/bits/locale_facets.tcc (__convert_from_v): + Use __uselocale instead of setlocale for glibc 2.3+. + 2002-09-12 Benjamin Kosnik * src/Makefile.am (sources): Edit. diff --git a/libstdc++-v3/config/locale/generic/c_locale.h b/libstdc++-v3/config/locale/generic/c_locale.h index 0fc9a250c02a..bfd9bf0a0bf1 100644 --- a/libstdc++-v3/config/locale/generic/c_locale.h +++ b/libstdc++-v3/config/locale/generic/c_locale.h @@ -1,6 +1,6 @@ // Wrapper for underlying C-language localization -*- C++ -*- -// Copyright (C) 2001 Free Software Foundation, Inc. +// 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 @@ -38,4 +38,32 @@ namespace std { typedef int* __c_locale; + + template + int + __convert_from_v(char* __out, const int __size, const char* __fmt, + _Tv __v, const __c_locale&, int __prec = -1) + { + char* __old = setlocale(LC_ALL, NULL); + char* __sav = static_cast(malloc(strlen(__old) + 1)); + if (__sav) + strcpy(__sav, __old); + setlocale(LC_ALL, "C"); + + int __ret; +#ifdef _GLIBCPP_USE_C99 + if (__prec >= 0) + __ret = snprintf(__out, __size, __fmt, __prec, __v); + else + __ret = snprintf(__out, __size, __fmt, __v); +#else + if (__prec >= 0) + __ret = sprintf(__out, __fmt, __prec, __v); + else + __ret = sprintf(__out, __fmt, __v); +#endif + setlocale(LC_ALL, __sav); + free(__sav); + return __ret; + } } diff --git a/libstdc++-v3/config/locale/gnu/c_locale.h b/libstdc++-v3/config/locale/gnu/c_locale.h index 3ce1781e23be..aabbe6af4256 100644 --- a/libstdc++-v3/config/locale/gnu/c_locale.h +++ b/libstdc++-v3/config/locale/gnu/c_locale.h @@ -1,6 +1,6 @@ // Wrapper for underlying C-language localization -*- C++ -*- -// Copyright (C) 2001 Free Software Foundation, Inc. +// 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 @@ -40,7 +40,53 @@ #define _GLIBCPP_C_LOCALE_GNU 1 +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) +namespace __gnu_cxx +{ + extern "C" __typeof(uselocale) __uselocale; +} +#endif + namespace std { typedef __locale_t __c_locale; + + template + int + __convert_from_v(char* __out, const int __size, const char* __fmt, +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + _Tv __v, const __c_locale& __cloc, int __prec = -1) + { + __c_locale __old = __gnu_cxx::__uselocale(__cloc); +#else + _Tv __v, const __c_locale&, int __prec = -1) + { + char* __old = setlocale(LC_ALL, NULL); + char* __sav = static_cast(malloc(strlen(__old) + 1)); + if (__sav) + strcpy(__sav, __old); + setlocale(LC_ALL, "C"); +#endif + + int __ret; +#ifdef _GLIBCPP_USE_C99 + if (__prec >= 0) + __ret = snprintf(__out, __size, __fmt, __prec, __v); + else + __ret = snprintf(__out, __size, __fmt, __v); +#else + if (__prec >= 0) + __ret = sprintf(__out, __fmt, __prec, __v); + else + __ret = sprintf(__out, __fmt, __v); +#endif + +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + __gnu_cxx::__uselocale(__old); +#else + setlocale(LC_ALL, __sav); + free(__sav); +#endif + return __ret; + } } diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index ad7ba3f53203..195d33ab0407 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -1969,47 +1969,10 @@ namespace std // Convert numeric value of type _Tv to string and return length of string. // If snprintf is available use it, otherwise fall back to the unsafe sprintf // which, in general, can be dangerous and should be avoided. -#ifdef _GLIBCPP_USE_C99 template int __convert_from_v(char* __out, const int __size, const char* __fmt, - _Tv __v, const __c_locale&, int __prec = -1) - { - int __ret; - char* __old = setlocale(LC_ALL, NULL); - char* __sav = static_cast(malloc(strlen(__old) + 1)); - if (__sav) - strcpy(__sav, __old); - setlocale(LC_ALL, "C"); - if (__prec >= 0) - __ret = snprintf(__out, __size, __fmt, __prec, __v); - else - __ret = snprintf(__out, __size, __fmt, __v); - setlocale(LC_ALL, __sav); - free(__sav); - return __ret; - } -#else - template - int - __convert_from_v(char* __out, const int, const char* __fmt, _Tv __v, - const __c_locale&, int __prec = -1) - { - int __ret; - char* __old = setlocale(LC_ALL, NULL); - char* __sav = static_cast(malloc(strlen(__old) + 1)); - if (__sav) - strcpy(__sav, __old); - setlocale(LC_ALL, "C"); - if (__prec >= 0) - __ret = sprintf(__out, __fmt, __prec, __v); - else - __ret = sprintf(__out, __fmt, __v); - setlocale(LC_ALL, __sav); - free(__sav); - return __ret; - } -#endif + _Tv __v, const __c_locale&, int __prec = -1); // Construct correctly padded string, as per 22.2.2.2.2 // Assumes diff --git a/libstdc++-v3/libmath/Makefile.am b/libstdc++-v3/libmath/Makefile.am index 27d76e93f208..c1bf4be5aeda 100644 --- a/libstdc++-v3/libmath/Makefile.am +++ b/libstdc++-v3/libmath/Makefile.am @@ -34,12 +34,11 @@ libmath_la_DEPENDENCIES = $(libmath_la_LIBADD) libmath_la_SOURCES = stubs.c -LINK = \ - $(LIBTOOL) --tag CC --mode=link "$(CCLD)" \ - $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ - # Use common includes from acinclude.m4/GLIBCPP_EXPORT_INCLUDES TOPLEVEL_INCLUDES = @TOPLEVEL_INCLUDES@ INCLUDES = \ $(TOPLEVEL_INCLUDES) + +# Only compiling "C" sources in this directory. +LIBTOOL = @LIBTOOL@ --tag CC \ No newline at end of file diff --git a/libstdc++-v3/libmath/Makefile.in b/libstdc++-v3/libmath/Makefile.in index 375b9ad31d44..7640e684662d 100644 --- a/libstdc++-v3/libmath/Makefile.in +++ b/libstdc++-v3/libmath/Makefile.in @@ -92,7 +92,6 @@ LIBMATHOBJS = @LIBMATHOBJS@ LIBMATH_INCLUDES = @LIBMATH_INCLUDES@ LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@ LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@ -LIBTOOL = @LIBTOOL@ LIBUNWIND_FLAG = @LIBUNWIND_FLAG@ LN_S = @LN_S@ MAINT = @MAINT@ @@ -144,17 +143,15 @@ libmath_la_DEPENDENCIES = $(libmath_la_LIBADD) libmath_la_SOURCES = stubs.c -LINK = \ - $(LIBTOOL) --tag CC --mode=link "$(CCLD)" \ - $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ - - # Use common includes from acinclude.m4/GLIBCPP_EXPORT_INCLUDES TOPLEVEL_INCLUDES = @TOPLEVEL_INCLUDES@ INCLUDES = \ $(TOPLEVEL_INCLUDES) + +# Only compiling "C" sources in this directory. +LIBTOOL = @LIBTOOL@ --tag CC CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) @@ -170,6 +167,7 @@ CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am index 9678b766b2c8..4592168f48d6 100644 --- a/libstdc++-v3/src/Makefile.am +++ b/libstdc++-v3/src/Makefile.am @@ -27,7 +27,7 @@ MAINT_CHARSET = latin1 mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs -# Cross compiler and multilib support. +# Cross compiler support. CXX = @glibcpp_CXX@ toolexecdir = @glibcpp_toolexecdir@ toolexeclibdir = @glibcpp_toolexeclibdir@ diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index 6e5b364f2ae9..0e55017baf0a 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -130,7 +130,7 @@ MAINT_CHARSET = latin1 mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs -# Cross compiler and multilib support. +# Cross compiler support. CXX = @glibcpp_CXX@ toolexecdir = @glibcpp_toolexecdir@ toolexeclibdir = @glibcpp_toolexeclibdir@