diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2000-06-05 22:23:47 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2000-06-05 22:23:47 +0000 |
commit | 4b8bb462dc50037b8a2d3748769841c6fb66c7bc (patch) | |
tree | 96312b17e2fd9995bb136adef1f065f367341c7b /gnu | |
parent | bc01f7371c47d797fb0aaff6be8286e934d81e0a (diff) |
Synch with 2.95.3 (pre-rel)
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/egcs/libio/ChangeLog | 18 | ||||
-rw-r--r-- | gnu/egcs/libio/dbz/dbzmain.c | 2 | ||||
-rw-r--r-- | gnu/egcs/libio/dbz/fake.c | 2 | ||||
-rw-r--r-- | gnu/egcs/libio/filebuf.cc | 16 | ||||
-rw-r--r-- | gnu/egcs/libio/fstream.h | 10 | ||||
-rw-r--r-- | gnu/egcs/libio/stream.h | 4 | ||||
-rw-r--r-- | gnu/egcs/libio/strstream.h | 6 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/ChangeLog | 36 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/Makefile.in | 3 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/sstream | 225 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/std/bastring.cc | 10 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/std/bastring.h | 11 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/std/complext.cc | 2 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/std/valarray_array.h | 2 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/stl/ChangeLog | 5 | ||||
-rw-r--r-- | gnu/egcs/libstdc++/stl/bitset | 3 |
16 files changed, 327 insertions, 28 deletions
diff --git a/gnu/egcs/libio/ChangeLog b/gnu/egcs/libio/ChangeLog index 832051adf64..d78e5056a4e 100644 --- a/gnu/egcs/libio/ChangeLog +++ b/gnu/egcs/libio/ChangeLog @@ -1,3 +1,21 @@ +2000-01-28 Martin v. Löwis <loewis@informatik.hu-berlin.de> + + * fstream.h (ifstream::ifstream): Add ios::in to mode. + (ifstream::open): Likewise. + (ofstream::ofstream): Add ios::out to mode. + (ofstream::open): Likewise. + +1999-12-21 Martin v. Löwis <loewis@informatik.hu-berlin.de> + + * filebuf.cc (open): Support ios::ate if _G_HAVE_IO_FILE_OPEN. + Remove seek for ios::app if not. + +1999-12-14 Martin v. Löwis <loewis@informatik.hu-berlin.de> + + * strstream.h (strstreambuf::streambuf): Rename parameters to + avoid shadow warning. + * stream.h (WS): Likewise. + Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95.2 Released. diff --git a/gnu/egcs/libio/dbz/dbzmain.c b/gnu/egcs/libio/dbz/dbzmain.c index 887538a57dc..d6b92e86486 100644 --- a/gnu/egcs/libio/dbz/dbzmain.c +++ b/gnu/egcs/libio/dbz/dbzmain.c @@ -19,7 +19,7 @@ #define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) #ifndef lint -static char RCSid[] = "$Header: /cvs/OpenBSD/src/gnu/egcs/libio/dbz/dbzmain.c,v 1.1.1.2 1999/08/23 20:32:04 espie Exp $"; +static char RCSid[] = "$Header: /cvs/OpenBSD/src/gnu/egcs/libio/dbz/dbzmain.c,v 1.1.1.3 2000/06/05 22:23:28 espie Exp $"; #endif char *progname; diff --git a/gnu/egcs/libio/dbz/fake.c b/gnu/egcs/libio/dbz/fake.c index 9f86a178c3f..9d07951f034 100644 --- a/gnu/egcs/libio/dbz/fake.c +++ b/gnu/egcs/libio/dbz/fake.c @@ -13,7 +13,7 @@ #define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) #ifndef lint -static char RCSid[] = "$Header: /cvs/OpenBSD/src/gnu/egcs/libio/dbz/fake.c,v 1.1.1.2 1999/08/23 20:32:04 espie Exp $"; +static char RCSid[] = "$Header: /cvs/OpenBSD/src/gnu/egcs/libio/dbz/fake.c,v 1.1.1.3 2000/06/05 22:23:29 espie Exp $"; #endif int midonly = 0; /* just message ids, rest not realistic */ diff --git a/gnu/egcs/libio/filebuf.cc b/gnu/egcs/libio/filebuf.cc index 422d442736e..0b0fd6d88d3 100644 --- a/gnu/egcs/libio/filebuf.cc +++ b/gnu/egcs/libio/filebuf.cc @@ -1,5 +1,5 @@ /* This is part of libio/iostream, providing -*- C++ -*- input/output. -Copyright (C) 1993, 1995 Free Software Foundation +Copyright (C) 1993, 1995, 1999 Free Software Foundation This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or modify it under the @@ -112,15 +112,23 @@ filebuf* filebuf::open(const char *filename, ios::openmode mode, int prot) if (mode & (int)ios::noreplace) posix_mode |= O_EXCL; #if _G_HAVE_IO_FILE_OPEN - return (filebuf*)_IO_file_open (this, filename, posix_mode, prot, - read_write, 0); + if (!_IO_file_open (this, filename, posix_mode, prot, + read_write, 0)) + return NULL; + if (mode & ios::ate) { + if (pubseekoff(0, ios::end) == EOF) { + _IO_un_link (this); + return NULL; + } + } + return this; #else int fd = ::open(filename, posix_mode, prot); if (fd < 0) return NULL; _fileno = fd; xsetflags(read_write, _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING); - if (mode & (ios::ate|ios::app)) { + if (mode & ios::ate) { if (pubseekoff(0, ios::end) == EOF) return NULL; } diff --git a/gnu/egcs/libio/fstream.h b/gnu/egcs/libio/fstream.h index ea98f5caed0..b5f6598538f 100644 --- a/gnu/egcs/libio/fstream.h +++ b/gnu/egcs/libio/fstream.h @@ -1,5 +1,5 @@ /* This is part of libio/iostream, providing -*- C++ -*- input/output. -Copyright (C) 1993 Free Software Foundation +Copyright (C) 1993, 2000 Free Software Foundation This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or modify it under the @@ -62,9 +62,9 @@ class ifstream : public fstreambase, public istream { ifstream(int fd) : fstreambase(fd) { } ifstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/ ifstream(const char *name, int mode=ios::in, int prot=0664) - : fstreambase(name, mode, prot) { } + : fstreambase(name, mode | ios::in, prot) { } void open(const char *name, int mode=ios::in, int prot=0664) - { fstreambase::open(name, mode, prot); } + { fstreambase::open(name, mode | ios::in, prot); } }; class ofstream : public fstreambase, public ostream { @@ -73,9 +73,9 @@ class ofstream : public fstreambase, public ostream { ofstream(int fd) : fstreambase(fd) { } ofstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/ ofstream(const char *name, int mode=ios::out, int prot=0664) - : fstreambase(name, mode, prot) { } + : fstreambase(name, mode | ios::out, prot) { } void open(const char *name, int mode=ios::out, int prot=0664) - { fstreambase::open(name, mode, prot); } + { fstreambase::open(name, mode | ios::out, prot); } }; class fstream : public fstreambase, public iostream { diff --git a/gnu/egcs/libio/stream.h b/gnu/egcs/libio/stream.h index 0859802ade6..90f8c1f2781 100644 --- a/gnu/egcs/libio/stream.h +++ b/gnu/egcs/libio/stream.h @@ -1,5 +1,5 @@ /* -Copyright (C) 1993 Free Software Foundation +Copyright (C) 1993, 1999 Free Software Foundation This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or modify it under the @@ -53,7 +53,7 @@ extern char* oct(unsigned int, int=0); char* chr(char ch, int width = 0); char* str(const char* s, int width = 0); -inline istream& WS(istream& str) { return ws(str); } +inline istream& WS(istream& __str) { return ws(__str); } } // extern "C++" #endif /* !_COMPAT_STREAM_H */ diff --git a/gnu/egcs/libio/strstream.h b/gnu/egcs/libio/strstream.h index d549b454758..967e5b0b76a 100644 --- a/gnu/egcs/libio/strstream.h +++ b/gnu/egcs/libio/strstream.h @@ -1,5 +1,5 @@ /* This is part of libio/iostream, providing -*- C++ -*- input/output. -Copyright (C) 1993 Free Software Foundation +Copyright (C) 1993, 1999 Free Software Foundation This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or modify it under the @@ -50,8 +50,8 @@ class strstreambuf : public streambuf virtual ~strstreambuf(); strstreambuf() { init_dynamic(0, 0); } strstreambuf(int initial_size) { init_dynamic(0, 0, initial_size); } - strstreambuf(void *(*alloc)(_IO_size_t), void (*free)(void*)) - { init_dynamic(alloc, free); } + strstreambuf(void *(*__alloc)(_IO_size_t), void (*__free)(void*)) + { init_dynamic(__alloc, __free); } strstreambuf(char *ptr, int size, char *pstart = NULL) { init_static(ptr, size, pstart); } strstreambuf(unsigned char *ptr, int size, unsigned char *pstart = NULL) diff --git a/gnu/egcs/libstdc++/ChangeLog b/gnu/egcs/libstdc++/ChangeLog index 462049b1324..f0e953012b6 100644 --- a/gnu/egcs/libstdc++/ChangeLog +++ b/gnu/egcs/libstdc++/ChangeLog @@ -1,3 +1,39 @@ +2000-04-24 Magnus Fromreide <magfr@lysator.liu.se> + + * sstream: New file. + * Makefile.in (HEADERS): Add it. + +2000-03-12 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + + * std/bastring.h (basic_string<>::push_back): Define. + +Tue Mar 7 21:37:56 2000 Jeffrey A Law (law@cygnus.com) + + 1999-11-19 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/valarray_meta.h (_DEFINE_EXPR_UNARY_FUNCTION): Don't forget + to define tanh. + + 1999-11-05 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/valarray_meta.h (_DEFINE_EXPR_UNARY_FUNCTION): When + building meta-expressions don't forget to take the contained + closures. + + 1999-10-19 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/valarray_meta.h: (_BinClos::_BinClos): Fix typo. + + 1999-09-17 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/complext.cc (pow): Don't expect floating point promotion + in presence of template argument deduction. There is no such + thing. + +2000-02-06 Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + * std/valarray_array.h (__valarray_copy): Fix typo. + +1999-12-14 Martin v. Löwis <loewis@informatik.hu-berlin.de> + * std/bastring.h (basic_string::basic_string): Rename parameters + to avoid shadow warnings. + * std/bastring.cc (alloc): Likewise. + Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95.2 Released. diff --git a/gnu/egcs/libstdc++/Makefile.in b/gnu/egcs/libstdc++/Makefile.in index eb9ec77412c..f13eddcf294 100644 --- a/gnu/egcs/libstdc++/Makefile.in +++ b/gnu/egcs/libstdc++/Makefile.in @@ -28,7 +28,8 @@ HEADERS= cassert cctype cerrno cfloat ciso646 climits clocale cmath complex \ cwchar cwctype string stdexcept \ algorithm deque functional hash_map hash_set iterator list map \ memory numeric pthread_alloc queue rope set slist stack utility \ - vector fstream iomanip iostream strstream iosfwd bitset valarray + vector fstream iomanip iostream strstream iosfwd bitset valarray \ + sstream ARLIB = libstdc++.a.$(VERSION) ARLINK = libstdc++.a diff --git a/gnu/egcs/libstdc++/sstream b/gnu/egcs/libstdc++/sstream new file mode 100644 index 00000000000..714be717e50 --- /dev/null +++ b/gnu/egcs/libstdc++/sstream @@ -0,0 +1,225 @@ +/* This is part of libio/iostream, providing -*- C++ -*- input/output.
+Copyright (C) 2000 Free Software Foundation
+
+This file is part of the GNU IO 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, if you link this library with files
+compiled with a GNU compiler to produce an executable, this does not 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. */
+
+/* Written by Magnus Fromreide (magfr@lysator.liu.se). */
+
+#ifndef __SSTREAM__
+#define __SSTREAM__
+
+#include <string>
+#include <iostream.h>
+#include <streambuf.h>
+
+namespace std
+{
+ class stringbuf : public streambuf
+ {
+ public:
+ typedef char char_type;
+ typedef int int_type;
+ typedef streampos pos_type;
+ typedef streamoff off_type;
+
+ explicit stringbuf(int which=ios::in|ios::out) :
+ streambuf(which), buf(), mode(static_cast<ios::open_mode>(which)),
+ rpos(0), bufsize(1)
+ { }
+
+ explicit stringbuf(const std::string &s, int which=ios::in|ios::out) :
+ streambuf(which), buf(s), mode(static_cast<ios::open_mode>(which)),
+ bufsize(1)
+ {
+ if(mode & ios::in)
+ {
+ setg(&defbuf, &defbuf + bufsize, &defbuf + bufsize);
+ }
+ if(mode & ios::out)
+ {
+ setp(&defbuf, &defbuf + bufsize);
+ }
+ rpos = (mode & ios::ate ? s.size() : 0);
+ }
+
+ std::string str() const
+ {
+ const_cast<stringbuf*>(this)->sync(); // Sigh, really ugly hack
+ return buf;
+ };
+
+ void str(const std::string& s)
+ {
+ buf = s;
+ if(mode & ios::in)
+ {
+ gbump(egptr() - gptr());
+ }
+ if(mode & ios::out)
+ {
+ pbump(pbase() - pptr());
+ }
+ rpos = (mode & ios::ate ? s.size() : 0);
+ }
+
+ protected:
+ inline virtual int sync();
+ inline virtual int overflow(int = EOF);
+ inline virtual int underflow();
+ private:
+ std::string buf;
+ ios::open_mode mode;
+ std::string::size_type rpos;
+ streamsize bufsize;
+ char defbuf;
+ };
+
+ class stringstreambase : virtual public ios {
+ protected:
+ stringbuf __my_sb;
+ public:
+ std::string str() const
+ {
+ return dynamic_cast<stringbuf*>(_strbuf)->str();
+ }
+ void str(const std::string& s)
+ {
+ clear();
+ dynamic_cast<stringbuf*>(_strbuf)->str(s);
+ }
+
+ stringbuf* rdbuf()
+ {
+ return &__my_sb;
+ }
+ protected:
+ stringstreambase(int which) :
+ __my_sb(which)
+ {
+ init (&__my_sb);
+ }
+
+ stringstreambase(const std::string& s, int which) :
+ __my_sb(s, which)
+ {
+ init (&__my_sb);
+ }
+ };
+
+ class istringstream : public stringstreambase, public istream {
+ public:
+ istringstream(int which=ios::in) :
+ stringstreambase(which)
+ { }
+
+ istringstream(const std::string& s, int which=ios::in) :
+ stringstreambase(s, which)
+ { }
+ };
+
+ class ostringstream : public stringstreambase, public ostream {
+ public:
+ ostringstream(int which=ios::out) :
+ stringstreambase(which)
+ { }
+
+ ostringstream(const std::string& s, int which=ios::out) :
+ stringstreambase(s, which)
+ { }
+ };
+
+ class stringstream : public stringstreambase, public iostream {
+ public:
+ stringstream(int which=ios::in|ios::out) :
+ stringstreambase(which)
+ { }
+
+ stringstream(const std::string &s, int which=ios::in|ios::out) :
+ stringstreambase(s, which)
+ { }
+ };
+}
+
+inline int std::stringbuf::sync()
+{
+ if((mode & ios::out) == 0)
+ return EOF;
+
+ streamsize n = pptr() - pbase();
+ if(n)
+ {
+ buf.replace(rpos, std::string::npos, pbase(), n);
+ if(buf.size() - rpos != n)
+ return EOF;
+ rpos += n;
+ pbump(-n);
+ gbump(egptr() - gptr());
+ }
+ return 0;
+}
+
+inline int std::stringbuf::overflow(int ch)
+{
+ if((mode & ios::out) == 0)
+ return EOF;
+
+ streamsize n = pptr() - pbase();
+
+ if(n && sync())
+ return EOF;
+
+ if(ch != EOF)
+ {
+ std::string::size_type oldSize = buf.size();
+
+ buf.replace(rpos, std::string::npos, ch);
+ if(buf.size() - oldSize != 1)
+ return EOF;
+ ++rpos;
+ }
+ return 0;
+}
+
+inline int std::stringbuf::underflow()
+{
+ sync();
+ if((mode & ios::in) == 0)
+ {
+ return EOF;
+ }
+ if(rpos >= buf.size())
+ {
+ return EOF;
+ }
+
+ std::string::size_type n = egptr() - eback();
+ std::string::size_type s;
+
+ s = buf.copy(eback(), n, rpos);
+ pbump(pbase() - pptr());
+ gbump(eback() - gptr());
+ int res = (0377 & buf[rpos]);
+ rpos += s;
+ return res;
+}
+
+#endif /* not __STRSTREAM__ */
diff --git a/gnu/egcs/libstdc++/std/bastring.cc b/gnu/egcs/libstdc++/std/bastring.cc index 3093b9e129d..f86f6d30157 100644 --- a/gnu/egcs/libstdc++/std/bastring.cc +++ b/gnu/egcs/libstdc++/std/bastring.cc @@ -1,5 +1,5 @@ // Member templates for the -*- C++ -*- string classes. -// Copyright (C) 1994 Free Software Foundation +// Copyright (C) 1994, 1999 Free Software Foundation // This file is part of the GNU ANSI C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -94,14 +94,14 @@ check_realloc (basic_string::size_type s) const template <class charT, class traits, class Allocator> void basic_string <charT, traits, Allocator>:: -alloc (basic_string::size_type size, bool save) +alloc (basic_string::size_type __size, bool __save) { - if (! check_realloc (size)) + if (! check_realloc (__size)) return; - Rep *p = Rep::create (size); + Rep *p = Rep::create (__size); - if (save) + if (__save) { p->copy (0, data (), length ()); p->len = length (); diff --git a/gnu/egcs/libstdc++/std/bastring.h b/gnu/egcs/libstdc++/std/bastring.h index 70891262e96..bbe873085ea 100644 --- a/gnu/egcs/libstdc++/std/bastring.h +++ b/gnu/egcs/libstdc++/std/bastring.h @@ -1,5 +1,5 @@ // Main templates for the -*- C++ -*- string classes. -// Copyright (C) 1994, 1995 Free Software Foundation +// Copyright (C) 1994, 1995, 1999 Free Software Foundation // This file is part of the GNU ANSI C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -180,11 +180,11 @@ public: : dat (nilRep.grab ()) { assign (n, c); } #ifdef __STL_MEMBER_TEMPLATES template<class InputIterator> - basic_string(InputIterator begin, InputIterator end) + basic_string(InputIterator __begin, InputIterator __end) #else - basic_string(const_iterator begin, const_iterator end) + basic_string(const_iterator __begin, const_iterator __end) #endif - : dat (nilRep.grab ()) { assign (begin, end); } + : dat (nilRep.grab ()) { assign (__begin, __end); } ~basic_string () { rep ()->release (); } @@ -208,6 +208,9 @@ public: #endif { return replace (iend (), iend (), first, last); } + void push_back(charT __c) + { append(1, __c); } + basic_string& assign (const basic_string& str, size_type pos = 0, size_type n = npos) { return replace (0, npos, str, pos, n); } diff --git a/gnu/egcs/libstdc++/std/complext.cc b/gnu/egcs/libstdc++/std/complext.cc index d50bf0871f6..60227f21329 100644 --- a/gnu/egcs/libstdc++/std/complext.cc +++ b/gnu/egcs/libstdc++/std/complext.cc @@ -236,7 +236,7 @@ pow (const complex<FLOAT>& xin, int y) if (y < 0) { y = -y; - x = 1/x; + x = FLOAT(1)/x; } for (;;) { diff --git a/gnu/egcs/libstdc++/std/valarray_array.h b/gnu/egcs/libstdc++/std/valarray_array.h index f711e52a165..a0b5818fd8b 100644 --- a/gnu/egcs/libstdc++/std/valarray_array.h +++ b/gnu/egcs/libstdc++/std/valarray_array.h @@ -73,7 +73,7 @@ template<typename _Tp> inline void __valarray_copy (const _Tp* __restrict__ __a, size_t __n, size_t __s, _Tp* __restrict__ __b) -{ for (size_t __i=0; __i<__n; ++__i, ++__b, __a += __s) *__b += *__a; } +{ for (size_t __i=0; __i<__n; ++__i, ++__b, __a += __s) *__b = *__a; } // copy plain __a[<__n>] in strided __b[<__n : __s>] template<typename _Tp> diff --git a/gnu/egcs/libstdc++/stl/ChangeLog b/gnu/egcs/libstdc++/stl/ChangeLog index aa4aa155d7e..785fb587e82 100644 --- a/gnu/egcs/libstdc++/stl/ChangeLog +++ b/gnu/egcs/libstdc++/stl/ChangeLog @@ -1,3 +1,8 @@ +1999-11-06 Martin v. Löwis <loewis@informatik.hu-berlin.de> + + * bitset (class bitset): Declare reference as our friend. + * bitset: Include limits.h. + Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com) * gcc-2.95.2 Released. diff --git a/gnu/egcs/libstdc++/stl/bitset b/gnu/egcs/libstdc++/stl/bitset index e26845ed045..8b4f8b1a0f8 100644 --- a/gnu/egcs/libstdc++/stl/bitset +++ b/gnu/egcs/libstdc++/stl/bitset @@ -36,6 +36,7 @@ #include <stddef.h> // for size_t +#include <limits.h> // for CHAR_BIT #include <string> #include <stdexcept> // for invalid_argument, out_of_range, overflow_error #include <iostream.h> // for istream, ostream @@ -568,6 +569,8 @@ private: public: // bit reference: + class reference; + friend class reference; class reference { friend class bitset; |