From: Jonathan Wakely Date: Wed, 28 Oct 2020 13:19:21 +0000 (+0000) Subject: libstdc++: Override BUFSIZ for Windows targets [PR 94268] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0bc199fc5d4eef5a20ced20df892e5e3b8821b60;p=gcc.git libstdc++: Override BUFSIZ for Windows targets [PR 94268] This replaces uses of BUFSIZ with a new _GLIBCXX_BUFSIZ macro that can be overridden in target-specific config headers. That allows the mingw and mingw-w64 targets to override it, because BUFSIZ is apparently defined to 512, resulting in poor performance. The MSVCRT stdio apparently uses 4096, so we use that too. libstdc++-v3/ChangeLog: PR libstdc++/94268 * config/os/mingw32-w64/os_defines.h (_GLIBCXX_BUFSIZ): Define. * config/os/mingw32/os_defines.h (_GLIBCXX_BUFSIZ): Define. * include/bits/fstream.tcc: Use _GLIBCXX_BUFSIZ instead of BUFSIZ. * include/ext/stdio_filebuf.h: Likewise. * include/std/fstream (_GLIBCXX_BUFSIZ): Define. --- diff --git a/libstdc++-v3/config/os/mingw32-w64/os_defines.h b/libstdc++-v3/config/os/mingw32-w64/os_defines.h index e535f6c2b85..39bdedd19e9 100644 --- a/libstdc++-v3/config/os/mingw32-w64/os_defines.h +++ b/libstdc++-v3/config/os/mingw32-w64/os_defines.h @@ -90,4 +90,7 @@ #define _GLIBCXX_USE_CRT_RAND_S 1 +// See libstdc++/94268 +#define _GLIBCXX_BUFSIZ 4096 + #endif diff --git a/libstdc++-v3/config/os/mingw32/os_defines.h b/libstdc++-v3/config/os/mingw32/os_defines.h index 1fee89c49f5..9d2f2bda660 100644 --- a/libstdc++-v3/config/os/mingw32/os_defines.h +++ b/libstdc++-v3/config/os/mingw32/os_defines.h @@ -78,4 +78,7 @@ // See libstdc++/59807 #define _GTHREAD_USE_MUTEX_INIT_FUNC 1 +// See libstdc++/94268 +#define _GLIBCXX_BUFSIZ 4096 + #endif diff --git a/libstdc++-v3/include/bits/fstream.tcc b/libstdc++-v3/include/bits/fstream.tcc index 81d00c4d318..a4ebbb84fe7 100644 --- a/libstdc++-v3/include/bits/fstream.tcc +++ b/libstdc++-v3/include/bits/fstream.tcc @@ -80,7 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION basic_filebuf<_CharT, _Traits>:: basic_filebuf() : __streambuf_type(), _M_lock(), _M_file(&_M_lock), _M_mode(ios_base::openmode(0)), _M_state_beg(), _M_state_cur(), - _M_state_last(), _M_buf(0), _M_buf_size(BUFSIZ), + _M_state_last(), _M_buf(0), _M_buf_size(_GLIBCXX_BUFSIZ), _M_buf_allocated(false), _M_reading(false), _M_writing(false), _M_pback(), _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false), _M_codecvt(0), _M_ext_buf(0), _M_ext_buf_size(0), _M_ext_next(0), diff --git a/libstdc++-v3/include/ext/stdio_filebuf.h b/libstdc++-v3/include/ext/stdio_filebuf.h index fb95bec7350..3b297285ad3 100644 --- a/libstdc++-v3/include/ext/stdio_filebuf.h +++ b/libstdc++-v3/include/ext/stdio_filebuf.h @@ -75,7 +75,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * closed when the stdio_filebuf is closed/destroyed. */ stdio_filebuf(int __fd, std::ios_base::openmode __mode, - size_t __size = static_cast(BUFSIZ)); + size_t __size = static_cast(_GLIBCXX_BUFSIZ)); /** * @param __f An open @c FILE*. @@ -88,7 +88,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * stdio_filebuf is closed/destroyed. */ stdio_filebuf(std::__c_file* __f, std::ios_base::openmode __mode, - size_t __size = static_cast(BUFSIZ)); + size_t __size = static_cast(_GLIBCXX_BUFSIZ)); /** * Closes the external data stream if the file descriptor constructor diff --git a/libstdc++-v3/include/std/fstream b/libstdc++-v3/include/std/fstream index efc99d1e5a5..d884a15be41 100644 --- a/libstdc++-v3/include/std/fstream +++ b/libstdc++-v3/include/std/fstream @@ -44,6 +44,11 @@ #include // For std::string overloads. #endif +// This can be overridden by the target's os_defines.h +#ifndef _GLIBCXX_BUFSIZ +# define _GLIBCXX_BUFSIZ BUFSIZ +#endif + namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION