diff options
author | Andreas Schwab <schwab@suse.de> | 2010-05-17 16:53:19 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2010-05-17 16:53:19 +0000 |
commit | ba17b7cc6eafadbb6f94ca307ee5e955c7cda506 (patch) | |
tree | 3ce14ed44fedafee0e2d9f9dbfbca083b4fff399 /gdb/c-lang.c | |
parent | b88d0e222ed52293cb18d231982b84ac7ab2c213 (diff) | |
download | gdb-ba17b7cc6eafadbb6f94ca307ee5e955c7cda506.tar.gz |
PR gdb/11092
* c-lang.c (c_printstr): Compute real length of NUL terminated
string at first.
Diffstat (limited to 'gdb/c-lang.c')
-rw-r--r-- | gdb/c-lang.c | 26 |
1 files changed, 13 insertions, 13 deletions
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); |