linux_qxfer_libraries_svr4: Use std::string

Use std::string, removing some manual memory management.

gdb/gdbserver/ChangeLog:

	* linux-low.c (linux_qxfer_libraries_svr4): Use std::string.
This commit is contained in:
Simon Marchi
2018-03-08 18:04:07 -05:00
committed by Simon Marchi
parent 4872dc464d
commit f6e8a41e67
2 changed files with 16 additions and 34 deletions

View File

@ -1,3 +1,7 @@
2018-03-08 Simon Marchi <simon.marchi@polymtl.ca>
* linux-low.c (linux_qxfer_libraries_svr4): Use std::string.
2018-03-02 Simon Marchi <simon.marchi@polymtl.ca> 2018-03-02 Simon Marchi <simon.marchi@polymtl.ca>
* server.c (handle_general_set): Remove unnecessary xstrdup. * server.c (handle_general_set): Remove unnecessary xstrdup.

View File

@ -6988,8 +6988,6 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
unsigned const char *writebuf, unsigned const char *writebuf,
CORE_ADDR offset, int len) CORE_ADDR offset, int len)
{ {
char *document;
unsigned document_len;
struct process_info_private *const priv = current_process ()->priv; struct process_info_private *const priv = current_process ()->priv;
char filename[PATH_MAX]; char filename[PATH_MAX];
int pid, is_elf64; int pid, is_elf64;
@ -7019,8 +7017,6 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
unsigned int machine; unsigned int machine;
int ptr_size; int ptr_size;
CORE_ADDR lm_addr = 0, lm_prev = 0; CORE_ADDR lm_addr = 0, lm_prev = 0;
int allocated = 1024;
char *p;
CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev; CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev;
int header_done = 0; int header_done = 0;
@ -7093,9 +7089,7 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
} }
} }
document = (char *) xmalloc (allocated); std::string document = "<library-list-svr4 version=\"1.0\"";
strcpy (document, "<library-list-svr4 version=\"1.0\"");
p = document + strlen (document);
while (lm_addr while (lm_addr
&& read_one_ptr (lm_addr + lmo->l_name_offset, && read_one_ptr (lm_addr + lmo->l_name_offset,
@ -7125,10 +7119,7 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
executable does not have PT_DYNAMIC present and this function already executable does not have PT_DYNAMIC present and this function already
exited above due to failed get_r_debug. */ exited above due to failed get_r_debug. */
if (lm_prev == 0) if (lm_prev == 0)
{ string_appendf (document, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
sprintf (p, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
p = p + strlen (p);
}
else else
{ {
/* Not checking for error because reading may stop before /* Not checking for error because reading may stop before
@ -7138,31 +7129,19 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
libname[sizeof (libname) - 1] = '\0'; libname[sizeof (libname) - 1] = '\0';
if (libname[0] != '\0') if (libname[0] != '\0')
{ {
/* 6x the size for xml_escape_text below. */
size_t len = 6 * strlen ((char *) libname);
if (!header_done) if (!header_done)
{ {
/* Terminate `<library-list-svr4'. */ /* Terminate `<library-list-svr4'. */
*p++ = '>'; document += '>';
header_done = 1; header_done = 1;
} }
while (allocated < p - document + len + 200)
{
/* Expand to guarantee sufficient storage. */
uintptr_t document_len = p - document;
document = (char *) xrealloc (document, 2 * allocated);
allocated *= 2;
p = document + document_len;
}
std::string name = xml_escape_text ((char *) libname); std::string name = xml_escape_text ((char *) libname);
p += sprintf (p, "<library name=\"%s\" lm=\"0x%lx\" " string_appendf (document,
"l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>", "<library name=\"%s\" lm=\"0x%lx\" "
name.c_str (), (unsigned long) lm_addr, "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>",
(unsigned long) l_addr, (unsigned long) l_ld); name.c_str (), (unsigned long) lm_addr,
(unsigned long) l_addr, (unsigned long) l_ld);
} }
} }
@ -7173,12 +7152,12 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
if (!header_done) if (!header_done)
{ {
/* Empty list; terminate `<library-list-svr4'. */ /* Empty list; terminate `<library-list-svr4'. */
strcpy (p, "/>"); document += "/>";
} }
else else
strcpy (p, "</library-list-svr4>"); document += "</library-list-svr4>";
document_len = strlen (document); int document_len = document.length ();
if (offset < document_len) if (offset < document_len)
document_len -= offset; document_len -= offset;
else else
@ -7186,8 +7165,7 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
if (len > document_len) if (len > document_len)
len = document_len; len = document_len;
memcpy (readbuf, document + offset, len); memcpy (readbuf, document.data () + offset, len);
xfree (document);
return len; return len;
} }