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>
This commit is contained in:
Gabe Black
2018-09-11 00:55:28 -07:00
parent 36276ba239
commit 1023a92971
2 changed files with 4 additions and 0 deletions

View File

@@ -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

View File

@@ -54,6 +54,7 @@ struct Print
std::ios::fmtflags saved_flags;
char saved_fill;
int saved_precision;
int saved_width;
Format fmt;
void process();