* dwarf2read.c (is_vtable_name): New function, based on logic from
authorJim Blandy <jimb@codesourcery.com>
Wed, 1 Sep 2004 04:19:22 +0000 (04:19 +0000)
committerJim Blandy <jimb@codesourcery.com>
Wed, 1 Sep 2004 04:19:22 +0000 (04:19 +0000)
read_structure_type, but passing the correct length to strncmp,
and using 'sizeof' instead of 'strlen'.
(read_structure_type): Call it.

gdb/ChangeLog
gdb/dwarf2read.c

index c181a14ddca2a638a52fc8d22df5cf77d3bbd161..45c3cc1a9feb995aebb273b3ad856c9098bf48f1 100644 (file)
@@ -1,3 +1,10 @@
+2004-08-31  Jim Blandy  <jimb@redhat.com>
+
+       * dwarf2read.c (is_vtable_name): New function, based on logic from
+       read_structure_type, but passing the correct length to strncmp,
+       and using 'sizeof' instead of 'strlen'.
+       (read_structure_type): Call it.
+
 2004-08-31  Joel Brobecker  <brobecker@gnat.com>
 
        * config/powerpc/aix.mh: Add comment.
index 4e9cdfa89f3f9b5674b46adb0b1dd5ab48c9519d..49a003f57866f620c593437deaa68562659d4be6 100644 (file)
@@ -3265,6 +3265,23 @@ dwarf2_attach_fn_fields_to_type (struct field_info *fip, struct type *type,
   TYPE_NFN_FIELDS_TOTAL (type) = total_length;
 }
 
+
+/* Returns non-zero if NAME is the name of a vtable member in CU's
+   language, zero otherwise.  */
+static int
+is_vtable_name (const char *name, struct dwarf2_cu *cu)
+{
+  static const char vptr[] = "_vptr";
+
+  /* C++ and some implementations of Java use this name.  */
+  if (strncmp (name, vptr, sizeof (vptr) - 1) == 0
+      && is_cplus_marker (name[sizeof (vptr) - 1]))
+    return 1;
+
+  return 0;
+}
+
+
 /* Called when we find the DIE that starts a structure or union scope
    (definition) to process all dies that define the members of the
    structure or union.
@@ -3403,8 +3420,6 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
              TYPE_VPTR_BASETYPE (type) = t;
              if (type == t)
                {
-                 static const char vptr_name[] =
-                 {'_', 'v', 'p', 't', 'r', '\0'};
                  int i;
 
                  /* Our own class provides vtbl ptr.  */
@@ -3414,10 +3429,7 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
                    {
                      char *fieldname = TYPE_FIELD_NAME (t, i);
 
-                     if ((strncmp (fieldname, vptr_name,
-                                    strlen (vptr_name) - 1)
-                           == 0)
-                         && is_cplus_marker (fieldname[strlen (vptr_name)]))
+                      if (is_vtable_name (fieldname, cu))
                        {
                          TYPE_VPTR_FIELDNO (type) = i;
                          break;