PR ld/13343
[deliverable/binutils-gdb.git] / gdb / xml-support.c
index 0bcb9756e90b87943b5144549bbe82a9c221c09a..884b7161060f2881096893b66bd10e700005e165 100644 (file)
@@ -1,7 +1,6 @@
 /* Helper routines for parsing XML using Expat.
 
-   Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright (C) 2006-2012 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -138,6 +137,22 @@ gdb_xml_error (struct gdb_xml_parser *parser, const char *format, ...)
   throw_verror (XML_PARSE_ERROR, format, ap);
 }
 
+/* Find the attribute named NAME in the set of parsed attributes
+   ATTRIBUTES.  Returns NULL if not found.  */
+
+struct gdb_xml_value *
+xml_find_attribute (VEC(gdb_xml_value_s) *attributes, const char *name)
+{
+  struct gdb_xml_value *value;
+  int ix;
+
+  for (ix = 0; VEC_iterate (gdb_xml_value_s, attributes, ix, value); ix++)
+    if (strcmp (value->name, name) == 0)
+      return value;
+
+  return NULL;
+}
+
 /* Clean up a vector of parsed attribute values.  */
 
 static void
@@ -442,7 +457,7 @@ gdb_xml_create_parser_and_cleanup_1 (const char *name,
   if (parser->expat_parser == NULL)
     {
       xfree (parser);
-      nomem (0);
+      malloc_failure (0);
     }
 
   parser->name = name;
@@ -758,7 +773,7 @@ xinclude_start_include (struct gdb_xml_parser *parser,
                        void *user_data, VEC(gdb_xml_value_s) *attributes)
 {
   struct xinclude_parsing_data *data = user_data;
-  char *href = VEC_index (gdb_xml_value_s, attributes, 0)->value;
+  char *href = xml_find_attribute (attributes, "href")->value;
   struct cleanup *back_to;
   char *text, *output;
 
@@ -974,68 +989,6 @@ show_debug_xml (struct ui_file *file, int from_tty,
   fprintf_filtered (file, _("XML debugging is %s.\n"), value);
 }
 
-/* Return a malloc allocated string with special characters from TEXT
-   replaced by entity references.  */
-
-char *
-xml_escape_text (const char *text)
-{
-  char *result;
-  int i, special;
-
-  /* Compute the length of the result.  */
-  for (i = 0, special = 0; text[i] != '\0'; i++)
-    switch (text[i])
-      {
-      case '\'':
-      case '\"':
-       special += 5;
-       break;
-      case '&':
-       special += 4;
-       break;
-      case '<':
-      case '>':
-       special += 3;
-       break;
-      default:
-       break;
-      }
-
-  /* Expand the result.  */
-  result = xmalloc (i + special + 1);
-  for (i = 0, special = 0; text[i] != '\0'; i++)
-    switch (text[i])
-      {
-      case '\'':
-       strcpy (result + i + special, "&apos;");
-       special += 5;
-       break;
-      case '\"':
-       strcpy (result + i + special, "&quot;");
-       special += 5;
-       break;
-      case '&':
-       strcpy (result + i + special, "&amp;");
-       special += 4;
-       break;
-      case '<':
-       strcpy (result + i + special, "&lt;");
-       special += 3;
-       break;
-      case '>':
-       strcpy (result + i + special, "&gt;");
-       special += 3;
-       break;
-      default:
-       result[i + special] = text[i];
-       break;
-      }
-  result[i + special] = '\0';
-
-  return result;
-}
-
 void
 obstack_xml_printf (struct obstack *obstack, const char *format, ...)
 {
@@ -1090,7 +1043,7 @@ xml_fetch_content_from_file (const char *filename, void *baton)
       char *fullname = concat (dirname, "/", filename, (char *) NULL);
 
       if (fullname == NULL)
-       nomem (0);
+       malloc_failure (0);
       file = fopen (fullname, FOPEN_RT);
       xfree (fullname);
     }
This page took 0.02595 seconds and 4 git commands to generate.