[multiple changes]
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
This commit is contained in:
parent
38cca75024
commit
145163253a
@ -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.
|
||||
|
@ -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,31 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
@ -43,4 +43,41 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user