mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-03 05:12:28 +08:00
Make target_read_alloc & al return vectors
This patch started by changing target_read_alloc_1 to return a byte_vector, to avoid manual memory management (in target_read_alloc_1 and in the callers). To communicate failures to the callers, it actually returns a gdb::optional<gdb::byte_vector>. Adjusting target_read_stralloc was a bit more tricky, since it wants to return a buffer of char, and not gdb_byte. Since you can't just cast a gdb::byte_vector into a gdb::def_vector<char>, I made target_read_alloc_1 templated, so both versions (that return vectors of gdb_byte and char) are generated. Since target_read_stralloc now returns a gdb::char_vector instead of a gdb::unique_xmalloc_ptr<char>, a few callers need to be adjusted. gdb/ChangeLog: * common/byte-vector.h (char_vector): New type. * target.h (target_read_alloc): Return gdb::optional<byte_vector>. (target_read_stralloc): Return gdb::optional<char_vector>. (target_get_osdata): Return gdb::optional<char_vector>. * target.c (target_read_alloc_1): Templatize. Replacement manual memory management with vector. (target_read_alloc): Change return type, adjust. (target_read_stralloc): Change return type, adjust. (target_get_osdata): Change return type, adjust. * auxv.c (struct auxv_info) <length>: Remove. <data>: Change type to gdb::optional<byte_vector>. (auxv_inferior_data_cleanup): Free auxv_info with delete. (get_auxv_inferior_data): Allocate auxv_info with new, adjust. (target_auxv_search): Adjust. (fprint_target_auxv): Adjust. * avr-tdep.c (avr_io_reg_read_command): Adjust. * linux-tdep.c (linux_spu_make_corefile_notes): Adjust. (linux_make_corefile_notes): Adjust. * osdata.c (get_osdata): Adjust. * remote.c (remote_get_threads_with_qxfer): Adjust. (remote_memory_map): Adjust. (remote_traceframe_info): Adjust. (btrace_read_config): Adjust. (remote_read_btrace): Adjust. (remote_pid_to_exec_file): Adjust. * solib-aix.c (solib_aix_get_library_list): Adjust. * solib-dsbt.c (decode_loadmap): Don't free buf. (dsbt_get_initial_loadmaps): Adjust. * solib-svr4.c (svr4_current_sos_via_xfer_libraries): Adjust. * solib-target.c (solib_target_current_sos): Adjust. * tracepoint.c (sdata_make_value): Adjust. * xml-support.c (xinclude_start_include): Adjust. (xml_fetch_content_from_file): Adjust. * xml-support.h (xml_fetch_another): Change return type. (xml_fetch_content_from_file): Change return type. * xml-syscall.c (xml_init_syscalls_info): Adjust. * xml-tdesc.c (file_read_description_xml): Adjust. (fetch_available_features_from_target): Change return type. (target_fetch_description_xml): Adjust. (target_read_description_xml): Adjust.
This commit is contained in:

committed by
Simon Marchi

parent
43193fe9fc
commit
9018be22e0
@ -793,13 +793,13 @@ xinclude_start_include (struct gdb_xml_parser *parser,
|
||||
gdb_xml_error (parser, _("Maximum XInclude depth (%d) exceeded"),
|
||||
MAX_XINCLUDE_DEPTH);
|
||||
|
||||
gdb::unique_xmalloc_ptr<char> text = data->fetcher (href,
|
||||
data->fetcher_baton);
|
||||
if (text == NULL)
|
||||
gdb::optional<gdb::char_vector> text
|
||||
= data->fetcher (href, data->fetcher_baton);
|
||||
if (!text)
|
||||
gdb_xml_error (parser, _("Could not load XML document \"%s\""), href);
|
||||
|
||||
if (!xml_process_xincludes (data->output, parser->name (),
|
||||
text.get (), data->fetcher,
|
||||
text->data (), data->fetcher,
|
||||
data->fetcher_baton,
|
||||
data->include_depth + 1))
|
||||
gdb_xml_error (parser, _("Parsing \"%s\" failed"), href);
|
||||
@ -971,7 +971,7 @@ show_debug_xml (struct ui_file *file, int from_tty,
|
||||
fprintf_filtered (file, _("XML debugging is %s.\n"), value);
|
||||
}
|
||||
|
||||
gdb::unique_xmalloc_ptr<char>
|
||||
gdb::optional<gdb::char_vector>
|
||||
xml_fetch_content_from_file (const char *filename, void *baton)
|
||||
{
|
||||
const char *dirname = (const char *) baton;
|
||||
@ -990,7 +990,7 @@ xml_fetch_content_from_file (const char *filename, void *baton)
|
||||
file = gdb_fopen_cloexec (filename, FOPEN_RT);
|
||||
|
||||
if (file == NULL)
|
||||
return NULL;
|
||||
return {};
|
||||
|
||||
/* Read in the whole file. */
|
||||
|
||||
@ -1001,16 +1001,16 @@ xml_fetch_content_from_file (const char *filename, void *baton)
|
||||
len = ftell (file.get ());
|
||||
rewind (file.get ());
|
||||
|
||||
gdb::unique_xmalloc_ptr<char> text ((char *) xmalloc (len + 1));
|
||||
gdb::char_vector text (len + 1);
|
||||
|
||||
if (fread (text.get (), 1, len, file.get ()) != len
|
||||
if (fread (text.data (), 1, len, file.get ()) != len
|
||||
|| ferror (file.get ()))
|
||||
{
|
||||
warning (_("Read error from \"%s\""), filename);
|
||||
return NULL;
|
||||
return {};
|
||||
}
|
||||
|
||||
text.get ()[len] = '\0';
|
||||
text.back () = '\0';
|
||||
return text;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user