aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-10-28 13:19:21 +0000
committerJonathan Wakely <jwakely@redhat.com>2020-10-28 13:19:21 +0000
commit0bc199fc5d4eef5a20ced20df892e5e3b8821b60 (patch)
tree4a5bf3d02e15c7ce9eed8cec5ca87fd79d1a980a
parent2acb33103c4cbc6766d8707ad58aa5cc9a804719 (diff)
downloadgcc-0bc199fc5d4eef5a20ced20df892e5e3b8821b60.zip
gcc-0bc199fc5d4eef5a20ced20df892e5e3b8821b60.tar.gz
gcc-0bc199fc5d4eef5a20ced20df892e5e3b8821b60.tar.bz2
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.
-rw-r--r--libstdc++-v3/config/os/mingw32-w64/os_defines.h3
-rw-r--r--libstdc++-v3/config/os/mingw32/os_defines.h3
-rw-r--r--libstdc++-v3/include/bits/fstream.tcc2
-rw-r--r--libstdc++-v3/include/ext/stdio_filebuf.h4
-rw-r--r--libstdc++-v3/include/std/fstream5
5 files changed, 14 insertions, 3 deletions
diff --git a/libstdc++-v3/config/os/mingw32-w64/os_defines.h b/libstdc++-v3/config/os/mingw32-w64/os_defines.h
index e535f6c..39bdedd 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 1fee89c..9d2f2bd 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 81d00c4..a4ebbb8 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 fb95bec..3b29728 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<size_t>(BUFSIZ));
+ size_t __size = static_cast<size_t>(_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<size_t>(BUFSIZ));
+ size_t __size = static_cast<size_t>(_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 efc99d1..d884a15 100644
--- a/libstdc++-v3/include/std/fstream
+++ b/libstdc++-v3/include/std/fstream
@@ -44,6 +44,11 @@
#include <string> // 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