server/telnet: Fix history output

Restore the prompt after the "history" command is invoked.

Change-Id: I3d0744abbc58e82b039e06f21675efa180e8e1b0
Signed-off-by: Marc Schink <openocd-dev@marcschink.de>
Reviewed-on: http://openocd.zylin.com/3414
Tested-by: jenkins
Reviewed-by: Marc Schink <dev@zapb.de>
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
Marc Schink 2016-04-13 13:36:26 +02:00 committed by Antonio Borneo
parent 6f91aae159
commit 82f71aa274
1 changed files with 35 additions and 15 deletions

View File

@ -312,6 +312,36 @@ static void telnet_history_down(struct connection *connection)
telnet_history_go(connection, next_history);
}
static int telnet_history_print(struct connection *connection)
{
struct telnet_connection *tc;
tc = connection->priv;
for (size_t i = 1; i < TELNET_LINE_HISTORY_SIZE; i++) {
char *line;
/*
* The tc->next_history line contains empty string (unless NULL), thus
* it is not printed.
*/
line = tc->history[(tc->next_history + i) % TELNET_LINE_HISTORY_SIZE];
if (line) {
telnet_write(connection, line, strlen(line));
telnet_write(connection, "\r\n\x00", 3);
}
}
tc->line_size = 0;
tc->line_cursor = 0;
/* The prompt is always placed at the line beginning. */
telnet_write(connection, "\r", 1);
return telnet_prompt(connection);
}
static void telnet_move_cursor(struct connection *connection, size_t pos)
{
struct telnet_connection *tc;
@ -407,21 +437,11 @@ static int telnet_input(struct connection *connection)
telnet_write(connection, "\r\n\x00", 3);
if (strcmp(t_con->line, "history") == 0) {
size_t i;
for (i = 1; i < TELNET_LINE_HISTORY_SIZE; i++) {
/* the t_con->next_history line contains empty string
* (unless NULL), thus it is not printed */
char *history_line = t_con->history[(t_con->
next_history + i) %
TELNET_LINE_HISTORY_SIZE];
if (history_line) {
telnet_write(connection, history_line,
strlen(history_line));
telnet_write(connection, "\r\n\x00", 3);
}
}
t_con->line_size = 0;
t_con->line_cursor = 0;
retval = telnet_history_print(connection);
if (retval != ERROR_OK)
return retval;
continue;
}