summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1994-11-13 05:57:35 +0000
committerjkh <jkh@FreeBSD.org>1994-11-13 05:57:35 +0000
commitc21193cc8a2bb711bec796d1f309d49f4a8ca8cb (patch)
treeb43b7a13ac60d3aeb81d0f2ac7b8bdff55a069bd /gnu
parentc8beafaf61a7e1bf16aaef28f9112c7705f4f1f1 (diff)
downloadFreeBSD-src-c21193cc8a2bb711bec796d1f309d49f4a8ca8cb.zip
FreeBSD-src-c21193cc8a2bb711bec796d1f309d49f4a8ca8cb.tar.gz
Michael Reifenberger's libg++ port
Submitted by: mr
Diffstat (limited to 'gnu')
-rw-r--r--gnu/lib/libg++/Makefile16
-rw-r--r--gnu/lib/libg++/include/ACG.h12
-rw-r--r--gnu/lib/libg++/include/Complex.h27
-rw-r--r--gnu/lib/libg++/include/CursesW.h7
-rw-r--r--gnu/lib/libg++/include/DLList.h25
-rw-r--r--gnu/lib/libg++/include/Fix16.h58
-rw-r--r--gnu/lib/libg++/include/Fix24.h42
-rw-r--r--gnu/lib/libg++/include/MLCG.h2
-rw-r--r--gnu/lib/libg++/include/RNG.h2
-rw-r--r--gnu/lib/libg++/include/SLList.h21
-rw-r--r--gnu/lib/libg++/include/String.h144
-rw-r--r--gnu/lib/libg++/include/_G_config.h14
-rw-r--r--gnu/lib/libg++/include/bitprims.h2
-rw-r--r--gnu/lib/libg++/include/builtin.h15
-rw-r--r--gnu/lib/libg++/include/defines.h2
-rw-r--r--gnu/lib/libg++/include/iolibio.h10
-rw-r--r--gnu/lib/libg++/include/iomanip.h2
-rw-r--r--gnu/lib/libg++/include/iostream.h22
-rw-r--r--gnu/lib/libg++/include/libiberty.h7
-rw-r--r--gnu/lib/libg++/include/libio.h5
-rw-r--r--gnu/lib/libg++/include/libioP.h26
-rw-r--r--gnu/lib/libg++/include/streambuf.h5
-rw-r--r--gnu/lib/libg++/libg++/ACG.cc27
-rw-r--r--gnu/lib/libg++/libg++/DLList.cc8
-rw-r--r--gnu/lib/libg++/libg++/Fix.cc6
-rw-r--r--gnu/lib/libg++/libg++/Fix16.cc48
-rw-r--r--gnu/lib/libg++/libg++/Fix24.cc76
-rw-r--r--gnu/lib/libg++/libg++/MLCG.cc2
-rw-r--r--gnu/lib/libg++/libg++/Regex.cc9
-rw-r--r--gnu/lib/libg++/libg++/SLList.cc6
-rw-r--r--gnu/lib/libg++/libg++/String.cc57
-rw-r--r--gnu/lib/libg++/libg++/error.cc2
-rw-r--r--gnu/lib/libg++/libg++/timer.c1
-rw-r--r--gnu/lib/libg++/libio/fileops.c32
-rw-r--r--gnu/lib/libg++/libio/floatconv.c72
-rw-r--r--gnu/lib/libg++/libio/iofclose.c4
-rw-r--r--gnu/lib/libg++/libio/iofgetpos.c2
-rw-r--r--gnu/lib/libg++/libio/iofread.c2
-rw-r--r--gnu/lib/libg++/libio/iofscanf.c2
-rw-r--r--gnu/lib/libg++/libio/iofsetpos.c2
-rw-r--r--gnu/lib/libg++/libio/iostream.cc17
-rw-r--r--gnu/lib/libg++/libio/ioungetc.c2
-rw-r--r--gnu/lib/libg++/libio/iovfprintf.c14
-rw-r--r--gnu/lib/libg++/libio/iovfscanf.c4
-rw-r--r--gnu/lib/libg++/libio/stdiostream.cc13
-rw-r--r--gnu/lib/libg++/libio/strstream.cc2
46 files changed, 446 insertions, 430 deletions
diff --git a/gnu/lib/libg++/Makefile b/gnu/lib/libg++/Makefile
index 519c317..007dc4c 100644
--- a/gnu/lib/libg++/Makefile
+++ b/gnu/lib/libg++/Makefile
@@ -2,17 +2,19 @@
# $FreeBSD$
#
-SRCS= vasprintf.c strerror.c strsignal.c
-SRCS+= filedoalloc.c floatconv.c genops.c fileops.c iovfprintf.c iovfscanf.c ioignore.c iopadn.c iofgetpos.c iofread.c iofscanf.c iofsetpos.c iogetline.c ioprintf.c ioseekoff.c ioseekpos.c outfloat.c strops.c iofclose.c iopopen.c ioungetc.c builtinbuf.cc filebuf.cc fstream.cc indstream.cc isgetline.cc isgetsb.cc isscan.cc ioextend.cc iomanip.cc iostream.cc osform.cc procbuf.cc sbform.cc sbgetline.cc sbscan.cc stdiostream.cc stdstrbufs.cc stdstreams.cc stream.cc streambuf.cc strstream.cc PlotFile.cc SFile.cc parsestream.cc pfstream.cc editbuf.cc ioprims.c iostrerror.c cleanup.c
-SRCS+= AllocRing.cc Obstack.cc builtin.cc regex.cc Regex.cc String.cc Intdouble.cc Integer.cc Rational.cc Complex.cc Random.cc BitSet.cc BitString.cc LogNorm.cc SmplHist.cc SmplStat.cc Normal.cc NegExp.cc Weibull.cc Erlang.cc DiscUnif.cc Uniform.cc Poisson.cc HypGeom.cc Geom.cc Binomial.cc RNG.cc ACG.cc MLCG.cc RndInt.cc Fix.cc Fix16.cc Fix24.cc CursesW.cc GetOpt.cc new.cc chr.cc error.cc gcd.cc hash.cc lg.cc fmtq.cc ioob.cc pow.cc sqrt.cc str.cc timer.c math.cc compare.cc bitand.c bitany.c bitblt.c bitclear.c bitcopy.c bitcount.c bitinvert.c bitlcomp.c bitset1.c bitxor.c SLList.cc DLList.cc
-LIB= libg++
+SRCS= strerror.c strsignal.c
+SRCS+= filedoalloc.c floatconv.c genops.c fileops.c iovfprintf.c iovfscanf.c ioignore.c iopadn.c iofgetpos.c iofread.c iofscanf.c iofsetpos.c iogetdelim.c iogetline.c ioprintf.c ioseekoff.c ioseekpos.c outfloat.c strops.c iofclose.c iopopen.c ioungetc.c builtinbuf.cc filebuf.cc fstream.cc indstream.cc ioassign.cc ioextend.cc iomanip.cc iostream.cc isgetline.cc isgetsb.cc isscan.cc osform.cc procbuf.cc sbform.cc sbgetline.cc sbscan.cc stdiostream.cc stdstrbufs.cc stdstreams.cc stream.cc streambuf.cc strstream.cc PlotFile.cc SFile.cc parsestream.cc pfstream.cc editbuf.cc ioprims.c iostrerror.c cleanup.c
+SRCS+= AllocRing.cc Obstack.cc builtin.cc Regex.cc String.cc Intdouble.cc Integer.cc Rational.cc Complex.cc Random.cc BitSet.cc BitString.cc LogNorm.cc SmplHist.cc SmplStat.cc Normal.cc NegExp.cc Weibull.cc Erlang.cc DiscUnif.cc Uniform.cc Poisson.cc HypGeom.cc Geom.cc Binomial.cc RNG.cc ACG.cc MLCG.cc RndInt.cc Fix.cc Fix16.cc Fix24.cc CursesW.cc GetOpt.cc except.c new.cc chr.cc error.cc gcd.cc hash.cc lg.cc fmtq.cc ioob.cc pow.cc sqrt.cc str.cc timer.c math.cc compare.cc bitand.c bitany.c bitblt.c bitclear.c bitcopy.c bitcount.c bitinvert.c bitlcomp.c bitset1.c bitxor.c SLList.cc DLList.cc
+SRCS+= rx.c
+LIB= g++
NOMAN= noman
CFLAGS+= -nostdinc -I${.CURDIR}/include -I/usr/include
-CXXFLAGS+= -fexternal-templates
-.PATH: ${.CURDIR}/libiberty ${.CURDIR}/libio ${.CURDIR}/libg++
+CXXFLAGS+= -I${.CURDIR}/include -I/usr/include/g++ -I/usr/include -nostdinc++
+LDADD+= -lcurses
+.PATH: ${.CURDIR}/libiberty ${.CURDIR}/libio ${.CURDIR}/libg++ ${.CURDIR}/librx
beforeinstall:
@-if [ ! -d ${DESTDIR}/usr/include/g++ ]; then mkdir ${DESTDIR}/usr/include/g++; chown ${BINOWN}.${BINGRP} ${DESTDIR}/usr/include/g++; chmod 755 ${DESTDIR}/usr/include/g++; fi
- @(cd include ; for j in *.h; do cmp -s $$j ${DESTDIR}/usr/include/g++/$$j || install -c -o ${BINOWN} -g ${BINGRP} -m 444 $$j ${DESTDIR}/usr/include/$$j; done)
+ @(cd ${.CURDIR}/include ; for j in *.h; do cmp -s $$j ${DESTDIR}/usr/include/g++/$$j || install -c -o ${BINOWN} -g ${BINGRP} -m 444 $$j ${DESTDIR}/usr/include/g++/$$j; done)
.include <bsd.lib.mk>
diff --git a/gnu/lib/libg++/include/ACG.h b/gnu/lib/libg++/include/ACG.h
index d7101c7..8093800 100644
--- a/gnu/lib/libg++/include/ACG.h
+++ b/gnu/lib/libg++/include/ACG.h
@@ -42,26 +42,26 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
class ACG : public RNG {
- unsigned long initialSeed; // used to reset generator
+ _G_uint32_t initialSeed; // used to reset generator
int initialTableEntry;
- unsigned long *state;
- unsigned long *auxState;
+ _G_uint32_t *state;
+ _G_uint32_t *auxState;
short stateSize;
short auxSize;
- unsigned long lcgRecurr;
+ _G_uint32_t lcgRecurr;
short j;
short k;
protected:
public:
- ACG(unsigned long seed = 0, int size = 55);
+ ACG(_G_uint32_t seed = 0, int size = 55);
virtual ~ACG();
//
// Return a long-words word of random bits
//
- virtual unsigned long asLong();
+ virtual _G_uint32_t asLong();
virtual void reset();
};
diff --git a/gnu/lib/libg++/include/Complex.h b/gnu/lib/libg++/include/Complex.h
index 385ea606d7..9b7e378 100644
--- a/gnu/lib/libg++/include/Complex.h
+++ b/gnu/lib/libg++/include/Complex.h
@@ -87,33 +87,6 @@ Complex sqrt(const Complex& x);
istream& operator >> (istream& s, Complex& x);
ostream& operator << (ostream& s, const Complex& x);
-// other functions defined as inlines
-
-int operator == (const Complex& x, const Complex& y);
-int operator == (const Complex& x, double y);
-int operator != (const Complex& x, const Complex& y);
-int operator != (const Complex& x, double y);
-
-Complex operator - (const Complex& x);
-Complex conj(const Complex& x);
-Complex operator + (const Complex& x, const Complex& y);
-Complex operator + (const Complex& x, double y);
-Complex operator + (double x, const Complex& y);
-Complex operator - (const Complex& x, const Complex& y);
-Complex operator - (const Complex& x, double y);
-Complex operator - (double x, const Complex& y);
-Complex operator * (const Complex& x, const Complex& y);
-Complex operator * (const Complex& x, double y);
-Complex operator * (double x, const Complex& y);
-
-double real(const Complex& x);
-double imag(const Complex& x);
-double abs(const Complex& x);
-double norm(const Complex& x);
-double arg(const Complex& x);
-
-Complex polar(double r, double t = 0.0);
-
// inline members
diff --git a/gnu/lib/libg++/include/CursesW.h b/gnu/lib/libg++/include/CursesW.h
index 4f367fd..1df2e8a 100644
--- a/gnu/lib/libg++/include/CursesW.h
+++ b/gnu/lib/libg++/include/CursesW.h
@@ -25,7 +25,11 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#include <_G_config.h>
#if _G_HAVE_CURSES
+// Even many system which mostly have C++-ready header files,
+// do not have C++-ready curses.h.
+extern "C" {
#include <curses.h>
+}
/* SCO 3.2v4 curses.h includes term.h, which defines lines as a macro.
Undefine it here, because CursesWindow uses lines as a method. */
@@ -148,8 +152,9 @@ inline int (winch)(WINDOW* win) { return winch(win); }
/* deal with conflicting macros in ncurses.h which is SYSV based*/
#ifdef box
-inline (box)(WINDOW* win, chtype v, chtype h) {return box(win, v, h); }
+inline _G_box(WINDOW* win, chtype v, chtype h) {return box(win, v, h); }
#undef box
+inline box(WINDOW* win, chtype v, chtype h) {return _G_box(win, v, h); }
#endif
#ifdef scroll
inline (scroll)(WINDOW* win) { return scroll(win); }
diff --git a/gnu/lib/libg++/include/DLList.h b/gnu/lib/libg++/include/DLList.h
index 0c3adc2..36f73bc 100644
--- a/gnu/lib/libg++/include/DLList.h
+++ b/gnu/lib/libg++/include/DLList.h
@@ -66,9 +66,9 @@ class BaseDLList {
int empty() const { return h == 0; }
int length() const;
void clear();
- void error(const char* msg);
- int owns(Pix p);
- int OK();
+ void error(const char* msg) const;
+ int owns(Pix p) const;
+ int OK() const;
void del(Pix& p, int dir = 1);
void del_after(Pix& p);
void del_front();
@@ -104,6 +104,13 @@ class DLList : public BaseDLList {
if (h == 0) error("rear: empty list");
return ((DLNode<T>*)h->bk)->hd;
}
+ const T& front() const {
+ if (h == 0) error("front: empty list");
+ return ((DLNode<T>*)h)->hd; }
+ const T& rear() const {
+ if (h == 0) error("rear: empty list");
+ return ((DLNode<T>*)h->bk)->hd;
+ }
T remove_front() { T dst; BaseDLList::remove_front(&dst); return dst; }
T remove_rear() { T dst; BaseDLList::remove_rear(&dst); return dst; }
@@ -111,11 +118,15 @@ class DLList : public BaseDLList {
if (p == 0) error("null Pix");
return ((DLNode<T>*)p)->hd;
}
- Pix first() { return Pix(h); }
- Pix last() { return (h == 0)? 0 : Pix(h->bk); }
- void next(Pix& p)
+ const T& operator () (Pix p) const {
+ if (p == 0) error("null Pix");
+ return ((DLNode<T>*)p)->hd;
+ }
+ Pix first() const { return Pix(h); }
+ Pix last() const { return (h == 0) ? 0 : Pix(h->bk); }
+ void next(Pix& p) const
{ p = (p == 0 || p == h->bk)? 0 : Pix(((DLNode<T>*)p)->fd); }
- void prev(Pix& p)
+ void prev(Pix& p) const
{ p = (p == 0 || p == h)? 0 : Pix(((DLNode<T>*)p)->bk); }
Pix ins_after(Pix p, const T& item)
{return BaseDLList::ins_after(p, &item); }
diff --git a/gnu/lib/libg++/include/Fix16.h b/gnu/lib/libg++/include/Fix16.h
index 36728b4..e598113 100644
--- a/gnu/lib/libg++/include/Fix16.h
+++ b/gnu/lib/libg++/include/Fix16.h
@@ -40,11 +40,11 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#define Fix16_min (-1.)
-#define Fix32_fs ((double)((unsigned long)(1 << 31)))
+#define Fix32_fs ((double)((_G_uint32_t)(1 << 31)))
-#define Fix32_msb ((unsigned long)(1 << 31))
-#define Fix32_m_max ((long)((1 << 31) - 1))
-#define Fix32_m_min ((long)(1 << 31))
+#define Fix32_msb ((_G_uint32_t)(1 << 31))
+#define Fix32_m_max ((_G_int32_t)((1 << 31) - 1))
+#define Fix32_m_min ((_G_int32_t)(1 << 31))
#define Fix32_mult Fix32_fs
#define Fix32_div (1./Fix32_fs)
@@ -135,12 +135,12 @@ class Fix32
{
friend class Fix16;
- long m;
+ _G_int32_t m;
- long round(double d);
- long assign(double d);
+ _G_int32_t round(double d);
+ _G_int32_t assign(double d);
- Fix32(long i);
+ Fix32(_G_int32_t i);
operator double() const;
@@ -155,8 +155,8 @@ public:
Fix32& operator = (const Fix16& f);
Fix32& operator = (double d);
- friend long& mantissa(Fix32& f);
- friend const long& mantissa(const Fix32& f);
+ friend _G_int32_t& mantissa(Fix32& f);
+ friend const _G_int32_t& mantissa(const Fix32& f);
friend double value(const Fix32& f);
Fix32 operator + () const;
@@ -188,8 +188,8 @@ public:
friend istream& operator >> (istream& s, Fix32& f);
friend ostream& operator << (ostream& s, const Fix32& f);
- void overflow(long& i) const;
- void range_error(long& i) const;
+ void overflow(_G_int32_t& i) const;
+ void range_error(_G_int32_t& i) const;
friend Fix32 operator * (const Fix32& f, int g);
friend Fix32 operator * (int g, const Fix32& f);
@@ -199,7 +199,7 @@ public:
// active error handler declarations
typedef void (*Fix16_peh)(short&);
-typedef void (*Fix32_peh)(long&);
+typedef void (*Fix32_peh)(_G_int32_t&);
extern Fix16_peh Fix16_overflow_handler;
extern Fix32_peh Fix32_overflow_handler;
@@ -231,11 +231,11 @@ extern void
Fix16_abort(short&);
extern void
- Fix32_ignore(long&),
- Fix32_overflow_saturate(long&),
- Fix32_overflow_warning_saturate(long&),
- Fix32_warning(long&),
- Fix32_abort(long&);
+ Fix32_ignore(_G_int32_t&),
+ Fix32_overflow_saturate(_G_int32_t&),
+ Fix32_overflow_warning_saturate(_G_int32_t&),
+ Fix32_warning(_G_int32_t&),
+ Fix32_abort(_G_int32_t&);
inline Fix16::~Fix16() {}
@@ -294,7 +294,7 @@ inline Fix32::Fix32()
m = 0;
}
-inline Fix32::Fix32(long i)
+inline Fix32::Fix32(_G_int32_t i)
{
m = i;
}
@@ -312,7 +312,7 @@ inline Fix32::Fix32(const Fix32& f)
inline Fix32::Fix32(const Fix16& f)
{
- m = long(f.m) << 16;
+ m = _G_int32_t(f.m) << 16;
}
inline Fix32::Fix32(double d)
@@ -340,7 +340,7 @@ inline Fix32& Fix32::operator=(const Fix32& f)
inline Fix32& Fix32::operator=(const Fix16& f)
{
- m = long(f.m) << 16;
+ m = _G_int32_t(f.m) << 16;
return *this;
}
@@ -393,7 +393,7 @@ inline Fix16 operator-(const Fix16& f, const Fix16& g)
inline Fix32 operator*(const Fix16& f, const Fix16& g)
{
- return Fix32( long( long(f.m) * long(g.m) << 1));
+ return Fix32( _G_int32_t( _G_int32_t(f.m) * _G_int32_t(g.m) << 1));
}
inline Fix16 operator<<(const Fix16& a, int b)
@@ -498,17 +498,17 @@ inline Fix16& Fix16::operator*=(int g)
inline Fix32::~Fix32() {}
-inline long Fix32::round(double d)
+inline _G_int32_t Fix32::round(double d)
{
- return long( (d >= 0)? d + 0.5 : d - 0.5);
+ return _G_int32_t( (d >= 0)? d + 0.5 : d - 0.5);
}
-inline long& mantissa(Fix32& f)
+inline _G_int32_t& mantissa(Fix32& f)
{
return f.m;
}
-inline const long& mantissa(const Fix32& f)
+inline const _G_int32_t& mantissa(const Fix32& f)
{
return f.m;
}
@@ -530,7 +530,7 @@ inline Fix32 Fix32::operator-() const
inline Fix32 operator+(const Fix32& f, const Fix32& g)
{
- long sum = f.m + g.m;
+ _G_int32_t sum = f.m + g.m;
if ( (f.m ^ sum) & (g.m ^ sum) & Fix32_msb )
f.overflow(sum);
return sum;
@@ -538,7 +538,7 @@ inline Fix32 operator+(const Fix32& f, const Fix32& g)
inline Fix32 operator-(const Fix32& f, const Fix32& g)
{
- long sum = f.m - g.m;
+ _G_int32_t sum = f.m - g.m;
if ( (f.m ^ sum) & (-g.m ^ sum) & Fix32_msb )
f.overflow(sum);
return sum;
@@ -630,7 +630,7 @@ inline ostream& operator<<(ostream& s, const Fix32& f)
inline Fix32 operator*(const Fix32& f, int g)
{
- return Fix32(long(f.m * g));
+ return Fix32(_G_int32_t(f.m * g));
}
inline Fix32 operator*(int g, const Fix32& f)
diff --git a/gnu/lib/libg++/include/Fix24.h b/gnu/lib/libg++/include/Fix24.h
index 56d1191..5db346e 100644
--- a/gnu/lib/libg++/include/Fix24.h
+++ b/gnu/lib/libg++/include/Fix24.h
@@ -29,8 +29,8 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
// extra type definitions
typedef struct {
- long u;
- unsigned long l;
+ _G_int32_t u;
+ _G_uint32_t l;
} twolongs;
// constant definitions
@@ -45,7 +45,7 @@ static const double
Fix24_max = 1. - .5/Fix24_fs,
Fix24_min = -1.;
-static const unsigned long
+static const _G_uint32_t
Fix24_msb = 0x80000000L,
Fix24_lsb = 0x00000100L,
Fix24_m_max = 0x7fffff00L,
@@ -74,9 +74,9 @@ class Fix24
{
friend class Fix48;
- long m;
+ _G_int32_t m;
- long assign(double d);
+ _G_int32_t assign(double d);
operator double() const;
Fix24(long i);
Fix24(int i);
@@ -94,8 +94,8 @@ public:
Fix24& operator=(double d);
Fix24& operator=(const Fix48& f);
- friend long& mantissa(Fix24& f);
- friend const long& mantissa(const Fix24& f);
+ friend _G_int32_t& mantissa(Fix24& f);
+ friend const _G_int32_t& mantissa(const Fix24& f);
friend double value(const Fix24& f);
Fix24 operator + () const;
@@ -129,8 +129,8 @@ public:
friend istream& operator >> (istream& s, Fix24& f);
friend ostream& operator << (ostream& s, const Fix24& f);
- void overflow(long&) const;
- void range_error(long&) const;
+ void overflow(_G_int32_t&) const;
+ void range_error(_G_int32_t&) const;
};
@@ -200,7 +200,7 @@ public:
// active error handler declarations
-typedef void (*Fix24_peh)(long&);
+typedef void (*Fix24_peh)(_G_int32_t&);
typedef void (*Fix48_peh)(twolongs&);
extern Fix24_peh Fix24_overflow_handler;
@@ -226,11 +226,11 @@ extern Fix48_peh set_Fix48_range_error_handler(Fix48_peh);
extern void set_range_error_handler(Fix24_peh, Fix48_peh);
extern void
- Fix24_ignore(long&),
- Fix24_overflow_saturate(long&),
- Fix24_overflow_warning_saturate(long&),
- Fix24_warning(long&),
- Fix24_abort(long&);
+ Fix24_ignore(_G_int32_t&),
+ Fix24_overflow_saturate(_G_int32_t&),
+ Fix24_overflow_warning_saturate(_G_int32_t&),
+ Fix24_warning(_G_int32_t&),
+ Fix24_abort(_G_int32_t&);
extern void
Fix48_ignore(twolongs&),
@@ -295,12 +295,12 @@ inline Fix24& Fix24::operator=(const Fix48& f)
return *this;
}
-inline long& mantissa(Fix24& f)
+inline _G_int32_t& mantissa(Fix24& f)
{
return f.m;
}
-inline const long& mantissa(const Fix24& f)
+inline const _G_int32_t& mantissa(const Fix24& f)
{
return f.m;
}
@@ -322,7 +322,7 @@ inline Fix24 Fix24::operator-() const
inline Fix24 operator+(const Fix24& f, const Fix24& g)
{
- long sum = f.m + g.m;
+ _G_int32_t sum = f.m + g.m;
if ( (f.m ^ sum) & (g.m ^ sum) & Fix24_msb )
f.overflow(sum);
return sum;
@@ -330,7 +330,7 @@ inline Fix24 operator+(const Fix24& f, const Fix24& g)
inline Fix24 operator-(const Fix24& f, const Fix24& g)
{
- long sum = f.m - g.m;
+ _G_int32_t sum = f.m - g.m;
if ( (f.m ^ sum) & (-g.m ^ sum) & Fix24_msb )
f.overflow(sum);
return sum;
@@ -353,7 +353,7 @@ inline Fix24 operator<<(const Fix24& a, int b)
inline Fix24 operator>>(const Fix24& a, int b)
{
- return (a.m >> b) & (long)0xffffff00;
+ return (a.m >> b) & ~0xff;
}
inline Fix24& Fix24:: operator+=(const Fix24& f)
@@ -448,7 +448,7 @@ inline Fix48:: operator double() const
* m.u is signed and m.l is unsigned.
*/
return (m.u >= 0)? Fix48_div_u * m.u + Fix48_div_l * m.l :
- (Fix48_div_u * ((unsigned long)(m.u & 0xffffff00))
+ (Fix48_div_u * ((_G_uint32_t)(m.u & 0xffffff00))
+ Fix48_div_l * m.l) - 2;
}
diff --git a/gnu/lib/libg++/include/MLCG.h b/gnu/lib/libg++/include/MLCG.h
index 8f104a1..8fa08a8 100644
--- a/gnu/lib/libg++/include/MLCG.h
+++ b/gnu/lib/libg++/include/MLCG.h
@@ -41,7 +41,7 @@ public:
//
// Return a long-words word of random bits
//
- virtual unsigned long asLong();
+ virtual _G_uint32_t asLong();
virtual void reset();
_G_int32_t seed1();
void seed1(_G_int32_t);
diff --git a/gnu/lib/libg++/include/RNG.h b/gnu/lib/libg++/include/RNG.h
index 43d95b7..b924fb6 100644
--- a/gnu/lib/libg++/include/RNG.h
+++ b/gnu/lib/libg++/include/RNG.h
@@ -46,7 +46,7 @@ public:
//
// Return a long-words word of random bits
//
- virtual unsigned long asLong() = 0;
+ virtual _G_uint32_t asLong() = 0;
virtual void reset() = 0;
//
// Return random bits converted to either a float or a double
diff --git a/gnu/lib/libg++/include/SLList.h b/gnu/lib/libg++/include/SLList.h
index c613674..8c133d7 100644
--- a/gnu/lib/libg++/include/SLList.h
+++ b/gnu/lib/libg++/include/SLList.h
@@ -64,10 +64,10 @@ class BaseSLList {
void clear();
Pix prepend(BaseSLNode*);
Pix append(BaseSLNode*);
- int OK();
- void error(const char* msg);
+ int OK() const;
+ void error(const char* msg) const;
void del_after(Pix p);
- int owns(Pix p);
+ int owns(Pix p) const;
void del_front();
};
@@ -95,9 +95,12 @@ public:
T& operator () (Pix p) {
if (p == 0) error("null Pix");
return ((SLNode<T>*)(p))->hd; }
- inline Pix first() { return (last == 0)? 0 : Pix(last->tl); }
- void next(Pix& p)
- { p = (p == 0 || p == last)? 0 : Pix(((SLNode<T>*)(p))->tl); }
+ const T& operator () (Pix p) const {
+ if (p == 0) error("null Pix");
+ return ((SLNode<T>*)(p))->hd; }
+ inline Pix first() const { return (last == 0) ? 0 : Pix(last->tl); }
+ void next(Pix& p) const
+ { p = (p == 0 || p == last) ? 0 : Pix(((SLNode<T>*)(p))->tl); }
Pix ins_after(Pix p, const T& item)
{ return BaseSLList::ins_after(p, &item); }
void join(SLList<T>& a) { BaseSLList::join(a); }
@@ -108,6 +111,12 @@ public:
T& rear() {
if (last == 0) error("rear: empty list");
return ((SLNode<T>*)last)->hd; }
+ const T& front() const {
+ if (last == 0) error("front: empty list");
+ return ((SLNode<T>*)last->tl)->hd; }
+ const T& rear() const {
+ if (last == 0) error("rear: empty list");
+ return ((SLNode<T>*)last)->hd; }
int remove_front(T& x) { return BaseSLList::remove_front(&x); }
T remove_front() { T dst; BaseSLList::remove_front(&dst, 1); return dst; }
};
diff --git a/gnu/lib/libg++/include/String.h b/gnu/lib/libg++/include/String.h
index 9537ba6..95b2bdf 100644
--- a/gnu/lib/libg++/include/String.h
+++ b/gnu/lib/libg++/include/String.h
@@ -39,7 +39,6 @@ struct StrRep // internal String representations
StrRep* Salloc(StrRep*, const char*, int, int);
StrRep* Scopy(StrRep*, const StrRep*);
-StrRep* Sresize(StrRep*, int);
StrRep* Scat(StrRep*, const char*, int, const char*, int);
StrRep* Scat(StrRep*, const char*, int,const char*,int, const char*,int);
StrRep* Sprepend(StrRep*, const char*, int);
@@ -155,50 +154,50 @@ public:
// procedural versions:
// concatenate first 2 args, store result in last arg
- friend void cat(const String&, const String&, String&);
- friend void cat(const String&, const SubString&, String&);
- friend void cat(const String&, const char*, String&);
- friend void cat(const String&, char, String&);
+ friend inline void cat(const String&, const String&, String&);
+ friend inline void cat(const String&, const SubString&, String&);
+ friend inline void cat(const String&, const char*, String&);
+ friend inline void cat(const String&, char, String&);
- friend void cat(const SubString&, const String&, String&);
- friend void cat(const SubString&, const SubString&, String&);
- friend void cat(const SubString&, const char*, String&);
- friend void cat(const SubString&, char, String&);
+ friend inline void cat(const SubString&, const String&, String&);
+ friend inline void cat(const SubString&, const SubString&, String&);
+ friend inline void cat(const SubString&, const char*, String&);
+ friend inline void cat(const SubString&, char, String&);
- friend void cat(const char*, const String&, String&);
- friend void cat(const char*, const SubString&, String&);
- friend void cat(const char*, const char*, String&);
- friend void cat(const char*, char, String&);
+ friend inline void cat(const char*, const String&, String&);
+ friend inline void cat(const char*, const SubString&, String&);
+ friend inline void cat(const char*, const char*, String&);
+ friend inline void cat(const char*, char, String&);
// double concatenation, by request. (yes, there are too many versions,
// but if one is supported, then the others should be too...)
// Concatenate first 3 args, store in last arg
- friend void cat(const String&,const String&, const String&,String&);
- friend void cat(const String&,const String&,const SubString&,String&);
- friend void cat(const String&,const String&, const char*, String&);
- friend void cat(const String&,const String&, char, String&);
- friend void cat(const String&,const SubString&,const String&,String&);
- friend void cat(const String&,const SubString&,const SubString&,String&);
- friend void cat(const String&,const SubString&, const char*, String&);
- friend void cat(const String&,const SubString&, char, String&);
- friend void cat(const String&,const char*, const String&, String&);
- friend void cat(const String&,const char*, const SubString&, String&);
- friend void cat(const String&,const char*, const char*, String&);
- friend void cat(const String&,const char*, char, String&);
-
- friend void cat(const char*, const String&, const String&,String&);
- friend void cat(const char*,const String&,const SubString&,String&);
- friend void cat(const char*,const String&, const char*, String&);
- friend void cat(const char*,const String&, char, String&);
- friend void cat(const char*,const SubString&,const String&,String&);
- friend void cat(const char*,const SubString&,const SubString&,String&);
- friend void cat(const char*,const SubString&, const char*, String&);
- friend void cat(const char*,const SubString&, char, String&);
- friend void cat(const char*,const char*, const String&, String&);
- friend void cat(const char*,const char*, const SubString&, String&);
- friend void cat(const char*,const char*, const char*, String&);
- friend void cat(const char*,const char*, char, String&);
+ friend inline void cat(const String&,const String&, const String&,String&);
+ friend inline void cat(const String&,const String&,const SubString&,String&);
+ friend inline void cat(const String&,const String&, const char*, String&);
+ friend inline void cat(const String&,const String&, char, String&);
+ friend inline void cat(const String&,const SubString&,const String&,String&);
+ inline friend void cat(const String&,const SubString&,const SubString&,String&);
+ friend inline void cat(const String&,const SubString&, const char*, String&);
+ friend inline void cat(const String&,const SubString&, char, String&);
+ friend inline void cat(const String&,const char*, const String&, String&);
+ friend inline void cat(const String&,const char*, const SubString&, String&);
+ friend inline void cat(const String&,const char*, const char*, String&);
+ friend inline void cat(const String&,const char*, char, String&);
+
+ friend inline void cat(const char*, const String&, const String&,String&);
+ friend inline void cat(const char*,const String&,const SubString&,String&);
+ friend inline void cat(const char*,const String&, const char*, String&);
+ friend inline void cat(const char*,const String&, char, String&);
+ friend inline void cat(const char*,const SubString&,const String&,String&);
+ friend inline void cat(const char*,const SubString&,const SubString&,String&);
+ friend inline void cat(const char*,const SubString&, const char*, String&);
+ friend inline void cat(const char*,const SubString&, char, String&);
+ friend inline void cat(const char*,const char*, const String&, String&);
+ friend inline void cat(const char*,const char*, const SubString&, String&);
+ friend inline void cat(const char*,const char*, const char*, String&);
+ friend inline void cat(const char*,const char*, char, String&);
// searching & matching
@@ -327,10 +326,10 @@ public:
// simple builtin transformations
- friend String reverse(const String& x);
- friend String upcase(const String& x);
- friend String downcase(const String& x);
- friend String capitalize(const String& x);
+ friend inline String reverse(const String& x);
+ friend inline String upcase(const String& x);
+ friend inline String downcase(const String& x);
+ friend inline String capitalize(const String& x);
// in-place versions of above
@@ -342,6 +341,7 @@ public:
// element extraction
char& operator [] (int i);
+ const char& operator [] (int i) const;
char elem(int i) const;
char firstchar() const;
char lastchar() const;
@@ -354,7 +354,7 @@ public:
// IO
- friend ostream& operator<<(ostream& s, const String& x);
+ friend inline ostream& operator<<(ostream& s, const String& x);
friend ostream& operator<<(ostream& s, const SubString& x);
friend istream& operator>>(istream& s, String& x);
@@ -395,64 +395,12 @@ int fcompare(const String& x, const String& y); // ignore case
extern StrRep _nilStrRep;
extern String _nilString;
-// other inlines
-
-String operator + (const String& x, const String& y);
-String operator + (const String& x, const SubString& y);
-String operator + (const String& x, const char* y);
-String operator + (const String& x, char y);
-String operator + (const SubString& x, const String& y);
-String operator + (const SubString& x, const SubString& y);
-String operator + (const SubString& x, const char* y);
-String operator + (const SubString& x, char y);
-String operator + (const char* x, const String& y);
-String operator + (const char* x, const SubString& y);
-
-int operator==(const String& x, const String& y);
-int operator!=(const String& x, const String& y);
-int operator> (const String& x, const String& y);
-int operator>=(const String& x, const String& y);
-int operator< (const String& x, const String& y);
-int operator<=(const String& x, const String& y);
-int operator==(const String& x, const SubString& y);
-int operator!=(const String& x, const SubString& y);
-int operator> (const String& x, const SubString& y);
-int operator>=(const String& x, const SubString& y);
-int operator< (const String& x, const SubString& y);
-int operator<=(const String& x, const SubString& y);
-int operator==(const String& x, const char* t);
-int operator!=(const String& x, const char* t);
-int operator> (const String& x, const char* t);
-int operator>=(const String& x, const char* t);
-int operator< (const String& x, const char* t);
-int operator<=(const String& x, const char* t);
-int operator==(const SubString& x, const String& y);
-int operator!=(const SubString& x, const String& y);
-int operator> (const SubString& x, const String& y);
-int operator>=(const SubString& x, const String& y);
-int operator< (const SubString& x, const String& y);
-int operator<=(const SubString& x, const String& y);
-int operator==(const SubString& x, const SubString& y);
-int operator!=(const SubString& x, const SubString& y);
-int operator> (const SubString& x, const SubString& y);
-int operator>=(const SubString& x, const SubString& y);
-int operator< (const SubString& x, const SubString& y);
-int operator<=(const SubString& x, const SubString& y);
-int operator==(const SubString& x, const char* t);
-int operator!=(const SubString& x, const char* t);
-int operator> (const SubString& x, const char* t);
-int operator>=(const SubString& x, const char* t);
-int operator< (const SubString& x, const char* t);
-int operator<=(const SubString& x, const char* t);
-
-
// status reports, needed before defining other things
inline unsigned int String::length() const { return rep->len; }
inline int String::empty() const { return rep->len == 0; }
inline const char* String::chars() const { return &(rep->s[0]); }
inline int String::allocation() const { return rep->sz; }
-inline void String::alloc(int newsize) { rep = Sresize(rep, newsize); }
inline unsigned int SubString::length() const { return len; }
inline int SubString::empty() const { return len == 0; }
@@ -948,6 +896,12 @@ inline char& String::operator [] (int i)
return rep->s[i];
}
+inline const char& String::operator [] (int i) const
+{
+ if (((unsigned)i) >= length()) error("invalid index");
+ return rep->s[i];
+}
+
inline char String::elem (int i) const
{
if (((unsigned)i) >= length()) error("invalid index");
diff --git a/gnu/lib/libg++/include/_G_config.h b/gnu/lib/libg++/include/_G_config.h
index 2b73e90..1e5e28d 100644
--- a/gnu/lib/libg++/include/_G_config.h
+++ b/gnu/lib/libg++/include/_G_config.h
@@ -1,9 +1,10 @@
/* AUTOMATICALLY GENERATED; DO NOT EDIT! */
+#include <sys/types.h>
#ifndef _G_config_h
#define _G_config_h
-#define _G_LIB_VERSION "0.65"
+#define _G_LIB_VERSION "0.66"
#define _G_NAMES_HAVE_UNDERSCORE 1
-#define _G_VTABLE_LABEL_HAS_LENGTH 0
+#define _G_VTABLE_LABEL_HAS_LENGTH 1
#define _G_VTABLE_LABEL_PREFIX "__vt$"
#define _G_HAVE_ST_BLKSIZE 1
typedef unsigned long _G_clock_t;
@@ -31,7 +32,7 @@ typedef unsigned long _G_uid_t;
#endif
typedef __WCHAR_TYPE__ _G_wchar_t;
typedef int _G_ssize_t;
-typedef int _G_wint_t;
+typedef int /* default */ _G_wint_t;
typedef char* /* default */ _G_va_list;
#define _G_signal_return_type void
#define _G_sprintf_return_type int
@@ -55,9 +56,12 @@ typedef unsigned _G_uint64_t;
#else
#define _G_ARGS(ARGLIST) ()
#endif
-#if defined (__GNUG__) && defined (__STRICT_ANSI__)
+#if !defined (__GNUG__) || defined (__STRICT_ANSI__)
#define _G_NO_NRV
#endif
+#if !defined (__GNUG__)
+#define _G_NO_EXTERN_TEMPLATES
+#endif
#define _G_HAVE_ATEXIT 1
#define _G_HAVE_SYS_RESOURCE 0
#define _G_HAVE_SYS_SOCKET 1
@@ -66,5 +70,5 @@ typedef unsigned _G_uint64_t;
#define _G_HAVE_DIRENT 1
#define _G_HAVE_CURSES 1
#define _G_MATH_H_INLINES 0
-#define _G_HAVE_BOOL 0
+#define _G_HAVE_BOOL 1
#endif /* !_G_config_h */
diff --git a/gnu/lib/libg++/include/bitprims.h b/gnu/lib/libg++/include/bitprims.h
index 771acd9..24b3051 100644
--- a/gnu/lib/libg++/include/bitprims.h
+++ b/gnu/lib/libg++/include/bitprims.h
@@ -122,4 +122,4 @@ extern void _BS_xor __P((_BS_word*,int, const _BS_word*,int, _BS_size_t));
}
#endif
-#endif _BS_PRIMS
+#endif /* !_BS_PRIMS */
diff --git a/gnu/lib/libg++/include/builtin.h b/gnu/lib/libg++/include/builtin.h
index 7f8299c..73bb431 100644
--- a/gnu/lib/libg++/include/builtin.h
+++ b/gnu/lib/libg++/include/builtin.h
@@ -64,21 +64,6 @@ extern two_arg_error_handler_t
set_lib_error_handler(two_arg_error_handler_t f);
-double abs(double arg);
-float abs(float arg);
-short abs(short arg);
-long abs(long arg);
-int sign(long arg);
-int sign(double arg);
-long sqr(long arg);
-double sqr(double arg);
-int even(long arg);
-int odd(long arg);
-long lcm(long x, long y);
-void (setbit)(long& x, long b);
-void clearbit(long& x, long b);
-int testbit(long x, long b);
-
#if !defined(IV)
#if ! _G_MATH_H_INLINES /* hpux and SCO define this in math.h */
diff --git a/gnu/lib/libg++/include/defines.h b/gnu/lib/libg++/include/defines.h
index ddb76e9..0f2fb3b 100644
--- a/gnu/lib/libg++/include/defines.h
+++ b/gnu/lib/libg++/include/defines.h
@@ -30,4 +30,6 @@ typedef void fvoid_t();
typedef _G_wint_t wint_t;
#endif
+enum capacity { default_size, reserve };
+
#endif
diff --git a/gnu/lib/libg++/include/iolibio.h b/gnu/lib/libg++/include/iolibio.h
index 2a7c145..08040fa 100644
--- a/gnu/lib/libg++/include/iolibio.h
+++ b/gnu/lib/libg++/include/iolibio.h
@@ -3,6 +3,10 @@
/* These emulate stdio functionality, but with a different name
(_IO_ungetc instead of ungetc), and using _IO_FILE instead of FILE. */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
extern int _IO_fclose __P((_IO_FILE*));
extern _IO_FILE *_IO_fdopen __P((int, const char*));
extern int _IO_fflush __P((_IO_FILE*));
@@ -17,6 +21,7 @@ extern _IO_size_t _IO_fwrite __P((const void*,
_IO_size_t, _IO_size_t, _IO_FILE*));
extern char* _IO_gets __P((char*));
extern void _IO_perror __P((const char*));
+extern int _IO_printf __P((const char*, ...));
extern int _IO_puts __P((const char*));
extern int _IO_scanf __P((const char*, ...));
extern void _IO_setbuffer __P((_IO_FILE *, char*, _IO_size_t));
@@ -30,8 +35,6 @@ extern int _IO_vsprintf __P((char*, const char*, _IO_va_list));
#define _IO_pos_BAD ((_IO_fpos_t)(-1))
#endif
#define _IO_clearerr(FP) ((FP)->_flags &= ~(_IO_ERR_SEEN|_IO_EOF_SEEN))
-#define _IO_feof(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
-#define _IO_ferror(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
#define _IO_fseek(__fp, __offset, __whence) \
(_IO_seekoff(__fp, __offset, (_IO_off_t)(__whence)) == _IO_pos_BAD ? EOF : 0)
#define _IO_rewind(FILE) (void)_IO_seekoff(FILE, 0, 0)
@@ -44,3 +47,6 @@ extern _IO_FILE* _IO_popen __P((const char*, const char*));
#define _IO_setbuf(_FP, _BUF) _IO_setbuffer(_FP, _BUF, _IO_BUFSIZ)
#define _IO_setlinebuf(_FP) _IO_setvbuf(_FP, NULL, 1, 0)
+#ifdef __cplusplus
+}
+#endif
diff --git a/gnu/lib/libg++/include/iomanip.h b/gnu/lib/libg++/include/iomanip.h
index cab4b97..bf3d6f4 100644
--- a/gnu/lib/libg++/include/iomanip.h
+++ b/gnu/lib/libg++/include/iomanip.h
@@ -130,7 +130,7 @@ public:
omanip(ostream& (*f)(ostream&, TP), TP a) : _f(f), _a(a) {}
//
friend
- ostream& operator<<(ostream& o, omanip<TP>& m)
+ ostream& operator<<(ostream& o, const omanip<TP>& m)
{ return (*m._f)(o, m._a); }
};
diff --git a/gnu/lib/libg++/include/iostream.h b/gnu/lib/libg++/include/iostream.h
index 7348ce2..e370be2 100644
--- a/gnu/lib/libg++/include/iostream.h
+++ b/gnu/lib/libg++/include/iostream.h
@@ -92,6 +92,7 @@ class ostream : virtual public ios
#endif
ostream& operator<<(double n);
ostream& operator<<(float n) { return operator<<((double)n); }
+ ostream& operator<<(long double n) { return operator<<((double)n); }
ostream& operator<<(__omanip func) { return (*func)(*this); }
ostream& operator<<(__manip func) {(*func)(*this); return *this;}
ostream& operator<<(streambuf*);
@@ -103,6 +104,7 @@ class ostream : virtual public ios
class istream : virtual public ios
{
// NOTE: If fields are changed, you must fix _fake_istream in stdstreams.C!
+protected:
_IO_size_t _gcount;
int _skip_ws();
@@ -198,22 +200,32 @@ class istream : virtual public ios
#endif
istream& operator>>(float&);
istream& operator>>(double&);
+ istream& operator>>(long double&);
istream& operator>>( __manip func) {(*func)(*this); return *this;}
istream& operator>>(__imanip func) { return (*func)(*this); }
istream& operator>>(streambuf*);
};
-
class iostream : public istream, public ostream
{
- _IO_size_t _gcount;
public:
- iostream() { _gcount = 0; }
+ iostream() { }
iostream(streambuf* sb, ostream*tied=NULL);
};
-extern istream cin;
-extern ostream cout, cerr, clog; // clog->rdbuf() == cerr->rdbuf()
+class _IO_istream_withassign : public istream {
+public:
+ _IO_istream_withassign& operator=(istream&);
+};
+
+class _IO_ostream_withassign : public ostream {
+public:
+ _IO_ostream_withassign& operator=(ostream&);
+};
+
+extern _IO_istream_withassign cin;
+// clog->rdbuf() == cerr->rdbuf()
+extern _IO_ostream_withassign cout, cerr, clog;
struct Iostream_init { } ; // Compatibility hack for AT&T library.
diff --git a/gnu/lib/libg++/include/libiberty.h b/gnu/lib/libg++/include/libiberty.h
index 9854b4c..0a71c52 100644
--- a/gnu/lib/libg++/include/libiberty.h
+++ b/gnu/lib/libg++/include/libiberty.h
@@ -61,6 +61,13 @@ extern int strtoerrno PARAMS ((const char *));
extern int signo_max PARAMS ((void));
+/* Return a signal message string for a signal number
+ (e.g., strsignal (SIGHUP) returns something like "Hangup"). */
+/* This is commented out as it can conflict with one in system headers.
+ We still document its existence though. */
+
+/*extern const char *strsignal PARAMS ((int));*/
+
/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns
"SIGHUP"). */
diff --git a/gnu/lib/libg++/include/libio.h b/gnu/lib/libg++/include/libio.h
index a064197..8a9c25b 100644
--- a/gnu/lib/libg++/include/libio.h
+++ b/gnu/lib/libg++/include/libio.h
@@ -73,7 +73,7 @@ typedef _IO_fpos_t _IO_pos_t;
#ifndef __STDC__
#define const
#endif
-#define USE_DTOA
+#define _IO_USE_DTOA
#if 0
#ifdef _IO_NEED_STDARG_H
@@ -236,6 +236,9 @@ extern unsigned __adjust_column __P((unsigned start, const char *line, int count
? __overflow(_fp, (unsigned char)(_ch)) \
: (unsigned char)(*(_fp)->_IO_write_ptr++ = (_ch)))
+#define _IO_feof(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
+#define _IO_ferror(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
+
/* This one is for Emacs. */
#define _IO_PENDING_OUTPUT_COUNT(_fp) \
((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
diff --git a/gnu/lib/libg++/include/libioP.h b/gnu/lib/libg++/include/libioP.h
index 11d90f5..ca87047 100644
--- a/gnu/lib/libg++/include/libioP.h
+++ b/gnu/lib/libg++/include/libioP.h
@@ -146,9 +146,9 @@ extern struct _IO_jump_t _IO_streambuf_jumps;
extern struct _IO_jump_t _IO_proc_jumps;
extern struct _IO_jump_t _IO_str_jumps;
extern int _IO_do_write __P((_IO_FILE*, const char*, _IO_size_t));
-extern int _IO_flush_all __P(());
-extern void _IO_cleanup __P(());
-extern void _IO_flush_all_linebuffered __P(());
+extern int _IO_flush_all __P((void));
+extern void _IO_cleanup __P((void));
+extern void _IO_flush_all_linebuffered __P((void));
#define _IO_do_flush(_f) \
_IO_do_write(_f, (_f)->_IO_write_base, \
@@ -205,6 +205,7 @@ extern void _IO_str_init_readonly __P((_IO_FILE *, const char*, int));
extern _IO_ssize_t _IO_str_count __P ((_IO_FILE*));
extern _IO_size_t _IO_getline __P((_IO_FILE*,char*,_IO_size_t,int,int));
+extern _IO_ssize_t _IO_getdelim __P((char**, _IO_size_t*, int, _IO_FILE*));
extern double _IO_strtod __P((const char *, char **));
extern char * _IO_dtoa __P((double __d, int __mode, int __ndigits,
int *__decpt, int *__sign, char **__rve));
@@ -213,7 +214,7 @@ extern int _IO_outfloat __P((double __value, _IO_FILE *__sb, int __type,
int __sign_mode, int __fill));
extern _IO_FILE *_IO_list_all;
-extern void (*_IO_cleanup_registration_needed)();
+extern void (*_IO_cleanup_registration_needed) __P ((void));
#ifndef EOF
#define EOF (-1)
@@ -306,3 +307,20 @@ extern struct _IO_fake_stdiobuf _IO_stdin_buf, _IO_stdout_buf, _IO_stderr_buf;
(((FILE)->_IO_file_flags & _IO_MAGIC_MASK) == _OLD_MAGIC_MASK \
&& (FILE) = *(FILE**)&((int*)fp)[1])
#endif
+
+#ifdef EINVAL
+#define MAYBE_SET_EINVAL errno = EINVAL
+#else
+#define MAYBE_SET_EINVAL /* nothing */
+#endif
+
+#ifdef DEBUG
+#define CHECK_FILE(FILE,RET) \
+ if ((FILE) == NULL) { MAYBE_SET_EINVAL; return RET; } \
+ else { COERCE_FILE(FILE); \
+ if (((FILE)->_IO_file_flags & _IO_MAGIC_MASK) != _IO_MAGIC) \
+ { errno = EINVAL; return RET; }}
+#else
+#define CHECK_FILE(FILE,RET) \
+ COERCE_FILE(FILE)
+#endif
diff --git a/gnu/lib/libg++/include/streambuf.h b/gnu/lib/libg++/include/streambuf.h
index 60181a4..efbab12 100644
--- a/gnu/lib/libg++/include/streambuf.h
+++ b/gnu/lib/libg++/include/streambuf.h
@@ -117,6 +117,7 @@ enum open_mode {
#endif
class ios : public _ios_fields {
+ ios& operator=(ios&); /* Not allowed! */
public:
typedef __fmtflags fmtflags;
typedef int iostate;
@@ -200,10 +201,8 @@ class ios : public _ios_fields {
void _IO_fix_vtable(); /* TEMPORARY - for binary compatibility */
void _IO_fix_vtable() const; /* TEMPORARY - for binary compatibility */
#endif
-#if 0
streambuf* rdbuf(streambuf *_s) {
- streambuf *_old = _strbuf; _strbuf = _s; return _old; }
-#endif
+ streambuf *_old = _strbuf; _strbuf = _s; clear (); return _old; }
void clear(iostate state = 0) {
_state = _strbuf ? state : state|badbit;
if (_state & _exceptions) _throw_failure(); }
diff --git a/gnu/lib/libg++/libg++/ACG.cc b/gnu/lib/libg++/libg++/ACG.cc
index 27e7aa2..6206080 100644
--- a/gnu/lib/libg++/libg++/ACG.cc
+++ b/gnu/lib/libg++/libg++/ACG.cc
@@ -123,7 +123,7 @@ static randomStateTable[][3] = {
//
#define RANDOM_PERM_SIZE 64
-unsigned long randomPermutations[RANDOM_PERM_SIZE] = {
+_G_uint32_t randomPermutations[RANDOM_PERM_SIZE] = {
0xffffffff, 0x00000000, 0x00000000, 0x00000000, // 3210
0x0000ffff, 0x00ff0000, 0x00000000, 0xff000000, // 2310
0xff0000ff, 0x0000ff00, 0x00000000, 0x00ff0000, // 3120
@@ -149,7 +149,7 @@ unsigned long randomPermutations[RANDOM_PERM_SIZE] = {
// SEED_TABLE_SIZE must be a power of 2
//
#define SEED_TABLE_SIZE 32
-static unsigned long seedTable[SEED_TABLE_SIZE] = {
+static _G_uint32_t seedTable[SEED_TABLE_SIZE] = {
0xbdcc47e5, 0x54aea45d, 0xec0df859, 0xda84637b,
0xc8c6cb4f, 0x35574b01, 0x28260b7d, 0x0d07fdbf,
0x9faaeeb0, 0x613dd169, 0x5ce2d818, 0x85b9e706,
@@ -171,15 +171,15 @@ static unsigned long seedTable[SEED_TABLE_SIZE] = {
// LC_C = result of a long trial & error series = 3907864577
//
-static const unsigned long LC_A = 66049;
-static const unsigned long LC_C = 3907864577;
-static inline unsigned long LCG(unsigned long x)
+static const _G_uint32_t LC_A = 66049;
+static const _G_uint32_t LC_C = 3907864577;
+static inline _G_uint32_t LCG(_G_uint32_t x)
{
return( x * LC_A + LC_C );
}
-ACG::ACG(unsigned long seed, int size)
+ACG::ACG(_G_uint32_t seed, int size)
{
initialSeed = seed;
@@ -205,7 +205,7 @@ ACG::ACG(unsigned long seed, int size)
// Allocate the state table & the auxillary table in a single malloc
//
- state = new unsigned long[stateSize + auxSize];
+ state = new _G_uint32_t[stateSize + auxSize];
auxState = &state[stateSize];
reset();
@@ -217,7 +217,7 @@ ACG::ACG(unsigned long seed, int size)
void
ACG::reset()
{
- register unsigned long u;
+ register _G_uint32_t u;
if (initialSeed < SEED_TABLE_SIZE) {
u = seedTable[ initialSeed ];
@@ -247,7 +247,7 @@ ACG::reset()
lcgRecurr = u;
- assert(sizeof(double) == 2 * sizeof(long));
+ assert(sizeof(double) == 2 * sizeof(_G_int32_t));
}
ACG::~ACG()
@@ -261,15 +261,16 @@ ACG::~ACG()
// Returns 32 bits of random information.
//
-unsigned long ACG::asLong()
+_G_uint32_t
+ACG::asLong()
{
- unsigned long result = state[k] + state[j];
+ _G_uint32_t result = state[k] + state[j];
state[k] = result;
j = (j <= 0) ? (stateSize-1) : (j-1);
k = (k <= 0) ? (stateSize-1) : (k-1);
short int auxIndex = (result >> 24) & (auxSize - 1);
- register unsigned long auxACG = auxState[auxIndex];
+ register _G_uint32_t auxACG = auxState[auxIndex];
auxState[auxIndex] = lcgRecurr = LCG(lcgRecurr);
//
@@ -277,7 +278,7 @@ unsigned long ACG::asLong()
// do not want to run off the end of the permutation table.
// This insures that we have always got four entries left.
//
- register unsigned long *perm = & randomPermutations[result & 0x3c];
+ register _G_uint32_t *perm = & randomPermutations[result & 0x3c];
result = *(perm++) & auxACG;
result |= *(perm++) & ((auxACG << 24)
diff --git a/gnu/lib/libg++/libg++/DLList.cc b/gnu/lib/libg++/libg++/DLList.cc
index 87874c3..ff8a81b 100644
--- a/gnu/lib/libg++/libg++/DLList.cc
+++ b/gnu/lib/libg++/libg++/DLList.cc
@@ -25,7 +25,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#include <builtin.h>
#include "DLList.h"
-void BaseDLList::error(const char* msg)
+void BaseDLList::error(const char* msg) const
{
(*lib_error_handler)("DLList", msg);
}
@@ -164,7 +164,7 @@ void BaseDLList::join(BaseDLList& b)
}
}
-int BaseDLList::owns(Pix p)
+int BaseDLList::owns(Pix p) const
{
BaseDLNode* t = h;
if (t != 0 && p != 0)
@@ -207,7 +207,7 @@ void BaseDLList::del(Pix& p, int dir)
t->fd->bk = t->bk;
if (t == h) h = t->fd;
}
- delete t;
+ delete_node(t);
}
void BaseDLList::del_after(Pix& p)
@@ -305,7 +305,7 @@ void BaseDLList::del_rear()
}
-int BaseDLList::OK()
+int BaseDLList::OK() const
{
int v = 1;
if (h != 0)
diff --git a/gnu/lib/libg++/libg++/Fix.cc b/gnu/lib/libg++/libg++/Fix.cc
index f067eb3..7e9e474 100644
--- a/gnu/lib/libg++/libg++/Fix.cc
+++ b/gnu/lib/libg++/libg++/Fix.cc
@@ -347,7 +347,7 @@ Fix::multiply(const Rep* x, int y, Rep* r)
a = (_G_int32_t) (_G_int16_t )x->s[0] * y + carry;
r->s[0] = a;
a &= 0xffff8000L;
- if ( a != 0xffff8000L && a != 0L ) {
+ if ( a != (_G_int32_t)0xffff8000L && a != (_G_int32_t)0L ) {
r->s[0] = 0x8000 ^ x->s[0] ^ y;
overflow_handler(r);
}
@@ -419,7 +419,7 @@ Fix::shift(const Rep* x, int y, Rep* r)
return r;
}
- int ay = abs((long) y),
+ int ay = abs((_G_int32_t) y),
ayh = ay >> 4,
ayl = ay & 0x0f;
int xl, u, ilow, ihigh;
@@ -492,7 +492,7 @@ Fix::printon(ostream& s, int width) const
{
double val = value(*this);
int old_precision = s.precision(width-3);
- long old_flags = s.setf(ios::fixed, ios::fixed|ios::scientific);
+ _G_int32_t old_flags = s.setf(ios::fixed, ios::fixed|ios::scientific);
if (val >= 0)
s << ' ';
s.width(width-2);
diff --git a/gnu/lib/libg++/libg++/Fix16.cc b/gnu/lib/libg++/libg++/Fix16.cc
index a66bfbf..3974fb3 100644
--- a/gnu/lib/libg++/libg++/Fix16.cc
+++ b/gnu/lib/libg++/libg++/Fix16.cc
@@ -48,19 +48,19 @@ short Fix16::assign(double d)
return round(Fix16_mult * d);
}
-long Fix32::assign(double d)
+_G_int32_t Fix32::assign(double d)
{
if (d == 1.0)
return Fix32_m_max;
else if (d > Fix32_max)
{
- long i = Fix32_m_max;
+ _G_int32_t i = Fix32_m_max;
range_error(i);
return i;
}
else if (d < Fix32_min)
{
- long i = Fix32_m_min;
+ _G_int32_t i = Fix32_m_min;
range_error(i);
return i;
}
@@ -75,20 +75,20 @@ Fix32 operator * (const Fix32& a, const Fix32& b)
// multiply, with rounding
int apos = (a.m >= 0);
- unsigned long ua = (apos)? a.m : - a.m;
+ _G_uint32_t ua = (apos)? a.m : - a.m;
ua <<= 1; // ua is biased so result will be 31 bit mantissa, not 30:
- unsigned long hi_a = (ua >> 16) & ((1 << 16) - 1);
- unsigned long lo_a = ua & ((1 << 16) - 1);
+ _G_uint32_t hi_a = (ua >> 16) & ((1 << 16) - 1);
+ _G_uint32_t lo_a = ua & ((1 << 16) - 1);
int bpos = (b.m >= 0);
- unsigned long ub = (bpos)? b.m : -b.m;
- unsigned long hi_b = (ub >> 16) & ((1 << 16) - 1);
- unsigned long lo_b = ub & ((1 << 16) - 1);
+ _G_uint32_t ub = (bpos)? b.m : -b.m;
+ _G_uint32_t hi_b = (ub >> 16) & ((1 << 16) - 1);
+ _G_uint32_t lo_b = ub & ((1 << 16) - 1);
- unsigned long r = lo_a * lo_b + (1 << 15);
+ _G_uint32_t r = lo_a * lo_b + (1 << 15);
r = (r >> 16) + hi_a * lo_b + lo_a * hi_b + (1 << 15);
r = (r >> 16) + hi_a * hi_b;
- long p = (apos != bpos)? -r : r;
+ _G_int32_t p = (apos != bpos)? -r : r;
return Fix32(p);
}
@@ -96,8 +96,8 @@ Fix16 operator / (const Fix16& a, const Fix16& b)
{
short q;
int apos = (a.m >= 0);
- long la = (apos)? a.m : -a.m;
- long scaled_a = la << 15;
+ _G_int32_t la = (apos)? a.m : -a.m;
+ _G_int32_t scaled_a = la << 15;
int bpos = (b.m >= 0);
short sb = (bpos)? b.m: -b.m;
if (la >= sb)
@@ -116,11 +116,11 @@ Fix16 operator / (const Fix16& a, const Fix16& b)
Fix32 operator / (const Fix32& a, const Fix32& b)
{
- long q;
+ _G_int32_t q;
int apos = (a.m >= 0);
- unsigned long la = (apos)? a.m : -a.m;
+ _G_uint32_t la = (apos)? a.m : -a.m;
int bpos = (b.m >= 0);
- unsigned long lb = (bpos)? b.m: -b.m;
+ _G_uint32_t lb = (bpos)? b.m: -b.m;
if (la >= lb)
{
q = (apos == bpos)? Fix32_m_max: Fix32_m_min;
@@ -129,7 +129,7 @@ Fix32 operator / (const Fix32& a, const Fix32& b)
else // standard shift-based division alg
{
q = 0;
- long r = la;
+ _G_int32_t r = la;
for (int i = 32; i > 0; i--)
{
@@ -155,7 +155,7 @@ void Fix16::overflow(short& i) const
(*Fix16_overflow_handler)(i);
}
-void Fix32::overflow(long& i) const
+void Fix32::overflow(_G_int32_t& i) const
{
(*Fix32_overflow_handler)(i);
}
@@ -165,7 +165,7 @@ void Fix16::range_error(short& i) const
(*Fix16_range_error_handler)(i);
}
-void Fix32::range_error(long& i) const
+void Fix32::range_error(_G_int32_t& i) const
{
(*Fix32_range_error_handler)(i);
}
@@ -225,14 +225,14 @@ void Fix16_overflow_warning_saturate(short& i)
void Fix16_abort(short&)
{ cerr << "error: Fix16 result out of range\n"; abort(); }
-void Fix32_ignore(long&) {}
-void Fix32_overflow_saturate(long& i)
+void Fix32_ignore(_G_int32_t&) {}
+void Fix32_overflow_saturate(_G_int32_t& i)
{ i = (i > 0 ? Fix32_m_min : Fix32_m_max); }
-void Fix32_warning(long&)
+void Fix32_warning(_G_int32_t&)
{ cerr << "warning: Fix32 result out of range\n"; }
-void Fix32_overflow_warning_saturate(long& i)
+void Fix32_overflow_warning_saturate(_G_int32_t& i)
{ cerr << "warning: Fix32 result out of range\n";
Fix32_overflow_saturate(i); }
-void Fix32_abort(long&)
+void Fix32_abort(_G_int32_t&)
{ cerr << "error: Fix32 result out of range\n"; abort(); }
diff --git a/gnu/lib/libg++/libg++/Fix24.cc b/gnu/lib/libg++/libg++/Fix24.cc
index 22e23dc..84cb834 100644
--- a/gnu/lib/libg++/libg++/Fix24.cc
+++ b/gnu/lib/libg++/libg++/Fix24.cc
@@ -28,25 +28,27 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
// basic operators too large to be inline
-long Fix24::assign(double d)
+_G_int32_t Fix24::assign(double d)
{
if (d == 1.0)
return Fix24_m_max;
else if (d > Fix24_max)
{
- long i = Fix24_m_max;
+ _G_int32_t i = Fix24_m_max;
range_error(i);
return i;
}
else if (d < Fix24_min)
{
- long i = Fix24_m_min;
+ _G_int32_t i = Fix24_m_min;
range_error(i);
return i;
}
else {
- d = (long) (d * (1 << 24) + ((d >= 0)? 0.5 : -0.5)); // Round to 24 bits
- return ((long) d) << (Fix24_shift - 24); /* Convert to integer format */
+ // Round to 24 bits
+ d = (_G_int32_t) (d * (1 << 24) + ((d >= 0)? 0.5 : -0.5));
+ /* Convert to integer format */
+ return ((_G_int32_t) d) << (Fix24_shift - 24);
}
}
@@ -72,14 +74,14 @@ twolongs Fix48::assign(double d)
/* First, convert the absolute value of d to a 48-bit integer format */
if (d < 0) d = -d;
- i.u = ((long)(d *= Fix24_mult)) & 0xffffff00;
- i.l = ((unsigned long)((d - i.u)* (Fix24_mult / (1 << 7)))) & 0xffffff00;
+ i.u = ((_G_int32_t)(d *= Fix24_mult)) & 0xffffff00;
+ i.l = ((_G_uint32_t)((d - i.u)* (Fix24_mult / (1 << 7)))) & 0xffffff00;
/* Calculate the two's complement if d was negative */
if (sign) {
- unsigned long oldlower = i.l;
+ _G_uint32_t oldlower = i.l;
i.l = (~i.l + 1) & 0xffffff00;
- i.u = (~i.u + (((oldlower ^ i.l) & Fix24_msb)? 0 : 1)) & 0xffffff00;
+ i.u = (~i.u + (((oldlower ^ i.l) & Fix24_msb)? 0 : 1)) & ~0xffL;
}
return i;
}
@@ -92,17 +94,17 @@ Fix48 operator * (const Fix24& a, const Fix24& b)
// multiply, with rounding
int apos = (a.m >= 0);
- unsigned long ua = (apos)? a.m : - a.m;
+ _G_uint32_t ua = (apos)? a.m : - a.m;
ua <<= 1; // ua is biased so result will be 47 bit mantissa, not 46:
- unsigned long hi_a = (ua >> 16) & ((1 << 16) - 1);
- unsigned long lo_a = ua & ((1 << 16) - 1);
+ _G_uint32_t hi_a = (ua >> 16) & ((1 << 16) - 1);
+ _G_uint32_t lo_a = ua & ((1 << 16) - 1);
int bpos = (b.m >= 0);
- unsigned long ub = (bpos)? b.m : -b.m;
- unsigned long hi_b = (ub >> 16) & ((1 << 16) - 1);
- unsigned long lo_b = ub & ((1 << 16) - 1);
+ _G_uint32_t ub = (bpos)? b.m : -b.m;
+ _G_uint32_t hi_b = (ub >> 16) & ((1 << 16) - 1);
+ _G_uint32_t lo_b = ub & ((1 << 16) - 1);
- unsigned long
+ _G_uint32_t
hi_r = hi_a * hi_b,
mi_r = hi_a * lo_b + lo_a * hi_b,
lo_r = lo_a * lo_b,
@@ -113,7 +115,7 @@ Fix48 operator * (const Fix24& a, const Fix24& b)
r.l = rl << 8;
if ( apos != bpos ) {
- unsigned long l = r.l;
+ _G_uint32_t l = r.l;
r.l = -r.l;
r.u = (~r.u + ((l ^ r.l) & Fix24_msb ? 0 : Fix24_lsb)) & 0xffffff00;
}
@@ -122,11 +124,11 @@ Fix48 operator * (const Fix24& a, const Fix24& b)
Fix24 operator / (const Fix24& a, const Fix24& b)
{
- long q;
+ _G_int32_t q;
int apos = (a.m >= 0);
- unsigned long la = (apos)? a.m : -a.m;
+ _G_uint32_t la = (apos)? a.m : -a.m;
int bpos = (b.m >= 0);
- unsigned long lb = (bpos)? b.m: -b.m;
+ _G_uint32_t lb = (bpos)? b.m: -b.m;
if (la >= lb)
{
q = (apos == bpos)? Fix24_m_max: Fix24_m_min;
@@ -135,7 +137,7 @@ Fix24 operator / (const Fix24& a, const Fix24& b)
else // standard shift-based division alg
{
q = 0;
- long r = la;
+ _G_int32_t r = la;
for (int i = 32; i > 0; i--)
{
@@ -151,13 +153,13 @@ Fix24 operator / (const Fix24& a, const Fix24& b)
q += 0x80; // Round result to 24 bits
if (apos != bpos) q = -q; // Fix sign
}
- return (q & ~0xFF);
+ return (q & ~0xff);
}
Fix48 operator + (const Fix48& f, const Fix48& g)
{
- long lo_r = (f.m.l >> 8) + (g.m.l >> 8);
+ _G_int32_t lo_r = (f.m.l >> 8) + (g.m.l >> 8);
twolongs r;
r.u = f.m.u + g.m.u + (lo_r & 0x01000000L ? 0x00000100L : 0);
r.l = lo_r << 8;
@@ -189,15 +191,15 @@ Fix48 operator * (const Fix48& a, int b)
a.range_error(r);
}
else {
- unsigned long
+ _G_uint32_t
lo_r = (a.m.l & 0xffff) * ub,
mi_r = ((a.m.l >> 16) & 0xffff) * ub,
hi_r = a.m.u * ub;
r.l = lo_r + (mi_r << 16);
r.u = hi_r + ((mi_r >> 8) & 0x00ffff00L);
if ( !bpos ) {
- unsigned long l = r.l;
- r.l = -r.l;
+ _G_uint32_t l = r.l;
+ r.l = -r.l & 0xffffffff;
r.u = ~r.u + ((l ^ r.l) & Fix24_msb ? 0 : Fix24_lsb);
}
}
@@ -223,15 +225,15 @@ Fix48 operator >> (const Fix48& a, int b)
twolongs r; r.u = 0; r.l = 0;
if ( b >= 0 )
if ( b < 24 ) {
- r.l = (a.m.u << (24 - b)) + ((a.m.l >> b) & 0xffffff00L);
- r.u = (a.m.u >> b) & 0xffffff00L;
+ r.l = ((a.m.u << (24 - b)) & 0xffffffffL) + ((a.m.l >> b) & 0xffffff00L);
+ r.u = (a.m.u >> b) & ~0xffL;
}
else if ( b < 48 ) {
r.l = (a.m.u >> (b - 24)) & 0xffffff00L;
- r.u = (a.m.u >> 24) & 0xffffff00L;
+ r.u = (a.m.u >> 24) & ~0xffL;
}
else {
- r.l = (a.m.u >> 24) & 0xffffff00L;
+ r.l = (a.m.u >> 24) & ~0xffL;
r.u = r.l;
}
return r;
@@ -239,7 +241,7 @@ Fix48 operator >> (const Fix48& a, int b)
// error handling
-void Fix24::overflow(long& i) const
+void Fix24::overflow(_G_int32_t& i) const
{
(*Fix24_overflow_handler)(i);
}
@@ -249,7 +251,7 @@ void Fix48::overflow(twolongs& i) const
(*Fix48_overflow_handler)(i);
}
-void Fix24::range_error(long& i) const
+void Fix24::range_error(_G_int32_t& i) const
{
(*Fix24_range_error_handler)(i);
}
@@ -303,15 +305,15 @@ void set_range_error_handler(Fix24_peh handler24, Fix48_peh handler48) {
set_Fix48_range_error_handler(handler48);
}
-void Fix24_overflow_saturate(long& i)
+void Fix24_overflow_saturate(_G_int32_t& i)
{ i = (i > 0 ? Fix24_m_min : Fix24_m_max); }
-void Fix24_ignore(long&) {}
-void Fix24_warning(long&)
+void Fix24_ignore(_G_int32_t&) {}
+void Fix24_warning(_G_int32_t&)
{ cerr << "warning: Fix24 result out of range\n"; }
-void Fix24_overflow_warning_saturate(long& i)
+void Fix24_overflow_warning_saturate(_G_int32_t& i)
{ cerr << "warning: Fix24 result out of range\n";
Fix24_overflow_saturate(i); }
-void Fix24_abort(long&)
+void Fix24_abort(_G_int32_t&)
{ cerr << "error: Fix24 result out of range\n"; abort(); }
void Fix48_ignore(twolongs&) {}
diff --git a/gnu/lib/libg++/libg++/MLCG.cc b/gnu/lib/libg++/libg++/MLCG.cc
index cdc1165..053325e 100644
--- a/gnu/lib/libg++/libg++/MLCG.cc
+++ b/gnu/lib/libg++/libg++/MLCG.cc
@@ -79,7 +79,7 @@ MLCG::reset()
seedTwo = (seedTwo % 2147483397) + 1;
}
-unsigned long MLCG::asLong()
+_G_uint32_t MLCG::asLong()
{
_G_int32_t k = seedOne % 53668;
diff --git a/gnu/lib/libg++/libg++/Regex.cc b/gnu/lib/libg++/libg++/Regex.cc
index 990f7b8..db9cdc3 100644
--- a/gnu/lib/libg++/libg++/Regex.cc
+++ b/gnu/lib/libg++/libg++/Regex.cc
@@ -28,7 +28,11 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#include <builtin.h>
extern "C" {
+#if 1
+#include <rx.h>
+#else
#include <regex.h>
+#endif
}
#include <Regex.h>
@@ -46,17 +50,18 @@ Regex::Regex(const char* t, int fast, int bufsize,
{
int tlen = (t == 0)? 0 : strlen(t);
buf = new re_pattern_buffer;
+ memset (buf, 0, sizeof(re_pattern_buffer));
reg = new re_registers;
if (fast)
buf->fastmap = (char*)malloc(256);
else
buf->fastmap = 0;
- buf->translate = (char*)transtable;
+ buf->translate = (unsigned char*)transtable;
if (tlen > bufsize)
bufsize = tlen;
buf->allocated = bufsize;
buf->buffer = (char *)malloc(buf->allocated);
- char* msg = re_compile_pattern((const char*)t, tlen, buf);
+ const char* msg = re_compile_pattern((const char*)t, tlen, buf);
if (msg != 0)
(*lib_error_handler)("Regex", msg);
else if (fast)
diff --git a/gnu/lib/libg++/libg++/SLList.cc b/gnu/lib/libg++/libg++/SLList.cc
index 6efd997..7c19b3c 100644
--- a/gnu/lib/libg++/libg++/SLList.cc
+++ b/gnu/lib/libg++/libg++/SLList.cc
@@ -25,7 +25,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#include <builtin.h>
#include "SLList.h"
-void BaseSLList::error(const char* msg)
+void BaseSLList::error(const char* msg) const
{
(*lib_error_handler)("SLList", msg);
}
@@ -184,7 +184,7 @@ void BaseSLList::del_after(Pix p)
delete_node(t);
}
-int BaseSLList::owns(Pix p)
+int BaseSLList::owns(Pix p) const
{
BaseSLNode* t = last;
if (t != 0 && p != 0)
@@ -227,7 +227,7 @@ void BaseSLList::del_front()
delete_node(t);
}
-int BaseSLList::OK()
+int BaseSLList::OK() const
{
int v = 1;
if (last != 0)
diff --git a/gnu/lib/libg++/libg++/String.cc b/gnu/lib/libg++/libg++/String.cc
index ad86079..cb2c524 100644
--- a/gnu/lib/libg++/libg++/String.cc
+++ b/gnu/lib/libg++/libg++/String.cc
@@ -29,10 +29,6 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#include <new.h>
#include <builtin.h>
-// extern "C" {
-#include <regex.h>
-// }
-
void String::error(const char* msg) const
{
(*lib_error_handler)("String", msg);
@@ -171,7 +167,8 @@ StrRep* Salloc(StrRep* old, const char* src, int srclen, int newlen)
// generally be faster in the long run to get new space & copy
// than to call realloc
-StrRep* Sresize(StrRep* old, int newlen)
+static StrRep*
+Sresize(StrRep* old, int newlen)
{
if (old == &_nilStrRep) old = 0;
StrRep* rep;
@@ -191,6 +188,14 @@ StrRep* Sresize(StrRep* old, int newlen)
return rep;
}
+void
+String::alloc (int newsize)
+{
+ unsigned short old_len = rep->len;
+ rep = Sresize(rep, newsize);
+ rep->len = old_len;
+}
+
// like allocate, but we know that src is a StrRep
StrRep* Scopy(StrRep* old, const StrRep* s)
@@ -960,41 +965,25 @@ int split(const String& src, String results[], int n, const Regex& r)
#if defined(__GNUG__) && !defined(_G_NO_NRV)
+#define RETURN(r) return
+#define RETURNS(r) return r;
+#define RETURN_OBJECT(TYPE, NAME) /* nothing */
+#else /* _G_NO_NRV */
+#define RETURN(r) return r
+#define RETURNS(r) /* nothing */
+#define RETURN_OBJECT(TYPE, NAME) TYPE NAME;
+#endif
-String join(String src[], int n, const String& separator) return x;
-{
- String sep = separator;
- int xlen = 0;
- for (int i = 0; i < n; ++i)
- xlen += src[i].length();
- xlen += (n - 1) * sep.length();
-
- x.alloc(xlen);
-
- int j = 0;
-
- for (i = 0; i < n - 1; ++i)
- {
- ncopy(src[i].chars(), &(x.rep->s[j]), src[i].length());
- j += src[i].length();
- ncopy(sep.chars(), &(x.rep->s[j]), sep.length());
- j += sep.length();
- }
- ncopy0(src[i].chars(), &(x.rep->s[j]), src[i].length());
-}
-
-#else
-
-String join(String src[], int n, const String& separator)
+String join(String src[], int n, const String& separator) RETURNS(x)
{
- String x;
+ RETURN_OBJECT(String,x)
String sep = separator;
int xlen = 0;
for (int i = 0; i < n; ++i)
xlen += src[i].length();
xlen += (n - 1) * sep.length();
- x.alloc(xlen);
+ x.rep = Sresize (x.rep, xlen);
int j = 0;
@@ -1006,10 +995,8 @@ String join(String src[], int n, const String& separator)
j += sep.length();
}
ncopy0(src[i].chars(), &(x.rep->s[j]), src[i].length());
- return x;
+ RETURN(x);
}
-
-#endif
/*
misc
diff --git a/gnu/lib/libg++/libg++/error.cc b/gnu/lib/libg++/libg++/error.cc
index 852b3df..9283d14 100644
--- a/gnu/lib/libg++/libg++/error.cc
+++ b/gnu/lib/libg++/libg++/error.cc
@@ -26,7 +26,7 @@ typedef _VOLATILE_VOID (*NoReturnFunc)(void);
This is to avoid a warning from g++ that a `volatile' function does return. */
#define ABORT() ((NoReturnFunc)abort)()
#else
-#define ABORT abort()
+#define ABORT() abort()
#endif
_VOLATILE_VOID default_one_arg_error_handler(const char* msg)
diff --git a/gnu/lib/libg++/libg++/timer.c b/gnu/lib/libg++/libg++/timer.c
index 73a856a..6e3432b 100644
--- a/gnu/lib/libg++/libg++/timer.c
+++ b/gnu/lib/libg++/libg++/timer.c
@@ -37,6 +37,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#if !_G_HAVE_SYS_RESOURCE || !defined(RUSAGE_SELF)
#define USE_TIMES
#include <sys/param.h>
+#include <sys/types.h>
#include <sys/times.h>
#if !defined (HZ) && defined(CLK_TCK)
#define HZ CLK_TCK
diff --git a/gnu/lib/libg++/libio/fileops.c b/gnu/lib/libg++/libio/fileops.c
index 47398a8..2bd7c24 100644
--- a/gnu/lib/libg++/libio/fileops.c
+++ b/gnu/lib/libg++/libio/fileops.c
@@ -44,7 +44,8 @@ extern int errno;
The position in the buffer that corresponds to the position
in external file system is file_ptr().
- This is normally egptr(), except in putback mode, when it is _save_egptr.
+ This is normally _IO_read_end, except in putback mode,
+ when it is _IO_save_end.
If the field _fb._offset is >= 0, it gives the offset in
the file as a whole corresponding to eGptr(). (???)
@@ -238,7 +239,7 @@ _IO_do_write(fp, data, to_do)
fp->_cur_column = _IO_adjust_column(fp->_cur_column - 1, data, to_do) + 1;
_IO_setg(fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_buf_base;
- fp->_IO_write_end = (fp->_flags & _IO_LINE_BUF+_IO_UNBUFFERED) ? fp->_IO_buf_base
+ fp->_IO_write_end = (fp->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED)) ? fp->_IO_buf_base
: fp->_IO_buf_end;
return count != to_do ? EOF : 0;
}
@@ -311,7 +312,7 @@ int _IO_file_overflow (f, ch)
f->_IO_write_end = f->_IO_buf_end;
f->_IO_read_base = f->_IO_read_ptr = f->_IO_read_end;
- if (f->_flags & _IO_LINE_BUF+_IO_UNBUFFERED)
+ if (f->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
f->_IO_write_end = f->_IO_write_ptr;
f->_flags |= _IO_CURRENTLY_PUTTING;
}
@@ -389,10 +390,10 @@ _IO_file_seekoff(fp, offset, mode)
switch (dir)
{
case _IO_seek_cur:
- if (fp->_offset == _IO_pos_BAD)
- goto dumb;
/* Adjust for read-ahead (bytes is buffer). */
offset -= fp->_IO_read_end - fp->_IO_read_ptr;
+ if (fp->_offset == _IO_pos_BAD)
+ goto dumb;
/* Make offset absolute, assuming current pointer is file_ptr(). */
offset += _IO_pos_as_off(fp->_offset);
@@ -414,24 +415,27 @@ _IO_file_seekoff(fp, offset, mode)
}
/* At this point, dir==_IO_seek_set. */
-#ifdef TODO
/* If destination is within current buffer, optimize: */
- if (fp->_offset != IO_pos_BAD && fp->_IO_read_base != NULL)
+ if (fp->_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
+ && !_IO_in_backup (fp))
{
/* Offset relative to start of main get area. */
- _IO_pos_t rel_offset = offset - _fb._offset
- + (eGptr()-Gbase());
+ _IO_pos_t rel_offset = offset - fp->_offset
+ + (fp->_IO_read_end - fp->_IO_read_base);
if (rel_offset >= 0)
{
+#if 0
if (_IO_in_backup(fp))
_IO_switch_to_main_get_area(fp);
- if (rel_offset <= _IO_read_end - _IO_read_base)
+#endif
+ if (rel_offset <= fp->_IO_read_end - fp->_IO_read_base)
{
- _IO_setg(fp->_IO_buf_base, fp->_IO_buf_base + rel_offset,
+ _IO_setg(fp, fp->_IO_buf_base, fp->_IO_buf_base + rel_offset,
fp->_IO_read_end);
- _IO_setp(fp->_IO_buf_base, fp->_IO_buf_base);
+ _IO_setp(fp, fp->_IO_buf_base, fp->_IO_buf_base);
return offset;
}
+#ifdef TODO
/* If we have streammarkers, seek forward by reading ahead. */
if (_IO_have_markers(fp))
{
@@ -441,7 +445,9 @@ _IO_file_seekoff(fp, offset, mode)
goto dumb;
return offset;
}
+#endif
}
+#ifdef TODO
if (rel_offset < 0 && rel_offset >= Bbase() - Bptr())
{
if (!_IO_in_backup(fp))
@@ -449,8 +455,10 @@ _IO_file_seekoff(fp, offset, mode)
gbump(fp->_IO_read_end + rel_offset - fp->_IO_read_ptr);
return offset;
}
+#endif
}
+#ifdef TODO
_IO_unsave_markers(fp);
#endif
diff --git a/gnu/lib/libg++/libio/floatconv.c b/gnu/lib/libg++/libio/floatconv.c
index 84eb848..ff300bb 100644
--- a/gnu/lib/libg++/libio/floatconv.c
+++ b/gnu/lib/libg++/libio/floatconv.c
@@ -23,7 +23,7 @@ This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
#include <libioP.h>
-#ifdef USE_DTOA
+#ifdef _IO_USE_DTOA
/****************************************************************
*
* The author of this software is David M. Gay.
@@ -489,7 +489,7 @@ s2b
#endif
{
int i, k;
- long x, y;
+ _G_int32_t x, y;
x = (nd + 8) / 9;
for(k = 0, y = 1; x > y; y <<= 1, k++) ;
@@ -643,7 +643,7 @@ mult
xbe = xb + wb;
xc0 = c->x;
for(; xb < xbe; xb++, xc0++) {
- if (y = *xb & 0xffff) {
+ if ((y = *xb & 0xffff)) {
x = xa;
xc = xc0;
carry = 0;
@@ -657,7 +657,7 @@ mult
while(x < xae);
*xc = carry;
}
- if (y = *xb >> 16) {
+ if ((y = *xb >> 16)) {
x = xa;
xc = xc0;
carry = 0;
@@ -794,9 +794,9 @@ diff
#endif
{
int i, wa, wb;
- long borrow, y; /* We need signed shifts here. */
+ _G_int32_t borrow, y; /* We need signed shifts here. */
unsigned32 *xa, *xae, *xb, *xbe, *xc;
- long z;
+ _G_int32_t z;
i = cmp(a,b);
if (!i) {
@@ -856,7 +856,7 @@ ulp
(double x)
#endif
{
- register long L;
+ register _G_int32_t L;
double a;
L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
@@ -879,7 +879,7 @@ ulp
else {
word0(a) = 0;
L -= Exp_shift;
- word1(a) = L >= 31 ? 1 : 1 << 31 - L;
+ word1(a) = L >= 31 ? 1 : 1 << (31 - L);
}
}
#endif
@@ -913,16 +913,16 @@ b2d
k = hi0bits(y);
*e = 32 - k;
if (k < Ebits) {
- d0 = Exp_1 | y >> Ebits - k;
+ d0 = Exp_1 | y >> (Ebits - k);
w = xa > xa0 ? *--xa : 0;
- d1 = y << (32-Ebits) + k | w >> Ebits - k;
+ d1 = y << ((32-Ebits) + k) | w >> (Ebits - k);
goto ret_d;
}
z = xa > xa0 ? *--xa : 0;
if (k -= Ebits) {
- d0 = Exp_1 | y << k | z >> 32 - k;
+ d0 = Exp_1 | y << k | z >> (32 - k);
y = xa > xa0 ? *--xa : 0;
- d1 = z << k | y >> 32 - k;
+ d1 = z << k | y >> (32 - k);
}
else {
d0 = Exp_1 | y;
@@ -974,9 +974,9 @@ d2b
z |= Exp_msk11;
#endif
- if (y = d1) {
- if (k = lo0bits(&y)) {
- x[0] = y | z << 32 - k;
+ if ((y = d1)) {
+ if ((k = lo0bits(&y))) {
+ x[0] = y | z << (32 - k);
z >>= k;
}
else
@@ -1091,7 +1091,7 @@ _IO_strtod
e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
CONST char *s, *s0, *s1;
double aadj, aadj1, adj, rv, rv0;
- long L;
+ _G_int32_t L;
unsigned32 y, z;
Bigint _bb, _b_avail, _bd, _bd0, _bs, _delta;
Bigint *bb = Binit(&_bb);
@@ -1280,7 +1280,7 @@ _IO_strtod
/* Get starting approximation = rv * 10**e1 */
if (e1 > 0) {
- if (i = e1 & 15)
+ if ((i = e1 & 15))
rv *= tens[i];
if (e1 &= ~15) {
if (e1 > DBL_MAX_10_EXP) {
@@ -1320,7 +1320,7 @@ _IO_strtod
}
else if (e1 < 0) {
e1 = -e1;
- if (i = e1 & 15)
+ if ((i = e1 & 15))
rv /= tens[i];
if (e1 &= ~15) {
e1 >>= 4;
@@ -1588,7 +1588,7 @@ _IO_strtod
z = word0(rv) & Exp_mask;
if (y == z) {
/* Can we stop now? */
- L = (long)aadj;
+ L = (_G_int32_t)aadj;
aadj -= L;
/* The tolerances below are conservative. */
if (dsign || word1(rv) || word0(rv) & Bndry_mask) {
@@ -1620,10 +1620,10 @@ quorem
#endif
{
int n;
- long borrow, y;
+ _G_int32_t borrow, y;
unsigned32 carry, q, ys;
unsigned32 *bx, *bxe, *sx, *sxe;
- long z;
+ _G_int32_t z;
unsigned32 si, zs;
n = S->wds;
@@ -1777,7 +1777,7 @@ _IO_dtoa
int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
spec_case, try_quick;
- long L;
+ _G_int32_t L;
#ifndef Sudden_Underflow
int denorm;
#endif
@@ -1874,8 +1874,8 @@ _IO_dtoa
unsigned32 x;
i = bbits + be + (Bias + (P-1) - 1);
- x = i > 32 ? word0(d) << 64 - i | word1(d) >> i - 32
- : word1(d) << 32 - i;
+ x = i > 32 ? word0(d) << (64 - i) | word1(d) >> (i - 32)
+ : word1(d) << (32 - i);
d2 = x;
word0(d2) -= 31*Exp_msk1; /* adjust exponent */
i -= (Bias + (P-1) - 1) + 1;
@@ -2006,7 +2006,7 @@ _IO_dtoa
}
d /= ds;
}
- else if (j1 = -k) {
+ else if ((j1 = -k)) {
d *= tens[j1 & 0xf];
for(j = j1 >> 4; j; j >>= 1, i++)
if (j & 1) {
@@ -2039,7 +2039,7 @@ _IO_dtoa
*/
eps = 0.5/tens[ilim-1] - eps;
for(i = 0;;) {
- L = (long)d;
+ L = (_G_int32_t)d;
d -= L;
*s++ = '0' + (int)L;
if (d < eps)
@@ -2057,7 +2057,7 @@ _IO_dtoa
/* Generate ilim digits, then fix them up. */
eps *= tens[ilim-1];
for(i = 1;; i++, d *= 10.) {
- L = (long)d;
+ L = (_G_int32_t)d;
d -= L;
*s++ = '0' + (int)L;
if (i == ilim) {
@@ -2092,7 +2092,7 @@ _IO_dtoa
goto one_digit;
}
for(i = 1;; i++) {
- L = (long)(d / ds);
+ L = (_G_int32_t)(d / ds);
d -= L*ds;
#ifdef Check_FLT_ROUNDS
/* If FLT_ROUNDS == 2, L will usually be high by 1 */
@@ -2104,7 +2104,7 @@ _IO_dtoa
*s++ = '0' + (int)L;
if (i == ilim) {
d += d;
- if (d > ds || d == ds && L & 1) {
+ if (d > ds || (d == ds && L & 1)) {
bump_up:
while(*--s == '9')
if (s == s0) {
@@ -2169,7 +2169,7 @@ _IO_dtoa
b_avail = b;
b = b_tmp;
}
- if (j = b5 - m5)
+ if ((j = b5 - m5))
b = pow5mult(b, j);
}
else
@@ -2203,7 +2203,7 @@ _IO_dtoa
* and for all and pass them and a shift to quorem, so it
* can do shifts and ors to compute the numerator for q.
*/
- if (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f)
+ if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
i = 32 - i;
if (i > 4) {
i -= 4;
@@ -2276,15 +2276,15 @@ _IO_dtoa
goto ret;
}
#endif
- if (j < 0 || j == 0 && !mode
+ if (j < 0 || (j == 0 && !mode
#ifndef ROUND_BIASED
&& !(word1(d) & 1)
#endif
- ) {
+ )) {
if (j1 > 0) {
b = lshift(b, 1);
j1 = cmp(b, S);
- if ((j1 > 0 || j1 == 0 && dig & 1)
+ if ((j1 > 0 || (j1 == 0 && dig & 1))
&& dig++ == '9')
goto round_9_up;
}
@@ -2324,7 +2324,7 @@ _IO_dtoa
b = lshift(b, 1);
j = cmp(b, S);
- if (j > 0 || j == 0 && dig & 1) {
+ if (j > 0 || (j == 0 && dig & 1)) {
roundoff:
while(*--s == '9')
if (s == s0) {
@@ -2354,4 +2354,4 @@ _IO_dtoa
*rve = s;
return s0;
}
-#endif /* USE_DTOA */
+#endif /* _IO_USE_DTOA */
diff --git a/gnu/lib/libg++/libio/iofclose.c b/gnu/lib/libg++/libio/iofclose.c
index 44664d9..03be451 100644
--- a/gnu/lib/libg++/libio/iofclose.c
+++ b/gnu/lib/libg++/libio/iofclose.c
@@ -32,9 +32,7 @@ _IO_fclose(fp)
register _IO_FILE *fp;
{
int status = 0;
- COERCE_FILE(fp);
- if ((fp->_IO_file_flags & _IO_MAGIC_MASK) != _IO_MAGIC)
- return EOF;
+ CHECK_FILE(fp, EOF);
if (fp->_IO_file_flags & _IO_IS_FILEBUF)
status = _IO_file_close_it(fp);
fp->_jumps->__finish(fp);
diff --git a/gnu/lib/libg++/libio/iofgetpos.c b/gnu/lib/libg++/libio/iofgetpos.c
index 16ecec0..ac417f5 100644
--- a/gnu/lib/libg++/libio/iofgetpos.c
+++ b/gnu/lib/libg++/libio/iofgetpos.c
@@ -32,7 +32,7 @@ _IO_fgetpos(fp, posp)
_IO_fpos_t *posp;
{
_IO_fpos_t pos;
- COERCE_FILE(fp);
+ CHECK_FILE(fp, EOF);
pos = _IO_seekoff(fp, 0, _IO_seek_cur|_IO_seek_not_in|_IO_seek_not_out);
if (pos == _IO_pos_BAD)
{
diff --git a/gnu/lib/libg++/libio/iofread.c b/gnu/lib/libg++/libio/iofread.c
index c72c70f..4bfe717 100644
--- a/gnu/lib/libg++/libio/iofread.c
+++ b/gnu/lib/libg++/libio/iofread.c
@@ -33,7 +33,7 @@ _IO_fread(buf, size, count, fp)
{
_IO_size_t bytes_requested = size*count;
_IO_size_t bytes_read;
- COERCE_FILE(fp);
+ CHECK_FILE(fp, 0);
if (bytes_requested == 0)
return 0;
bytes_read = _IO_sgetn(fp, (char *)buf, bytes_requested);
diff --git a/gnu/lib/libg++/libio/iofscanf.c b/gnu/lib/libg++/libio/iofscanf.c
index 7110401..5daef91 100644
--- a/gnu/lib/libg++/libio/iofscanf.c
+++ b/gnu/lib/libg++/libio/iofscanf.c
@@ -40,7 +40,7 @@ _IO_fscanf
{
int ret;
va_list args;
- COERCE_FILE(fp);
+ CHECK_FILE(fp, EOF);
_IO_va_start(args, format);
ret = _IO_vfscanf(fp, format, args, NULL);
va_end(args);
diff --git a/gnu/lib/libg++/libio/iofsetpos.c b/gnu/lib/libg++/libio/iofsetpos.c
index 763fbe6..0a6fff2 100644
--- a/gnu/lib/libg++/libio/iofsetpos.c
+++ b/gnu/lib/libg++/libio/iofsetpos.c
@@ -30,7 +30,7 @@ _IO_fsetpos(fp, posp)
_IO_FILE* fp;
const _IO_fpos_t *posp;
{
- COERCE_FILE(fp);
+ CHECK_FILE(fp, EOF);
if (_IO_seekpos(fp, *posp, 0) == _IO_pos_BAD)
{
/*ANSI explicily requires setting errno to a positive value on failure.*/
diff --git a/gnu/lib/libg++/libio/iostream.cc b/gnu/lib/libg++/libio/iostream.cc
index db953d4..0c241f8 100644
--- a/gnu/lib/libg++/libio/iostream.cc
+++ b/gnu/lib/libg++/libio/iostream.cc
@@ -70,6 +70,8 @@ istream& istream::get(char& c)
_gcount = 1;
}
}
+ else
+ _gcount = 0;
return *this;
}
@@ -87,13 +89,13 @@ int istream::peek()
istream& istream::ignore(int n /* = 1 */, int delim /* = EOF */)
{
+ _gcount = 0;
if (ipfx1()) {
register streambuf* sb = _strbuf;
if (delim == EOF) {
_gcount = sb->ignore(n);
return *this;
}
- _gcount = 0;
for (;;) {
#if 0
if (n != MAXINT) // FIXME
@@ -120,6 +122,8 @@ istream& istream::read(char *s, int n)
if (_gcount != n)
set(ios::failbit|ios::eofbit);
}
+ else
+ _gcount = 0;
return *this;
}
@@ -307,6 +311,13 @@ READ_INT(unsigned long long)
READ_INT(bool)
#endif
+istream& istream::operator>>(long double& x)
+{
+ if (ipfx0())
+ scan("%lg", &x);
+ return *this;
+}
+
istream& istream::operator>>(double& x)
{
if (ipfx0())
@@ -552,7 +563,7 @@ ostream& ostream::operator<<(double n)
prec = 6; /* default */
// Do actual conversion.
-#ifdef USE_DTOA
+#ifdef _IO_USE_DTOA
if (_IO_outfloat(n, rdbuf(), format_char, width(0),
prec, flags(),
flags() & ios::showpos ? '+' : 0,
@@ -710,7 +721,7 @@ streampos ostream::tellp()
ostream& ostream::flush()
{
- if (_strbuf->_jumps->__sync(_strbuf))
+ if (_strbuf->sync())
set(ios::badbit);
return *this;
}
diff --git a/gnu/lib/libg++/libio/ioungetc.c b/gnu/lib/libg++/libio/ioungetc.c
index 7b983ed..b52e4a2 100644
--- a/gnu/lib/libg++/libio/ioungetc.c
+++ b/gnu/lib/libg++/libio/ioungetc.c
@@ -29,7 +29,7 @@ _IO_ungetc(c, fp)
int c;
_IO_FILE *fp;
{
- COERCE_FILE(fp);
+ CHECK_FILE(fp, EOF);
if (c == EOF)
return EOF;
return _IO_sputbackc(fp, (unsigned char)c);
diff --git a/gnu/lib/libg++/libio/iovfprintf.c b/gnu/lib/libg++/libio/iovfprintf.c
index feda569..e3fb2da 100644
--- a/gnu/lib/libg++/libio/iovfprintf.c
+++ b/gnu/lib/libg++/libio/iovfprintf.c
@@ -196,7 +196,7 @@ _IO_vfprintf(fp, fmt0, ap)
#ifdef FLOATING_POINT
int softsign; /* temporary negative sign for floats */
double _double; /* double precision arguments %[eEfgG] */
-#ifndef USE_DTOA
+#ifndef _IO_USE_DTOA
int fpprec; /* `extra' floating precision in [eEfgG] */
#endif
#endif
@@ -256,7 +256,7 @@ _IO_vfprintf(fp, fmt0, ap)
flags = 0;
dprec = 0;
-#if defined(FLOATING_POINT) && !defined (USE_DTOA)
+#if defined(FLOATING_POINT) && !defined (_IO_USE_DTOA)
fpprec = 0;
#endif
width = 0;
@@ -362,7 +362,7 @@ reswitch: switch (ch) {
case 'g':
case 'G':
_double = va_arg(ap, double);
-#ifdef USE_DTOA
+#ifdef _IO_USE_DTOA
{
int fmt_flags = 0;
int fill = ' ';
@@ -564,7 +564,7 @@ number: if ((dprec = prec) >= 0)
/*
* compute actual size, so we know how much to pad.
*/
-#if defined(FLOATING_POINT) && !defined (USE_DTOA)
+#if defined(FLOATING_POINT) && !defined (_IO_USE_DTOA)
fieldsz = size + fpprec;
#else
fieldsz = size;
@@ -602,7 +602,7 @@ number: if ((dprec = prec) >= 0)
/* the string or number proper */
PRINT(cp, size);
-#if defined(FLOATING_POINT) && !defined (USE_DTOA)
+#if defined(FLOATING_POINT) && !defined (_IO_USE_DTOA)
/* trailing f.p. zeroes */
PAD_0(fpprec);
#endif
@@ -622,7 +622,7 @@ error:
/* NOTREACHED */
}
-#if defined(FLOATING_POINT) && !defined(USE_DTOA)
+#if defined(FLOATING_POINT) && !defined(_IO_USE_DTOA)
static char *exponent(register char *p, register int exp, int fmtch)
{
@@ -882,4 +882,4 @@ eformat: if (expcnt) {
return (t - startp);
}
-#endif /* defined(FLOATING_POINT) && !defined(USE_DTOA) */
+#endif /* defined(FLOATING_POINT) && !defined(_IO_USE_DTOA) */
diff --git a/gnu/lib/libg++/libio/iovfscanf.c b/gnu/lib/libg++/libio/iovfscanf.c
index abf1e58..85168af 100644
--- a/gnu/lib/libg++/libio/iovfscanf.c
+++ b/gnu/lib/libg++/libio/iovfscanf.c
@@ -105,7 +105,7 @@ static char sccsid[] = "%W% (Berkeley) %G%";
extern u_long strtoul __P((const char*, char**, int));
extern long strtol __P((const char*, char**, int));
static const u_char *__sccl __P((char *tab, const u_char *fmt));
-#ifndef USE_DTOA
+#ifndef _IO_USE_DTOA
extern double atof();
#endif
@@ -655,7 +655,7 @@ literal:
if ((flags & SUPPRESS) == 0) {
double res;
*p = 0;
-#ifdef USE_DTOA
+#ifdef _IO_USE_DTOA
res = _IO_strtod(buf, NULL);
#else
res = atof(buf);
diff --git a/gnu/lib/libg++/libio/stdiostream.cc b/gnu/lib/libg++/libio/stdiostream.cc
index eb3dd16..f6de524 100644
--- a/gnu/lib/libg++/libio/stdiostream.cc
+++ b/gnu/lib/libg++/libio/stdiostream.cc
@@ -68,6 +68,19 @@ stdiobuf::~stdiobuf()
streamsize stdiobuf::sys_read(char* buf, streamsize size)
{
+ // A minor optimization, but it makes a noticable difference.
+ // A bigger optimization would be to write stdiobuf::underflow,
+ // but that has some modularity disadvantages. Re-evaluate that
+ // after we have gotten rid of the double indirection. FIXME
+ if (size == 1)
+ {
+ register ch = getc(_file);
+ if (ch == EOF)
+ return 0;
+ *buf = (char)ch;
+ return 1;
+ }
+ else
return fread(buf, 1, size, _file);
}
diff --git a/gnu/lib/libg++/libio/strstream.cc b/gnu/lib/libg++/libio/strstream.cc
index c17d683..e5917f0 100644
--- a/gnu/lib/libg++/libio/strstream.cc
+++ b/gnu/lib/libg++/libio/strstream.cc
@@ -76,7 +76,7 @@ char *strstreambuf::str()
return base();
}
-_IO_ssize_t strstreambuf::pcount() { return _IO_str_count (this); }
+_IO_ssize_t strstreambuf::pcount () { return _IO_write_ptr - _IO_write_base; }
int strstreambuf::overflow(int c /* = EOF */)
{
OpenPOWER on IntegriCloud