diff -aur src.old/BuiltIn/stringOpSymbol.cc src/BuiltIn/stringOpSymbol.cc --- src.old/BuiltIn/stringOpSymbol.cc 2008-07-08 19:43:23.000000000 +0200 +++ src/BuiltIn/stringOpSymbol.cc 2008-07-09 13:02:19.000000000 +0200 @@ -220,18 +220,7 @@ case CODE('f', 'l'): { bool error; - //double fl = stringToDouble(left.c_str(), error); - // - // This messing about is needed because Rope::c_str() - // fails in libstdc++-v3 - // - int len = left.length(); - char* t = new char[len + 1]; - left.copy(t); - t[len] = '\0'; - double fl = stringToDouble(t, error); - delete [] t; - // + double fl = stringToDouble(left.c_str(), error); if (error) goto fail; return floatSymbol->rewriteToFloat(subject, context, fl); @@ -591,38 +580,28 @@ if (!isalnum(subject[j])) return false; } - char* t = new char[len]; // longer than needed but who cares int dLen = len - (i + 1); - subject.copy(i + 1, dLen, t); - t[dLen] = '\0'; - if (mpz_set_str(denominator.get_mpz_t(), t, base) != 0) + crope subject_subrope; + subject_subrope = subject.substr(i + 1, dLen); + if (mpz_set_str(denominator.get_mpz_t(), subject_subrope.c_str(), base) != 0) { - delete [] t; return false; } - subject.copy(0, i, t); - t[i] = '\0'; - if (mpz_set_str(numerator.get_mpz_t(), t, base) != 0) + subject_subrope = subject.substr(0,i); + if (mpz_set_str(numerator.get_mpz_t(), subject_subrope.c_str(), base) != 0) { - delete [] t; return false; } - delete [] t; return true; } else return false; } } - char* t = new char[len + 1]; - subject.copy(t); - t[len] = '\0'; - if (mpz_set_str(numerator.get_mpz_t(), t, base) == 0) + if (mpz_set_str(numerator.get_mpz_t(), subject.c_str(), base) == 0) { - delete [] t; denominator = 0; return true; } - delete [] t; return false; } diff -aur src.old/Utility/macros.hh src/Utility/macros.hh --- src.old/Utility/macros.hh 2008-07-08 19:43:23.000000000 +0200 +++ src/Utility/macros.hh 2008-07-08 20:08:01.000000000 +0200 @@ -66,6 +66,7 @@ #include #include #include +#include using namespace std; //