diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/c-lang.c | 26 |
2 files changed, 19 insertions, 13 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bf3d438..92fe6fb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-05-17 Andreas Schwab <schwab@redhat.com> + + PR gdb/11092 + * c-lang.c (c_printstr): Compute real length of NUL terminated + string at first. + 2010-05-17 Pierre Muller <muller@ics.u-strasbg.fr> * dwarf2read.c (read_set_type): Set type length if diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 63be331..40c4172 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); |