mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
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:

committed by
Simon Marchi

parent
4872dc464d
commit
f6e8a41e67
@ -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.
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user