[2/2] gdb: Use string_printf to format int fields instead of a fixed size buffer

Message ID 81914f01b8c70c20744c2960c4a71136bcb6e913.1542745482.git.andrew.burgess@embecosm.com
State New, archived
Headers

Commit Message

Andrew Burgess Nov. 20, 2018, 8:30 p.m. UTC
  This patch removes a FIXME comment from cli-out.c, now instead of
formatting integers into a fixed size buffer we build a std::string
and extract the formatted integer from that.

The old code using a fixed size buffer was probably fine (the integer
was not going to overflow it) and probably slightly more efficient
(avoids building a std::string) however, given we already have utility
code in GDB that will allow the 'FIXME' comment to be removed, it
seems like an easy improvement.

gdb/ChangeLog:

	* cli-out.c (cli_ui_out::do_field_int): Use string_printf rather
	than a fixed size buffer.
---
 gdb/ChangeLog | 5 +++++
 gdb/cli-out.c | 6 ++----
 2 files changed, 7 insertions(+), 4 deletions(-)
  

Comments

Tom Tromey Nov. 20, 2018, 10:17 p.m. UTC | #1
>>>>> "Andrew" == Andrew Burgess <andrew.burgess@embecosm.com> writes:

Andrew> This patch removes a FIXME comment from cli-out.c, now instead of
Andrew> formatting integers into a fixed size buffer we build a std::string
Andrew> and extract the formatted integer from that.

Andrew> The old code using a fixed size buffer was probably fine (the integer
Andrew> was not going to overflow it) and probably slightly more efficient
Andrew> (avoids building a std::string) however, given we already have utility
Andrew> code in GDB that will allow the 'FIXME' comment to be removed, it
Andrew> seems like an easy improvement.

Andrew> gdb/ChangeLog:

Andrew> 	* cli-out.c (cli_ui_out::do_field_int): Use string_printf rather
Andrew> 	than a fixed size buffer.

Thanks.  This is ok.

Tom
  

Patch

diff --git a/gdb/cli-out.c b/gdb/cli-out.c
index 3fe131fef37..57687cd663f 100644
--- a/gdb/cli-out.c
+++ b/gdb/cli-out.c
@@ -94,14 +94,12 @@  void
 cli_ui_out::do_field_int (int fldno, int width, ui_align alignment,
 			  const char *fldname, int value)
 {
-  char buffer[20];	/* FIXME: how many chars long a %d can become? */
-
   if (m_suppress_output)
     return;
 
-  xsnprintf (buffer, sizeof (buffer), "%d", value);
+  std::string str = string_printf ("%d", value);
 
-  do_field_string (fldno, width, alignment, fldname, buffer);
+  do_field_string (fldno, width, alignment, fldname, str.c_str ());
 }
 
 /* used to omit a field */