Simplify write_inferior_memory

gdbserver's write_inferior_memory uses a static variable to avoid
memory leaks, and has a comment referring to the lack of cleanups.
This patch removes this comment and the code in favor of a
straightforward use of std::vector.

gdb/gdbserver/ChangeLog
2019-08-15  Tom Tromey  <tromey@adacore.com>

	* target.c (write_inferior_memory): Use std::vector.
This commit is contained in:
Tom Tromey 2019-08-14 09:11:28 -06:00
parent 9177214a22
commit c6778d00df
2 changed files with 9 additions and 17 deletions

View File

@ -1,3 +1,7 @@
2019-08-15 Tom Tromey <tromey@adacore.com>
* target.c (write_inferior_memory): Use std::vector.
2019-08-06 Frank Ch. Eigler <fche@redhat.com>
PR build/24886

View File

@ -150,23 +150,11 @@ int
write_inferior_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
int len)
{
/* Lacking cleanups, there is some potential for a memory leak if the
write fails and we go through error(). Make sure that no more than
one buffer is ever pending by making BUFFER static. */
static unsigned char *buffer = 0;
int res;
if (buffer != NULL)
free (buffer);
buffer = (unsigned char *) xmalloc (len);
memcpy (buffer, myaddr, len);
check_mem_write (memaddr, buffer, myaddr, len);
res = (*the_target->write_memory) (memaddr, buffer, len);
free (buffer);
buffer = NULL;
return res;
/* Make a copy of the data because check_mem_write may need to
update it. */
std::vector<unsigned char> buffer (myaddr, myaddr + len);
check_mem_write (memaddr, buffer.data (), myaddr, len);
return (*the_target->write_memory) (memaddr, buffer.data (), len);
}
/* See target/target.h. */