summaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-09-11 00:55:28 -0700
committerGabe Black <gabeblack@google.com>2018-09-11 21:39:05 +0000
commit1023a92971a32cdfa58e119b5fe62b91d580e729 (patch)
treeca6cf65894d8a394d415d7d091ff120d0f82eaf3 /src/base
parent36276ba2392f030250fa9dd1e1ea28a026bc51c6 (diff)
downloadgem5-1023a92971a32cdfa58e119b5fe62b91d580e729.tar.xz
base: Save and restore the width setting of streams used with cprintf.
The flags, precision, and fill character were all being saved and restored, but cprintf might also change the width setting of the stream, and that wasn't being saved or restored and could leak from the cprintf statement. This change adds the code to save and restore that value. Change-Id: Ibedb26f7f538cd3be4fe0462d2ee4e5efd62bc59 Reviewed-on: https://gem5-review.googlesource.com/12571 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/base')
-rw-r--r--src/base/cprintf.cc3
-rw-r--r--src/base/cprintf.hh1
2 files changed, 4 insertions, 0 deletions
diff --git a/src/base/cprintf.cc b/src/base/cprintf.cc
index caf1bb847..b764f60e9 100644
--- a/src/base/cprintf.cc
+++ b/src/base/cprintf.cc
@@ -47,6 +47,7 @@ Print::Print(std::ostream &stream, const std::string &format)
saved_flags = stream.flags();
saved_fill = stream.fill();
saved_precision = stream.precision();
+ saved_width = stream.width();
}
Print::Print(std::ostream &stream, const char *format)
@@ -55,6 +56,7 @@ Print::Print(std::ostream &stream, const char *format)
saved_flags = stream.flags();
saved_fill = stream.fill();
saved_precision = stream.precision();
+ saved_width = stream.width();
}
Print::~Print()
@@ -310,6 +312,7 @@ Print::end_args()
stream.flags(saved_flags);
stream.fill(saved_fill);
stream.precision(saved_precision);
+ stream.width(saved_width);
}
} // namespace cp
diff --git a/src/base/cprintf.hh b/src/base/cprintf.hh
index 14b663c9c..9141769fb 100644
--- a/src/base/cprintf.hh
+++ b/src/base/cprintf.hh
@@ -54,6 +54,7 @@ struct Print
std::ios::fmtflags saved_flags;
char saved_fill;
int saved_precision;
+ int saved_width;
Format fmt;
void process();