Return unique_xmalloc_ptr from target_read_stralloc
This changes target_read_stralloc to return a unique_xmalloc_ptr, and then fixes all the callers. unique_xmalloc_ptr is used, rather than std::string, because target_read_stralloc gives a special meaning to a NULL return. ChangeLog 2017-10-16 Tom Tromey <tom@tromey.com> * xml-syscall.c (xml_init_syscalls_info): Update. * xml-support.c (xinclude_start_include): Update. (xml_fetch_content_from_file): Return unique_xmalloc_ptr. * xml-support.h (xml_fetch_another): Return unique_xmalloc_ptr. (xml_fetch_content_from_file): Likewise. * osdata.c (get_osdata): Update. * target.h (target_read_stralloc, target_get_osdata): Return unique_xmalloc_ptr. * solib-aix.c (solib_aix_get_library_list): Update. * solib-target.c (solib_target_current_sos): Update. * solib-svr4.c (svr4_current_sos_via_xfer_libraries): Update. * xml-tdesc.c (fetch_available_features_from_target): Update. (target_fetch_description_xml): Update. (file_read_description_xml): Update. * remote.c (remote_get_threads_with_qxfer, remote_memory_map) (remote_traceframe_info, btrace_read_config, remote_read_btrace) (remote_pid_to_exec_file): Update. * target.c (target_read_stralloc): Return unique_xmalloc_ptr. (target_get_osdata): Likewise.
This commit is contained in:
parent
b80406accc
commit
b7b030adc4
12 changed files with 102 additions and 168 deletions
|
@ -808,8 +808,6 @@ xinclude_start_include (struct gdb_xml_parser *parser,
|
|||
struct xinclude_parsing_data *data
|
||||
= (struct xinclude_parsing_data *) user_data;
|
||||
char *href = (char *) xml_find_attribute (attributes, "href")->value;
|
||||
struct cleanup *back_to;
|
||||
char *text, *output;
|
||||
|
||||
gdb_xml_debug (parser, _("Processing XInclude of \"%s\""), href);
|
||||
|
||||
|
@ -817,19 +815,17 @@ xinclude_start_include (struct gdb_xml_parser *parser,
|
|||
gdb_xml_error (parser, _("Maximum XInclude depth (%d) exceeded"),
|
||||
MAX_XINCLUDE_DEPTH);
|
||||
|
||||
text = data->fetcher (href, data->fetcher_baton);
|
||||
gdb::unique_xmalloc_ptr<char> text = data->fetcher (href,
|
||||
data->fetcher_baton);
|
||||
if (text == NULL)
|
||||
gdb_xml_error (parser, _("Could not load XML document \"%s\""), href);
|
||||
back_to = make_cleanup (xfree, text);
|
||||
|
||||
if (!xml_process_xincludes (data->output, parser->name (),
|
||||
text, data->fetcher,
|
||||
text.get (), data->fetcher,
|
||||
data->fetcher_baton,
|
||||
data->include_depth + 1))
|
||||
gdb_xml_error (parser, _("Parsing \"%s\" failed"), href);
|
||||
|
||||
do_cleanups (back_to);
|
||||
|
||||
data->skip_depth++;
|
||||
}
|
||||
|
||||
|
@ -997,13 +993,11 @@ show_debug_xml (struct ui_file *file, int from_tty,
|
|||
fprintf_filtered (file, _("XML debugging is %s.\n"), value);
|
||||
}
|
||||
|
||||
char *
|
||||
gdb::unique_xmalloc_ptr<char>
|
||||
xml_fetch_content_from_file (const char *filename, void *baton)
|
||||
{
|
||||
const char *dirname = (const char *) baton;
|
||||
gdb_file_up file;
|
||||
struct cleanup *back_to;
|
||||
char *text;
|
||||
size_t len, offset;
|
||||
|
||||
if (dirname && *dirname)
|
||||
|
@ -1024,19 +1018,18 @@ xml_fetch_content_from_file (const char *filename, void *baton)
|
|||
/* Read in the whole file, one chunk at a time. */
|
||||
len = 4096;
|
||||
offset = 0;
|
||||
text = (char *) xmalloc (len);
|
||||
back_to = make_cleanup (free_current_contents, &text);
|
||||
gdb::unique_xmalloc_ptr<char> text ((char *) xmalloc (len));
|
||||
while (1)
|
||||
{
|
||||
size_t bytes_read;
|
||||
|
||||
/* Continue reading where the last read left off. Leave at least
|
||||
one byte so that we can NUL-terminate the result. */
|
||||
bytes_read = fread (text + offset, 1, len - offset - 1, file.get ());
|
||||
bytes_read = fread (text.get () + offset, 1, len - offset - 1,
|
||||
file.get ());
|
||||
if (ferror (file.get ()))
|
||||
{
|
||||
warning (_("Read error from \"%s\""), filename);
|
||||
do_cleanups (back_to);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1046,12 +1039,10 @@ xml_fetch_content_from_file (const char *filename, void *baton)
|
|||
break;
|
||||
|
||||
len = len * 2;
|
||||
text = (char *) xrealloc (text, len);
|
||||
text.reset ((char *) xrealloc (text.get (), len));
|
||||
}
|
||||
|
||||
discard_cleanups (back_to);
|
||||
|
||||
text[offset] = '\0';
|
||||
text.get ()[offset] = '\0';
|
||||
return text;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue