PR gdb/11092
authorAndreas Schwab <schwab@linux-m68k.org>
Mon, 17 May 2010 16:53:21 +0000 (16:53 +0000)
committerAndreas Schwab <schwab@linux-m68k.org>
Mon, 17 May 2010 16:53:21 +0000 (16:53 +0000)
* c-lang.c (c_printstr): Compute real length of NUL terminated
string at first.

gdb/ChangeLog
gdb/c-lang.c

index bf3d438..92fe6fb 100644 (file)
@@ -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
index 63be331..40c4172 100644 (file)
@@ -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);