mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 09:08:59 +00:00
Simplify print_doc_line
print_doc_line uses a static buffer and manually manages memory. I think neither of these is really needed, so this patch rewrites the function to use std::string. The new implementation tries to avoid copying when possible. Regression tested on x86-64 Fedora 40. Reviewed-By: Keith Seitz <keiths@redhat.com>
This commit is contained in:
@@ -2041,40 +2041,28 @@ void
|
||||
print_doc_line (struct ui_file *stream, const char *str,
|
||||
bool for_value_prefix)
|
||||
{
|
||||
static char *line_buffer = 0;
|
||||
static int line_size;
|
||||
const char *p;
|
||||
const char *p = strchr (str, '\n');
|
||||
|
||||
if (!line_buffer)
|
||||
{
|
||||
line_size = 80;
|
||||
line_buffer = (char *) xmalloc (line_size);
|
||||
}
|
||||
/* Only copy the input string if we really need to. */
|
||||
std::optional<std::string> line_buffer;
|
||||
if (p != nullptr)
|
||||
line_buffer = std::string (str, p);
|
||||
else if (for_value_prefix)
|
||||
line_buffer = str;
|
||||
|
||||
/* Searches for the first end of line or the end of STR. */
|
||||
p = str;
|
||||
while (*p && *p != '\n')
|
||||
p++;
|
||||
if (p - str > line_size - 1)
|
||||
{
|
||||
line_size = p - str + 1;
|
||||
xfree (line_buffer);
|
||||
line_buffer = (char *) xmalloc (line_size);
|
||||
}
|
||||
strncpy (line_buffer, str, p - str);
|
||||
if (for_value_prefix)
|
||||
{
|
||||
if (islower (line_buffer[0]))
|
||||
line_buffer[0] = toupper (line_buffer[0]);
|
||||
gdb_assert (p > str);
|
||||
if (line_buffer[p - str - 1] == '.')
|
||||
line_buffer[p - str - 1] = '\0';
|
||||
else
|
||||
line_buffer[p - str] = '\0';
|
||||
char &c = (*line_buffer)[0];
|
||||
if (islower (c))
|
||||
c = toupper (c);
|
||||
if (line_buffer->back () == '.')
|
||||
line_buffer->pop_back ();
|
||||
}
|
||||
else
|
||||
line_buffer[p - str] = '\0';
|
||||
gdb_puts (line_buffer, stream);
|
||||
|
||||
gdb_puts (line_buffer.has_value ()
|
||||
? line_buffer->c_str ()
|
||||
: str,
|
||||
stream);
|
||||
}
|
||||
|
||||
/* Print one-line help for command C.
|
||||
|
||||
Reference in New Issue
Block a user