PR libstdc++/68737 Do not use vsnprintf on HPUX
It doesn't conform to the spec, so use vsprintf with a large buffer instead. PR libstdc++/68737 * config/locale/generic/c_locale.h (__convert_from_v) [_GLIBCXX_USE_C99_STDIO]: Also check _GLIBCXX_HAVE_BROKEN_VSNPRINTF. * config/os/hpux/os_defines.h: Define _GLIBCXX_HAVE_BROKEN_VSNPRINTF. * include/bits/locale_facets.tcc (num_put::_M_insert_float) [_GLIBCXX_USE_C99_STDIO]: Also check _GLIBCXX_HAVE_BROKEN_VSNPRINTF. From-SVN: r268350
This commit is contained in:
parent
f4b7e754cc
commit
c98f255154
|
@ -1,3 +1,12 @@
|
|||
2019-01-28 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/68737
|
||||
* config/locale/generic/c_locale.h (__convert_from_v)
|
||||
[_GLIBCXX_USE_C99_STDIO]: Also check _GLIBCXX_HAVE_BROKEN_VSNPRINTF.
|
||||
* config/os/hpux/os_defines.h: Define _GLIBCXX_HAVE_BROKEN_VSNPRINTF.
|
||||
* include/bits/locale_facets.tcc (num_put::_M_insert_float)
|
||||
[_GLIBCXX_USE_C99_STDIO]: Also check _GLIBCXX_HAVE_BROKEN_VSNPRINTF.
|
||||
|
||||
2019-01-24 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/88840
|
||||
|
|
|
@ -70,7 +70,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
__builtin_va_list __args;
|
||||
__builtin_va_start(__args, __fmt);
|
||||
|
||||
#if _GLIBCXX_USE_C99_STDIO
|
||||
#if _GLIBCXX_USE_C99_STDIO && !_GLIBCXX_HAVE_BROKEN_VSNPRINTF
|
||||
const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
|
||||
#else
|
||||
const int __ret = __builtin_vsprintf(__out, __fmt, __args);
|
||||
|
|
|
@ -109,4 +109,9 @@ typedef long int __padding_type;
|
|||
#if defined (__hppa__)
|
||||
#define _GLIBCXX_HAVE_BROKEN_STRTOLD 1
|
||||
#endif
|
||||
|
||||
// The vnsprintf function returns -1 when the buffer is too small.
|
||||
// See PR libstdc++/68737.
|
||||
#define _GLIBCXX_HAVE_BROKEN_VSNPRINTF 1
|
||||
|
||||
#endif
|
||||
|
|
|
@ -992,7 +992,7 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
|
|||
char __fbuf[16];
|
||||
__num_base::_S_format_float(__io, __fbuf, __mod);
|
||||
|
||||
#if _GLIBCXX_USE_C99_STDIO
|
||||
#if _GLIBCXX_USE_C99_STDIO && !_GLIBCXX_HAVE_BROKEN_VSNPRINTF
|
||||
// Precision is always used except for hexfloat format.
|
||||
const bool __use_prec =
|
||||
(__io.flags() & ios_base::floatfield) != ios_base::floatfield;
|
||||
|
|
Loading…
Reference in New Issue