]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorBenjamin Kosnik <bkoz@gcc.gnu.org>
Wed, 11 Sep 2002 04:25:41 +0000 (04:25 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Wed, 11 Sep 2002 04:25:41 +0000 (04:25 +0000)
2002-09-11  Benjamin Kosnik  <bkoz@redhat.com>

* 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-11  Paolo Carlini  <pcarlini@unitus.it>

        * include/bits/locale_facets.tcc (__convert_from_v):
        Use __uselocale instead of setlocale for glibc 2.3+.

From-SVN: r57021

libstdc++-v3/ChangeLog
libstdc++-v3/config/locale/generic/c_locale.h
libstdc++-v3/config/locale/gnu/c_locale.h
libstdc++-v3/include/bits/locale_facets.tcc

index 70fb2df50018c293592b7eff1b49fb02226c8638..ba8ed4b5f6533524169f0f7be51d6f463ffc5c26 100644 (file)
@@ -1,3 +1,14 @@
+2002-09-11  Benjamin Kosnik  <bkoz@redhat.com>
+
+       * 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-11  Paolo Carlini  <pcarlini@unitus.it>
+
+        * include/bits/locale_facets.tcc (__convert_from_v):
+        Use __uselocale instead of setlocale for glibc 2.3+.
+
 2002-09-10  Benjamin Kosnik  <bkoz@redhat.com>
 
        * src/Makefile.am (sources): Edit.
index 0fc9a250c02ae78a798d38b9468fc62576dd1210..cb2bae8b5c5c65d8624efe7976cc9d70e07d0744 100644 (file)
@@ -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
 namespace std
 {
   typedef int*                 __c_locale;
+
+  template<typename _Tv>
+    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<char*>(malloc(strlen(__old) + 1));
+      if (__sav)
+        strcpy(__sav, __old);
+      setlocale(LC_ALL, "C");
+#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;
+    }
 }
index 3ce1781e23be3092a01b0d51898015b53bb659ce..91a92e9aaed256e3bbf08b69cc8502f5349ec082 100644 (file)
@@ -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
 namespace std
 {
   typedef __locale_t           __c_locale;
+
+  template<typename _Tv>
+    int
+    __convert_from_v(char* __out, const int __size, const char* __fmt,
+                    _Tv __v, const __c_locale& __cloc, int __prec = -1)
+    {
+      int __ret;
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
+      __c_locale __old = __uselocale(__cloc);
+#else
+      char* __old = setlocale(LC_ALL, NULL);
+      char* __sav = static_cast<char*>(malloc(strlen(__old) + 1));
+      if (__sav)
+        strcpy(__sav, __old);
+      setlocale(LC_ALL, "C");
+#endif
+
+#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)
+      __uselocale(__old);
+#else
+      setlocale(LC_ALL, __sav);
+      free(__sav);
+#endif
+      return __ret;
+    }
 }
index ad7ba3f5320362a28f317a9209943e9a34f9f8c4..195d33ab040737347d167550d4cd25f19f66544b 100644 (file)
@@ -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<typename _Tv>
     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<char*>(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<typename _Tv>
-    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<char*>(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