From 764b562f42c6ac7f02e0911cab47f87c827bf3bd Mon Sep 17 00:00:00 2001 From: Tim Moore Date: Mon, 20 Apr 2009 12:56:51 +0200 Subject: fix a bug with %% in format strings * translate.cxx (c_unparser::visit_print_format): Always use _stp_printf if a format string contains "%%". Previously a format string with no arguments would always be printed with _stp_print. * testsuite/systemtap.printf/basic6.stp: New test for %% in format strings. * testsuite/systemtap.printf/basic6.exp: test driver * testsuite/systemtap.examples/grapher.stp: Remove workaround for "%%" literal problem. --- translate.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'translate.cxx') diff --git a/translate.cxx b/translate.cxx index 46fea6e7..f7868ceb 100644 --- a/translate.cxx +++ b/translate.cxx @@ -4172,7 +4172,8 @@ c_unparser::visit_print_format (print_format* e) int use_print = 0; string format_string = print_format::components_to_string(components); - if (tmp.size() == 0 || (tmp.size() == 1 && format_string == "%s")) + if ((tmp.size() == 0 && format_string.find("%%") == std::string::npos) + || (tmp.size() == 1 && format_string == "%s")) use_print = 1; else if (tmp.size() == 1 && e->args[0]->tok->type == tok_string -- cgit