From 3872d37d18fb4e3c92df4c5816876e651e1fd3bf Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Mon, 17 May 2010 16:53:21 +0000 Subject: [PATCH] PR gdb/11092 * c-lang.c (c_printstr): Compute real length of NUL terminated string at first. --- gdb/ChangeLog | 6 ++++++ gdb/c-lang.c | 26 +++++++++++++------------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bf3d4382e9c..92fe6fb7ac7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-05-17 Andreas Schwab + + PR gdb/11092 + * c-lang.c (c_printstr): Compute real length of NUL terminated + string at first. + 2010-05-17 Pierre Muller * dwarf2read.c (read_set_type): Set type length if diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 63be331529f..40c417256bf 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -390,6 +390,19 @@ c_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, int finished = 0; int need_escape = 0; + if (length == -1) + { + unsigned long current_char = 1; + + for (i = 0; current_char; ++i) + { + QUIT; + current_char = extract_unsigned_integer (string + i * width, + width, byte_order); + } + length = i; + } + /* If the string was not truncated due to `set print elements', and the last byte of it is a null, we don't print that, in traditional C style. */ @@ -424,19 +437,6 @@ c_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, return; } - if (length == -1) - { - unsigned long current_char = 1; - - for (i = 0; current_char; ++i) - { - QUIT; - current_char = extract_unsigned_integer (string + i * width, - width, byte_order); - } - length = i; - } - /* Arrange to iterate over the characters, in wchar_t form. */ iter = make_wchar_iterator (string, length * width, encoding, width); cleanup = make_cleanup_wchar_iterator (iter); -- 2.30.2