server/telnet: Fix history output 14/3414/3
authorMarc Schink <openocd-dev@marcschink.de>
Wed, 13 Apr 2016 11:36:26 +0000 (13:36 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 9 May 2020 13:35:43 +0000 (14:35 +0100)
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>
src/server/telnet_server.c

index bfabae8..d0583a9 100644 (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;
                                                        }