gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Sat, 8 May 2010 04:58:45 +0000 (04:58 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Sat, 8 May 2010 04:58:45 +0000 (04:58 +0000)
* dwarf2read.c (typename_concat): Use (char *) NULL terminated stdarg
list for the obconcat call.
* mdebugread.c (parse_symbol): Likewise.
* stabsread.c (define_symbol, read_member_functions, read_cpp_abbrev):
Likewise.
* symfile.c (obconcat): Replace the s1, s2 and s3 parameters by `...'.
New variable ap.  Remove variables len and val.
* symfile.h (obconcat): Likewise for the prototype.

gdb/ChangeLog
gdb/dwarf2read.c
gdb/mdebugread.c
gdb/stabsread.c
gdb/symfile.c
gdb/symfile.h

index 32e9cd8b06d4c8dfe70282e89af537b9b68d267b..64211b69d74fad3fb7d4c65424abf640846a70be 100644 (file)
@@ -1,3 +1,14 @@
+2010-05-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * dwarf2read.c (typename_concat): Use (char *) NULL terminated stdarg
+       list for the obconcat call.
+       * mdebugread.c (parse_symbol): Likewise.
+       * stabsread.c (define_symbol, read_member_functions, read_cpp_abbrev):
+       Likewise.
+       * symfile.c (obconcat): Replace the s1, s2 and s3 parameters by `...'.
+       New variable ap.  Remove variables len and val.
+       * symfile.h (obconcat): Likewise for the prototype.
+
 2010-05-07  Michael Snyder  <msnyder@vmware.com>
 
        * python/python.c (execute_gdb_command): Remove unused variables.
index fbd8f7673aa3f7fecd7760ed2a4d2866bff2da26..0d4f61ac467630ffbd3ed2ce37c66bf51aeae79d 100644 (file)
@@ -9200,7 +9200,7 @@ typename_concat (struct obstack *obs, const char *prefix, const char *suffix,
   else
     {
       /* We have an obstack.  */
-      return obconcat (obs, prefix, sep, suffix);
+      return obconcat (obs, prefix, sep, suffix, (char *) NULL);
     }
 }
 
index 20bf3a3adc5b14e39ac06db1ec1ff336f6ab21b3..5fb9c49abeb9e92453f2e2216e3a0a69db7b5699 100644 (file)
@@ -998,8 +998,8 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
        if (sh->iss == 0 || name[0] == '.' || name[0] == '\0')
          TYPE_TAG_NAME (t) = NULL;
        else
-         TYPE_TAG_NAME (t) = obconcat (&current_objfile->objfile_obstack,
-                                       "", "", name);
+         TYPE_TAG_NAME (t) = obconcat (&current_objfile->objfile_obstack, name,
+                                       (char *) NULL);
 
        TYPE_CODE (t) = type_code;
        TYPE_LENGTH (t) = sh->value;
index 541e7d05c2380318491e4aa8259877ec254d0dec..e1d4f3822143649c3c61a9a24bcba170bf1e3cb5 100644 (file)
@@ -1279,9 +1279,9 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
           SYMBOL_VALUE (struct_sym) = valu;
           SYMBOL_DOMAIN (struct_sym) = STRUCT_DOMAIN;
           if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
-            TYPE_NAME (SYMBOL_TYPE (sym))
-              = obconcat (&objfile->objfile_obstack, "", "",
-                          SYMBOL_LINKAGE_NAME (sym));
+            TYPE_NAME (SYMBOL_TYPE (sym)) = obconcat (&objfile->objfile_obstack,
+                                                     SYMBOL_LINKAGE_NAME (sym),
+                                                     (char *) NULL);
           add_symbol_to_list (struct_sym, &file_symbols);
         }
       
@@ -1306,9 +1306,9 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_VALUE (sym) = valu;
       SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
       if (TYPE_TAG_NAME (SYMBOL_TYPE (sym)) == 0)
-       TYPE_TAG_NAME (SYMBOL_TYPE (sym))
-         = obconcat (&objfile->objfile_obstack, "", "",
-                     SYMBOL_LINKAGE_NAME (sym));
+       TYPE_TAG_NAME (SYMBOL_TYPE (sym)) = obconcat (&objfile->objfile_obstack,
+                                                     SYMBOL_LINKAGE_NAME (sym),
+                                                     (char *) NULL);
       add_symbol_to_list (sym, &file_symbols);
 
       if (synonym)
@@ -1321,9 +1321,9 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
          SYMBOL_VALUE (typedef_sym) = valu;
          SYMBOL_DOMAIN (typedef_sym) = VAR_DOMAIN;
          if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
-           TYPE_NAME (SYMBOL_TYPE (sym))
-             = obconcat (&objfile->objfile_obstack, "", "",
-                         SYMBOL_LINKAGE_NAME (sym));
+           TYPE_NAME (SYMBOL_TYPE (sym)) = obconcat (&objfile->objfile_obstack,
+                                                     SYMBOL_LINKAGE_NAME (sym),
+                                                     (char *) NULL);
          add_symbol_to_list (typedef_sym, &file_symbols);
        }
       break;
@@ -2609,8 +2609,8 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
              make_cleanup (xfree, destr_fnlist);
              memset (destr_fnlist, 0, sizeof (struct next_fnfieldlist));
              destr_fnlist->fn_fieldlist.name
-               = obconcat (&objfile->objfile_obstack, "", "~",
-                           new_fnlist->fn_fieldlist.name);
+               = obconcat (&objfile->objfile_obstack, "~",
+                           new_fnlist->fn_fieldlist.name, (char *) NULL);
 
              destr_fnlist->fn_fieldlist.fn_fields = (struct fn_field *)
                obstack_alloc (&objfile->objfile_obstack,
@@ -2747,8 +2747,8 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
          {
                  name = "";
          }
-         fip->list->field.name =
-           obconcat (&objfile->objfile_obstack, vptr_name, name, "");
+         fip->list->field.name = obconcat (&objfile->objfile_obstack,
+                                           vptr_name, name, (char *) NULL);
          break;
 
        case 'b':               /* $vb -- a virtual bsomethingorother */
@@ -2760,15 +2760,15 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
                         symnum);
              name = "FOO";
            }
-         fip->list->field.name =
-           obconcat (&objfile->objfile_obstack, vb_name, name, "");
+         fip->list->field.name = obconcat (&objfile->objfile_obstack, vb_name,
+                                           name, (char *) NULL);
          break;
 
        default:
          invalid_cpp_abbrev_complaint (*pp);
-         fip->list->field.name =
-           obconcat (&objfile->objfile_obstack,
-                     "INVALID_CPLUSPLUS_ABBREV", "", "");
+         fip->list->field.name = obconcat (&objfile->objfile_obstack,
+                                           "INVALID_CPLUSPLUS_ABBREV",
+                                           (char *) NULL);
          break;
        }
 
index 31109abb5fd9222b865888e631e7b20b87ffe91a..883c669017a46f020be0be75fa0f7a1b2c2d1718 100644 (file)
@@ -212,19 +212,29 @@ obsavestring (const char *ptr, int size, struct obstack *obstackp)
   return p;
 }
 
-/* Concatenate strings S1, S2 and S3; return the new string.  Space is found
-   in the obstack pointed to by OBSTACKP.  */
+/* Concatenate NULL terminated variable argument list of `const char *' strings;
+   return the new string.  Space is found in the OBSTACKP.  Argument list must
+   be terminated by a sentinel expression `(char *) NULL'.  */
 
 char *
-obconcat (struct obstack *obstackp, const char *s1, const char *s2,
-         const char *s3)
-{
-  int len = strlen (s1) + strlen (s2) + strlen (s3) + 1;
-  char *val = (char *) obstack_alloc (obstackp, len);
-  strcpy (val, s1);
-  strcat (val, s2);
-  strcat (val, s3);
-  return val;
+obconcat (struct obstack *obstackp, ...)
+{
+  va_list ap;
+
+  va_start (ap, obstackp);
+  for (;;)
+    {
+      const char *s = va_arg (ap, const char *);
+
+      if (s == NULL)
+       break;
+
+      obstack_grow_str (obstackp, s);
+    }
+  va_end (ap);
+  obstack_1grow (obstackp, 0);
+
+  return obstack_finish (obstackp);
 }
 
 /* True if we are reading a symbol table. */
index a8effdad29c691b11c5e1f4a2c3b91c25ac2765e..d53c465c6d7b7fb53ad08e6e13bf7068ed4c496f 100644 (file)
@@ -458,11 +458,11 @@ extern struct partial_symtab *start_psymtab_common (struct objfile *,
 
 extern char *obsavestring (const char *, int, struct obstack *);
 
-/* Concatenate strings S1, S2 and S3; return the new string.  Space is
-   found in the OBSTACKP  */
+/* Concatenate NULL terminated variable argument list of `const char *' strings;
+   return the new string.  Space is found in the OBSTACKP.  Argument list must
+   be terminated by a sentinel expression `(char *) NULL'.  */
 
-extern char *obconcat (struct obstack *obstackp, const char *, const char *,
-                      const char *);
+extern char *obconcat (struct obstack *obstackp, ...) ATTRIBUTE_SENTINEL;
 
                        /*   Variables   */