summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorØyvind Harboe <oyvind.harboe@zylin.com>2010-01-21 16:41:54 +0100
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-01-31 15:06:02 +0100
commitf68dff66904321392c3137db7eb40e8633c2e507 (patch)
tree647ad0c6a743a4e4a4380f5ca606cd9ac570fe17 /src/server
parente11ce3e6b00f02eba9a15673a54f5345eba8398b (diff)
downloadopenocd+libswd-f68dff66904321392c3137db7eb40e8633c2e507.tar.gz
openocd+libswd-f68dff66904321392c3137db7eb40e8633c2e507.tar.bz2
openocd+libswd-f68dff66904321392c3137db7eb40e8633c2e507.tar.xz
openocd+libswd-f68dff66904321392c3137db7eb40e8633c2e507.zip
telnet: fix strage blank spaces at beginning of telnet lines
Sometimes we saw two strange blank spaces at the beginning of the telnet lines. progress ogress > This patch fixes this problem: progress progress > The code changes are *reasonably* clean, but perhaps it could be made a bit more elegant, but I didn't want to change things after I finished diagnosis/testing & submitting the patch. The problem was that logging can send the text and the newline separately in two different requests and the telnet code would incorrectly remove the prompt from the end of a line. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src/server')
-rw-r--r--src/server/telnet_server.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/server/telnet_server.c b/src/server/telnet_server.c
index 6f26f0ac..94c89431 100644
--- a/src/server/telnet_server.c
+++ b/src/server/telnet_server.c
@@ -62,7 +62,6 @@ int telnet_prompt(struct connection *connection)
{
struct telnet_connection *t_con = connection->priv;
- telnet_write(connection, "\r", 1); /* the prompt is always placed at the line beginning */
return telnet_write(connection, t_con->prompt, strlen(t_con->prompt));
}
@@ -116,10 +115,12 @@ void telnet_log_callback(void *priv, const char *file, unsigned line,
}
/* clear the command line */
- telnet_write(connection, "\r", 1);
+ for (i = strlen(t_con->prompt) + t_con->line_size; i > 0; i -= 16)
+ telnet_write(connection, "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", i > 16 ? 16 : i);
for (i = strlen(t_con->prompt) + t_con->line_size; i > 0; i -= 16)
telnet_write(connection, " ", i > 16 ? 16 : i);
- telnet_write(connection, "\r", 1);
+ for (i = strlen(t_con->prompt) + t_con->line_size; i > 0; i -= 16)
+ telnet_write(connection, "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", i > 16 ? 16 : i);
/* output the message */
telnet_outputline(connection, string);
@@ -160,6 +161,7 @@ int telnet_new_connection(struct connection *connection)
telnet_write(connection, "\r\n", 2);
}
+ telnet_write(connection, "\r", 1); /* the prompt is always placed at the line beginning */
telnet_prompt(connection);
/* initialize history */
@@ -331,6 +333,7 @@ int telnet_input(struct connection *connection)
if (retval == ERROR_COMMAND_CLOSE_CONNECTION)
return ERROR_SERVER_REMOTE_CLOSED;
+ telnet_write(connection, "\r", 1); /* the prompt is always placed at the line beginning */
retval = telnet_prompt(connection);
if (retval == ERROR_SERVER_REMOTE_CLOSED)
return ERROR_SERVER_REMOTE_CLOSED;