diff options
-rw-r--r-- | libstdc++/ChangeLog | 10 | ||||
-rw-r--r-- | libstdc++/sinst.cc | 2 | ||||
-rw-r--r-- | libstdc++/std/bastring.cc | 23 | ||||
-rw-r--r-- | libstdc++/std/bastring.h | 20 |
4 files changed, 16 insertions, 39 deletions
diff --git a/libstdc++/ChangeLog b/libstdc++/ChangeLog index d9a5127..88a4e95 100644 --- a/libstdc++/ChangeLog +++ b/libstdc++/ChangeLog @@ -1,3 +1,13 @@ +Sun Jan 25 14:01:50 1998 Jason Merrill <jason@yorick.cygnus.com> + + * std/bastring.h (unique): We only need length bytes. + (c_str): Avoid writing over random memory. + #include <std/bastring.cc>. + Lose _G_ALLOC_CONTROL. + * std/bastring.cc: Likewise. + (nilRep): Add initializer for selfish. + * sinst.cc: Just #include <string>. + 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 b8856fc..79c31a3 100644 --- a/libstdc++/sinst.cc +++ b/libstdc++/sinst.cc @@ -33,7 +33,7 @@ #endif #endif -#include <std/bastring.cc> +#include <string> #ifdef C typedef char c; diff --git a/libstdc++/std/bastring.cc b/libstdc++/std/bastring.cc index 7556ed9..30a2382 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 <cstddef> -#include <std/bastring.h> - extern "C++" { template <class charT, class traits, class Allocator> inline void * basic_string <charT, traits, Allocator>::Rep:: @@ -47,11 +44,7 @@ operator delete (void * ptr) template <class charT, class traits, class Allocator> inline size_t basic_string <charT, traits, Allocator>::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 <class charT, class traits, class Allocator> inline bool basic_string <charT, traits, Allocator>::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 <charT, traits, Allocator>& s, charT delim) template <class charT, class traits, class Allocator> basic_string <charT, traits, Allocator>::Rep -basic_string<charT, traits, Allocator>::nilRep = { 0, 0, 1 }; +basic_string<charT, traits, Allocator>::nilRep = { 0, 0, 1, false }; template <class charT, class traits, class Allocator> const basic_string <charT, traits, Allocator>::size_type basic_string <charT, traits, Allocator>::npos; -#ifdef _G_ALLOC_CONTROL -template <class charT, class traits, class Allocator> -bool (*basic_string <charT, traits, Allocator>::Rep::excess_slop) (size_t, size_t) - = basic_string <charT, traits, Allocator>::Rep::default_excess; - -template <class charT, class traits, class Allocator> -size_t (*basic_string <charT, traits, Allocator>::Rep::frob_size) (size_t) - = basic_string <charT, traits, Allocator>::Rep::default_frob; -#endif - } // extern "C++" diff --git a/libstdc++/std/bastring.h b/libstdc++/std/bastring.h index 5b1d651..cbc6e438 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, traits, Allocator>&, charT delim = '\n') } // extern "C++" +#include <std/bastring.cc> + #endif |