diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2020-09-14 11:12:55 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2020-09-14 11:30:58 -0400 |
commit | 8400a90d19c5c53f7100421c688fb896789048b9 (patch) | |
tree | dbf3aff829ab551c14a040ac7717e187d7417300 /gdb/xml-tdesc.c | |
parent | b1766e7ce88647c8002928aeb8a9f04048c494ae (diff) | |
download | gdb-8400a90d19c5c53f7100421c688fb896789048b9.zip gdb-8400a90d19c5c53f7100421c688fb896789048b9.tar.gz gdb-8400a90d19c5c53f7100421c688fb896789048b9.tar.bz2 |
gdb: change xml_fetch_another a function_view
The xml_fetch_another is currently a plain function pointer type, with a
`void *` baton parameter. To improve type-safety, change this to a
function_view. Any required data is captured by a lambda at the call
site.
gdb/ChangeLog:
* xml-support.h (xml_fetch_another): Change type to be a
function_view.
(xml_process_xincludes): Remove baton parameter.
(xml_fetch_content_from_file): Change baton parameter to
dirname.
* xml-support.c (struct xinclude_parsing_data)
<xinclude_parsing_data>: Remove baton parameter.
<fetcher_baton>: Remove.
(xinclude_start_include): Adjust.
(xml_process_xincludes): Adjust.
(xml_fetch_content_from_file): Replace baton parameter with
dirname.
* xml-syscall.c (syscall_parse_xml): Remove baton parameter.
(xml_init_syscalls_info): Use a lambda.
* xml-tdesc.c (tdesc_parse_xml): Remove baton parameter.
(file_read_description_xml): Use a lambda.
(fetch_available_features_from_target): Change baton parameter
to target_ops.
(target_read_description_xml): Use a lambda.
(target_fetch_description_xml): Use a lambda.
(string_read_description_xml): Update.
Change-Id: I7ba4b8f5e97fc6a952c6c20ccc3be92a06cc2bd2
Diffstat (limited to 'gdb/xml-tdesc.c')
-rw-r--r-- | gdb/xml-tdesc.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/gdb/xml-tdesc.c b/gdb/xml-tdesc.c index 6f108a4..6e21ff4 100644 --- a/gdb/xml-tdesc.c +++ b/gdb/xml-tdesc.c @@ -617,8 +617,7 @@ static const struct gdb_xml_element tdesc_elements[] = { /* Parse DOCUMENT into a target description and return it. */ static struct target_desc * -tdesc_parse_xml (const char *document, xml_fetch_another fetcher, - void *fetcher_baton) +tdesc_parse_xml (const char *document, xml_fetch_another fetcher) { struct tdesc_parsing_data data; @@ -627,7 +626,7 @@ tdesc_parse_xml (const char *document, xml_fetch_another fetcher, if (!xml_process_xincludes (expanded_text, _("target description"), - document, fetcher, fetcher_baton, 0)) + document, fetcher, 0)) { warning (_("Could not load XML target description; ignoring")); return NULL; @@ -673,8 +672,13 @@ file_read_description_xml (const char *filename) return NULL; } - return tdesc_parse_xml (tdesc_str->data (), xml_fetch_content_from_file, - (void *) ldirname (filename).c_str ()); + const std::string dirname = ldirname (filename); + auto fetch_another = [&dirname] (const char *name) + { + return xml_fetch_content_from_file (name, dirname.c_str ()); + }; + + return tdesc_parse_xml (tdesc_str->data (), fetch_another); } /* Read a string representation of available features from the target, @@ -685,10 +689,8 @@ file_read_description_xml (const char *filename) for <xi:include>. */ static gdb::optional<gdb::char_vector> -fetch_available_features_from_target (const char *name, void *baton_) +fetch_available_features_from_target (const char *name, target_ops *ops) { - struct target_ops *ops = (struct target_ops *) baton_; - /* Read this object as a string. This ensures that a NUL terminator is added. */ return target_read_stralloc (ops, @@ -708,9 +710,12 @@ target_read_description_xml (struct target_ops *ops) if (!tdesc_str) return NULL; - return tdesc_parse_xml (tdesc_str->data (), - fetch_available_features_from_target, - ops); + auto fetch_another = [ops] (const char *name) + { + return fetch_available_features_from_target (name, ops); + }; + + return tdesc_parse_xml (tdesc_str->data (), fetch_another); } /* Fetches an XML target description using OPS, processing @@ -737,11 +742,14 @@ target_fetch_description_xml (struct target_ops *ops) if (!tdesc_str) return {}; + auto fetch_another = [ops] (const char *name) + { + return fetch_available_features_from_target (name, ops); + }; std::string output; if (!xml_process_xincludes (output, _("target description"), - tdesc_str->data (), - fetch_available_features_from_target, ops, 0)) + tdesc_str->data (), fetch_another, 0)) { warning (_("Could not load XML target description; ignoring")); return {}; @@ -755,9 +763,9 @@ target_fetch_description_xml (struct target_ops *ops) const struct target_desc * string_read_description_xml (const char *xml) { - return tdesc_parse_xml (xml, [] (const char *href, void *baton) + return tdesc_parse_xml (xml, [] (const char *href) { error (_("xincludes are unsupported with this method")); return gdb::optional<gdb::char_vector> (); - }, nullptr); + }); } |