diff options
author | Steve Reinhardt <stever@eecs.umich.edu> | 2004-01-11 15:09:27 -0800 |
---|---|---|
committer | Steve Reinhardt <stever@eecs.umich.edu> | 2004-01-11 15:09:27 -0800 |
commit | 7e07aa9300f75bb4bbdacf97dce45213e7fa69c0 (patch) | |
tree | 872a0cffb21ed08dbb9b8e1de2f694e4013c5257 /base/cprintf_formats.hh | |
parent | 54b6d8c5a8a4abd47536bf50c6f04c5535036752 (diff) | |
download | gem5-7e07aa9300f75bb4bbdacf97dce45213e7fa69c0.tar.xz |
Fix cprintf bug, plus minor cleanup & better error messages.
base/cprintf.cc:
Fix bug where a call with a format string with no specifiers
but one or more arguments would crash. Old code tried to print
extra args using last available format, but in this case there
was no format, hence the problem. Now we just print "<extra arg>"
for each extra arg.
Also reorganized code a bit to make scope of fmt variable
match the scope in which you can be confident it's meaningful.
base/cprintf.hh:
Print specific error message instead of calling format_invalid().
base/cprintf_formats.hh:
Clear Format object in constructor.
Use specific error messages instead of format_invalid() function.
--HG--
extra : convert_revision : 87d5e902174e3eb2583131d056742af166540db0
Diffstat (limited to 'base/cprintf_formats.hh')
-rw-r--r-- | base/cprintf_formats.hh | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/base/cprintf_formats.hh b/base/cprintf_formats.hh index 1e5de4fdf..b921c0506 100644 --- a/base/cprintf_formats.hh +++ b/base/cprintf_formats.hh @@ -43,8 +43,10 @@ struct Format int precision; int width; - Format() { } - void clear() { + Format() { clear(); } + + void clear() + { alternate_form = false; flush_left = false; print_sign = false; @@ -58,15 +60,6 @@ struct Format } }; -inline void -format_invalid(std::ostream &out) -{ - using namespace std; - - out << "format invalid!!!" << endl; -} - - template <typename T> inline void _format_char(std::ostream &out, const T& data, Format &fmt) @@ -233,7 +226,7 @@ _format_string(std::ostream &out, const T& data, Format &fmt) template <typename T> inline void format_char(std::ostream &out, const T& data, Format &fmt) -{ format_invalid(out); } +{ out << "<bad arg type for char format>"; } inline void format_char(std::ostream &out, char data, Format &fmt) @@ -329,7 +322,7 @@ format_integer(std::ostream &out, unsigned long long data, Format &fmt) template <typename T> inline void format_float(std::ostream &out, const T& data, Format &fmt) -{ format_invalid(out); } +{ out << "<bad arg type for float format>"; } inline void format_float(std::ostream &out, float data, Format &fmt) |