Module Name: src Committed By: mrg Date: Sat Apr 24 21:17:40 UTC 2021
Modified Files: src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly: c_locale.cc c_locale.h Log Message: move the NetBSD version of: __convert_from_v(const __c_locale& __cloc, char* __out, const int __size __attribute__ ((__unused__)), const char* __fmt, ...) from the .h file into the .cc file. NetBSD version relies upon vasprintf_l() being defined and compile contexts such as _XOPEN_SOURCE=600 or _POSIX_C_SOURCE < 200809 may not provide the definition of it, cause compile time issues for 3rdparty applications in c++locale.h. This ensure that all the required definitions are present when this code is compiled. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 \ src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.cc \ src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.cc diff -u src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.cc:1.5 src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.cc:1.6 --- src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.cc:1.5 Sun Apr 11 00:02:24 2021 +++ src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.cc Sat Apr 24 21:17:40 2021 @@ -28,6 +28,8 @@ // Written by Benjamin Kosnik <b...@redhat.com> // Modified for DragonFly by John Marino <gnu...@marino.st> +// Modified for NetBSD by Christos Zoulas <chris...@zoulas.com> and +// matthew green <m...@eterna.com.au> #include <cstdlib> #include <locale> @@ -191,6 +193,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const char* const* const locale::_S_categories = __gnu_cxx::category_names; +#ifdef __NetBSD__ + int + __convert_from_v(const __c_locale& __cloc, char* __out, + const int __size __attribute__ ((__unused__)), + const char* __fmt, ...) + { + __builtin_va_list __args; + __builtin_va_start(__args, __fmt); + + const int __ret = vsnprintf_l(__out, __size, (struct _locale *)__cloc, + __fmt, __args); + + __builtin_va_end(__args); + + return __ret; + } +#endif + _GLIBCXX_END_NAMESPACE_VERSION } // namespace Index: src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.h diff -u src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.h:1.5 src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.h:1.6 --- src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.h:1.5 Sun Apr 11 00:02:24 2021 +++ src/external/gpl3/gcc/dist/libstdc++-v3/config/locale/dragonfly/c_locale.h Sat Apr 24 21:17:40 2021 @@ -33,6 +33,8 @@ // Written by Benjamin Kosnik <b...@redhat.com> // Modified for DragonFly by John Marino <gnu...@marino.st> +// Modified for NetBSD by Christos Zoulas <chris...@zoulas.com> and +// matthew green <m...@eterna.com.au> #ifndef _GLIBCXX_CXX_LOCALE_H #define _GLIBCXX_CXX_LOCALE_H 1 @@ -54,6 +56,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef int* __c_locale; +#ifndef __NetBSD__ // Convert numeric value of type double and long double to string and // return length of string. If vsnprintf is available use it, otherwise // fall back to the unsafe vsprintf which, in general, can be dangerous @@ -63,30 +66,31 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const int __size __attribute__ ((__unused__)), const char* __fmt, ...) { -#ifndef __NetBSD__ __c_locale __old = (__c_locale)uselocale((locale_t)__cloc); -#endif __builtin_va_list __args; __builtin_va_start(__args, __fmt); -#ifndef __NetBSD__ #if _GLIBCXX_USE_C99_STDIO const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); #else const int __ret = __builtin_vsprintf(__out, __fmt, __args); #endif - uselocale((locale_t)__old); -#else - const int __ret = vsnprintf_l(__out, __size, (locale_t)__cloc, __fmt, - __args); -#endif - __builtin_va_end(__args); + uselocale((locale_t)__old); return __ret; } +#else + // NetBSD backend requires vasprintf_l() which may not be visible in + // all complation environments (eg, _XOPEN_SOURCE=600) so the backend + // lives in the library code, instead of this header. + int + __convert_from_v(const __c_locale& __cloc, char* __out, + const int __size __attribute__ ((__unused__)), + const char* __fmt, ...); +#endif _GLIBCXX_END_NAMESPACE_VERSION } // namespace