diff options
author | Tom Tromey <tom@tromey.com> | 2022-12-16 12:53:20 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2023-02-24 11:52:48 -0700 |
commit | 1293ecd838c82e86f6c81d4518f5c662f8eaa0b9 (patch) | |
tree | 5c8b7dcff30f1d4202bf4b90bf715a88082f3543 /gdb/top.c | |
parent | 356628ee2a1ac34e705697967105dfbbcd7fd033 (diff) | |
download | gdb-1293ecd838c82e86f6c81d4518f5c662f8eaa0b9.zip gdb-1293ecd838c82e86f6c81d4518f5c662f8eaa0b9.tar.gz gdb-1293ecd838c82e86f6c81d4518f5c662f8eaa0b9.tar.bz2 |
Don't use struct buffer in top.c
This changes top.c to use std::string rather than struct buffer. Like
the event-top.c change, this is not completely ideal in that it
requires a copy of the string.
Diffstat (limited to 'gdb/top.c')
-rw-r--r-- | gdb/top.c | 22 |
1 files changed, 8 insertions, 14 deletions
@@ -50,7 +50,6 @@ #include "maint.h" #include "filenames.h" #include "frame.h" -#include "gdbsupport/buffer.h" #include "gdbsupport/gdb_select.h" #include "gdbsupport/scope-exit.h" #include "gdbarch.h" @@ -879,18 +878,16 @@ save_command_line (const char *cmd) A NULL return means end of file. */ -static char * +static gdb::unique_xmalloc_ptr<char> gdb_readline_no_editing (const char *prompt) { - struct buffer line_buffer; + std::string line_buffer; struct ui *ui = current_ui; /* Read from stdin if we are executing a user defined command. This is the right thing for prompt_for_continue, at least. */ FILE *stream = ui->instream != NULL ? ui->instream : stdin; int fd = fileno (stream); - buffer_init (&line_buffer); - if (prompt != NULL) { /* Don't use a _filtered function here. It causes the assumed @@ -925,28 +922,25 @@ gdb_readline_no_editing (const char *prompt) if (c == EOF) { - if (line_buffer.used_size > 0) + if (!line_buffer.empty ()) /* The last line does not end with a newline. Return it, and if we are called again fgetc will still return EOF and we'll return NULL then. */ break; - xfree (buffer_finish (&line_buffer)); return NULL; } if (c == '\n') { - if (line_buffer.used_size > 0 - && line_buffer.buffer[line_buffer.used_size - 1] == '\r') - line_buffer.used_size--; + if (!line_buffer.empty () && line_buffer.back () == '\r') + line_buffer.pop_back (); break; } - buffer_grow_char (&line_buffer, c); + line_buffer += c; } - buffer_grow_char (&line_buffer, '\0'); - return buffer_finish (&line_buffer); + return make_unique_xstrdup (line_buffer.c_str ()); } /* Variables which control command line editing and history @@ -1402,7 +1396,7 @@ command_line_input (std::string &cmd_line_buffer, const char *prompt_arg, } else { - rl.reset (gdb_readline_no_editing (prompt)); + rl = gdb_readline_no_editing (prompt); } cmd = handle_line_of_input (cmd_line_buffer, rl.get (), |