This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 40/40] fix up xml-support.c


xml-support.c has a function that returns a cleanup via an out parameter.

This changes this function to be a normal cleanup constructor --
returning the cleanup directly and returning the other result via an
out parameter.

This is sort of a hack, but it lets the checker work here.

I also noticed that gdb_xml_create_parser_and_cleanup is not really
needed, so I removed it.

	* xml-support.c (gdb_xml_create_parser_and_cleanup_1): Return
	a cleanup.  Remove 'old_chain' argument.  Add 'parser_result'
	argument.
	(gdb_xml_create_parser_and_cleanup): Remove.
	(gdb_xml_parse_quick): Use gdb_xml_create_parser_and_cleanup_1.
	(xml_process_xincludes): Update.
	* xml-support.h (gdb_xml_create_parser_and_cleanup): Don't
	declare.
---
 gdb/xml-support.c | 39 ++++++++++++---------------------------
 gdb/xml-support.h |  7 -------
 2 files changed, 12 insertions(+), 34 deletions(-)

diff --git a/gdb/xml-support.c b/gdb/xml-support.c
index b777814..7fdbf7e 100644
--- a/gdb/xml-support.c
+++ b/gdb/xml-support.c
@@ -440,17 +440,18 @@ gdb_xml_cleanup (void *arg)
   xfree (parser);
 }
 
-/* Initialize and return a parser.  Register a cleanup to destroy the
-   parser.  */
+/* Initialize a parser and store it to *PARSER_RESULT.  Register a
+   cleanup to destroy the parser.  */
 
-static struct gdb_xml_parser *
+static struct cleanup *
 gdb_xml_create_parser_and_cleanup_1 (const char *name,
 				     const struct gdb_xml_element *elements,
-				     void *user_data, struct cleanup **old_chain)
+				     void *user_data,
+				     struct gdb_xml_parser **parser_result)
 {
   struct gdb_xml_parser *parser;
   struct scope_level start_scope;
-  struct cleanup *dummy;
+  struct cleanup *result;
 
   /* Initialize the parser.  */
   parser = XZALLOC (struct gdb_xml_parser);
@@ -476,25 +477,8 @@ gdb_xml_create_parser_and_cleanup_1 (const char *name,
   start_scope.elements = elements;
   VEC_safe_push (scope_level_s, parser->scopes, &start_scope);
 
-  if (old_chain == NULL)
-    old_chain = &dummy;
-
-  *old_chain = make_cleanup (gdb_xml_cleanup, parser);
-  return parser;
-}
-
-/* Initialize and return a parser.  Register a cleanup to destroy the
-   parser.  */
-
-struct gdb_xml_parser *
-gdb_xml_create_parser_and_cleanup (const char *name,
-				   const struct gdb_xml_element *elements,
-				   void *user_data)
-{
-  struct cleanup *old_chain;
-
-  return gdb_xml_create_parser_and_cleanup_1 (name, elements, user_data,
-					      &old_chain);
+  *parser_result = parser;
+  return make_cleanup (gdb_xml_cleanup, parser);
 }
 
 /* External entity handler.  The only external entities we support
@@ -623,8 +607,8 @@ gdb_xml_parse_quick (const char *name, const char *dtd_name,
   struct cleanup *back_to;
   int result;
 
-  parser = gdb_xml_create_parser_and_cleanup_1 (name, elements,
-						user_data, &back_to);
+  back_to = gdb_xml_create_parser_and_cleanup_1 (name, elements,
+						 user_data, &parser);
   if (dtd_name != NULL)
     gdb_xml_use_dtd (parser, dtd_name);
   result = gdb_xml_parse (parser, document);
@@ -897,7 +881,8 @@ xml_process_xincludes (const char *name, const char *text,
   obstack_init (&data->obstack);
   back_to = make_cleanup (xml_xinclude_cleanup, data);
 
-  parser = gdb_xml_create_parser_and_cleanup (name, xinclude_elements, data);
+  gdb_xml_create_parser_and_cleanup_1 (name, xinclude_elements,
+				       data, &parser);
   parser->is_xinclude = 1;
 
   data->include_depth = depth;
diff --git a/gdb/xml-support.h b/gdb/xml-support.h
index a319678..a3a15ca 100644
--- a/gdb/xml-support.h
+++ b/gdb/xml-support.h
@@ -171,13 +171,6 @@ struct gdb_xml_element
   gdb_xml_element_end_handler *end_handler;
 };
 
-/* Initialize and return a parser.  Register a cleanup to destroy the
-   parser.  */
-
-struct gdb_xml_parser *gdb_xml_create_parser_and_cleanup
-  (const char *name, const struct gdb_xml_element *elements,
-   void *user_data);
-
 /* Associate DTD_NAME, which must be the name of a compiled-in DTD,
    with PARSER.  */
 
-- 
1.8.1.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]