diff --git a/libstdc++/ChangeLog b/libstdc++/ChangeLog index d9a51273ca4..88a4e9552c7 100644 --- a/libstdc++/ChangeLog +++ b/libstdc++/ChangeLog @@ -1,3 +1,13 @@ +Sun Jan 25 14:01:50 1998 Jason Merrill + + * std/bastring.h (unique): We only need length bytes. + (c_str): Avoid writing over random memory. + #include . + Lose _G_ALLOC_CONTROL. + * std/bastring.cc: Likewise. + (nilRep): Add initializer for selfish. + * sinst.cc: Just #include . + Tue Jan 13 21:23:05 1998 H.J. Lu (hjl@gnu.org) * configure.in (configdirs): Include testsuite only if diff --git a/libstdc++/sinst.cc b/libstdc++/sinst.cc index b8856fcd063..79c31a36933 100644 --- a/libstdc++/sinst.cc +++ b/libstdc++/sinst.cc @@ -33,7 +33,7 @@ #endif #endif -#include +#include #ifdef C typedef char c; diff --git a/libstdc++/std/bastring.cc b/libstdc++/std/bastring.cc index 7556ed9c609..30a2382f90b 100644 --- a/libstdc++/std/bastring.cc +++ b/libstdc++/std/bastring.cc @@ -25,9 +25,6 @@ // Written by Jason Merrill based upon the specification by Takanori Adachi // in ANSI X3J16/94-0013R2. -#include -#include - extern "C++" { template inline void * basic_string ::Rep:: @@ -47,11 +44,7 @@ operator delete (void * ptr) template inline size_t basic_string ::Rep:: -#if _G_ALLOC_CONTROL -default_frob (size_t s) -#else frob_size (size_t s) -#endif { size_t i = 16; while (i < s) i *= 2; @@ -83,11 +76,7 @@ clone () template inline bool basic_string ::Rep:: -#ifdef _G_ALLOC_CONTROL -default_excess (size_t s, size_t r) -#else excess_slop (size_t s, size_t r) -#endif { return 2 * (s <= 16 ? 16 : s) < r; } @@ -520,20 +509,10 @@ getline (istream &is, basic_string & s, charT delim) template basic_string ::Rep -basic_string::nilRep = { 0, 0, 1 }; +basic_string::nilRep = { 0, 0, 1, false }; template const basic_string ::size_type basic_string ::npos; -#ifdef _G_ALLOC_CONTROL -template -bool (*basic_string ::Rep::excess_slop) (size_t, size_t) - = basic_string ::Rep::default_excess; - -template -size_t (*basic_string ::Rep::frob_size) (size_t) - = basic_string ::Rep::default_frob; -#endif - } // extern "C++" diff --git a/libstdc++/std/bastring.h b/libstdc++/std/bastring.h index 5b1d651e00f..cbc6e4384c8 100644 --- a/libstdc++/std/bastring.h +++ b/libstdc++/std/bastring.h @@ -84,22 +84,8 @@ private: inline void move (size_t, const charT *, size_t); inline void set (size_t, const charT, size_t); -#if _G_ALLOC_CONTROL - // These function pointers allow you to modify the allocation policy used - // by the string classes. By default they expand by powers of two, but - // this may be excessive for space-critical applications. - - // Returns true if ALLOCATED is too much larger than LENGTH - static bool (*excess_slop) (size_t length, size_t allocated); - inline static bool default_excess (size_t, size_t); - - // Returns a good amount of space to allocate for a string of length LENGTH - static size_t (*frob_size) (size_t length); - inline static size_t default_frob (size_t); -#else inline static bool excess_slop (size_t, size_t); inline static size_t frob_size (size_t); -#endif private: Rep &operator= (const Rep &); @@ -273,7 +259,7 @@ public: private: static charT eos () { return traits::eos (); } - void unique () { if (rep ()->ref > 1) alloc (capacity (), true); } + void unique () { if (rep ()->ref > 1) alloc (length (), true); } void selfish () { unique (); rep ()->selfish = true; } public: @@ -304,7 +290,7 @@ private: public: const charT* c_str () const - { terminate (); return data (); } + { if (length () == 0) return ""; terminate (); return data (); } void resize (size_type n, charT c); void resize (size_type n) { resize (n, eos ()); } @@ -621,4 +607,6 @@ getline (istream&, basic_string &, charT delim = '\n') } // extern "C++" +#include + #endif