Corrections to the way error strings are generated

This commit is contained in:
John Wiegley 2010-06-10 08:16:26 -04:00
parent 5aa1f8b624
commit 7be17fd779
6 changed files with 13 additions and 6 deletions

View file

@ -40,8 +40,6 @@ std::streamsize straccbuf::xsputn(const char * s, std::streamsize num)
if (index == 0) {
// The first item received is the format string
str = std::string(s, num);
index++;
return num;
}
else {
std::ostringstream buf;
@ -68,9 +66,9 @@ std::streamsize straccbuf::xsputn(const char * s, std::streamsize num)
buf << std::string(s, num);
str = buf.str();
index++;
return num;
}
index++;
return num;
}
} // namespace ledger

View file

@ -70,6 +70,8 @@ public:
}
void clear() {
std::ostream::clear();
buf.pubseekoff(0, ios_base::beg);
buf.str.clear();
buf.index = 0;
}
@ -79,7 +81,7 @@ public:
}
};
#define ACCUM(obj) (static_cast<straccstream&>(obj).str())
#define ACCUM(obj) (static_cast<const straccstream&>(obj).str())
} // namespace ledger

View file

@ -43,6 +43,7 @@ std::ostringstream _desc_buffer;
string error_context()
{
string context = _ctxt_buffer.str();
_ctxt_buffer.clear();
_ctxt_buffer.str("");
return context;
}

View file

@ -51,6 +51,7 @@ extern std::ostringstream _desc_buffer;
template <typename T>
inline void throw_func(const string& message) {
_desc_buffer.clear();
_desc_buffer.str("");
throw T(message);
}
@ -62,6 +63,7 @@ inline void throw_func(const string& message) {
inline void warning_func(const string& message) {
std::cerr << "Warning: " << message << std::endl;
_desc_buffer.clear();
_desc_buffer.str("");
}

View file

@ -143,8 +143,10 @@ void interactive_t::verify_arguments() const
if (wrong_arg && optional && next_arg->is_null())
wrong_arg = false;
if (wrong_arg)
if (wrong_arg) {
vlabel = next_arg->label();
break;
}
if (! dont_skip) {
if (is_seq) {

View file

@ -593,6 +593,7 @@ bool logger_func(log_level_t level)
}
*_log_stream << ' ' << _log_buffer.str() << std::endl;
_log_buffer.clear();
_log_buffer.str("");
return true;
@ -663,6 +664,7 @@ void start_timer(const char * name, log_level_t lvl)
(*i).second.begin = TRUE_CURRENT_TIME();
(*i).second.active = true;
}
_log_buffer.clear();
_log_buffer.str("");
#if defined(VERIFY_ON)