[gcc r11-4479] libstdc++: Override BUFSIZ for Windows targets [PR 94268]
Jonathan Wakely
redi@gcc.gnu.org
Wed Oct 28 13:19:26 GMT 2020
https://gcc.gnu.org/g:0bc199fc5d4eef5a20ced20df892e5e3b8821b60
commit r11-4479-g0bc199fc5d4eef5a20ced20df892e5e3b8821b60
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Wed Oct 28 13:19:21 2020 +0000
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:
---
libstdc++-v3/config/os/mingw32-w64/os_defines.h | 3 +++
libstdc++-v3/config/os/mingw32/os_defines.h | 3 +++
libstdc++-v3/include/bits/fstream.tcc | 2 +-
libstdc++-v3/include/ext/stdio_filebuf.h | 4 ++--
libstdc++-v3/include/std/fstream | 5 +++++
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 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<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 efc99d1e5a5..d884a15be41 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
More information about the Libstdc++-cvs
mailing list