From 10ef4e2e3fc6a9ad8a6a1bf25f7c7e8d365b74f4 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 4 Jul 2003 18:36:26 +0200 Subject: [PATCH] 2003-07-04 Paolo Carlini Revert the fix for libstdc++/11378. From-SVN: r68922 --- libstdc++-v3/ChangeLog | 4 + libstdc++-v3/include/std/std_fstream.h | 18 +-- .../performance/filebuf_unbuf_sputn.cc | 130 ------------------ 3 files changed, 7 insertions(+), 145 deletions(-) delete mode 100644 libstdc++-v3/testsuite/performance/filebuf_unbuf_sputn.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c923998c20d..c6170d8ca99 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,7 @@ +2003-07-04 Paolo Carlini + + Revert the fix for libstdc++/11378. + 2003-07-04 Paolo Carlini PR libstdc++/11378 diff --git a/libstdc++-v3/include/std/std_fstream.h b/libstdc++-v3/include/std/std_fstream.h index 766023573ab..b97c9443de9 100644 --- a/libstdc++-v3/include/std/std_fstream.h +++ b/libstdc++-v3/include/std/std_fstream.h @@ -397,21 +397,9 @@ namespace std virtual streamsize xsputn(const char_type* __s, streamsize __n) { - streamsize __ret = 0; - - const bool __testout = this->_M_mode & ios_base::out; - if (__testout && !_M_reading && this->_M_buf_size == 1 - && __check_facet(_M_codecvt).always_noconv()) - { - __ret = _M_file.xsputn(reinterpret_cast(__s), __n); - if (__ret == __n) - _M_writing = true; - } - else - __ret = __streambuf_type::xsputn(__s, __n); - - return __ret; - } + _M_destroy_pback(); + return __streambuf_type::xsputn(__s, __n); + } /** * @if maint diff --git a/libstdc++-v3/testsuite/performance/filebuf_unbuf_sputn.cc b/libstdc++-v3/testsuite/performance/filebuf_unbuf_sputn.cc deleted file mode 100644 index 17b0c46a09d..00000000000 --- a/libstdc++-v3/testsuite/performance/filebuf_unbuf_sputn.cc +++ /dev/null @@ -1,130 +0,0 @@ -// 2003-07-04 Petur Runolfsson -// -// Copyright (C) 2003 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -#include -#include -#include -#include - -// Contributed as part of libstdc++/11378. -int main(int argc, char** argv) -{ - using namespace std; - - if (argc < 3) - { - cerr << "Usage: " << argv[0] << " type iters [chunksize]\n"; - return -1; - } - - enum { type_stdio, type_iostream } type; - - if (!strcmp(argv[1], "stdio")) - type = type_stdio; - else if (!strcmp(argv[1], "iostream")) - type = type_iostream; - else - { - cerr << "Type must be one of {stdio, iostream}\n"; - return -1; - } - - int iters = atoi(argv[2]); - if (iters < 1) - { - cerr << "Iters must be an positive integer\n"; - return -1; - } - - int chunksize = 1; - if (argc > 3) - chunksize = atoi(argv[3]); - - if (iters < 1) - { - cerr << "Chunksize must be an positive integer\n"; - return -1; - } - - char* chunk = 0; - if (chunksize > 1) - { - chunk = new char[chunksize]; - memset(chunk, 'a', chunksize); - } - - switch (type) - { - case type_stdio: - { - FILE* f = fopen("tmp", "w"); - setvbuf(f, 0, _IONBF, 0); - - if (chunksize > 1) - { - for (int i = 0; i < iters; ++i) - fwrite_unlocked(chunk, 1, chunksize, f); - } - else - { - for (int i = 0; i < iters; ++i) - putc_unlocked('a', f); - } - - fclose(f); - break; - } - - case type_iostream: - { - filebuf f; - f.pubsetbuf(0, 0); - - f.open("tmp", ios_base::out); - - if (chunksize > 1) - { - for (int i = 0; i < iters; ++i) - f.sputn(chunk, chunksize); - } - else - { - for (int i = 0; i < iters; ++i) - f.sputc('a'); - } - - f.close(); - - break; - } - } - - delete[] chunk; - return 0; -}