server/telnet: Use proper data types
[openocd.git] / src / server / telnet_server.c
index 06a9c7a6c74a74597d2f5f5626f5a9f90eabc932..9077b6c46d2e51b3d31f1cf0b51ff9fba38a1e7a 100644 (file)
@@ -54,7 +54,7 @@ static int telnet_write(struct connection *connection, const void *data,
 
        if (connection_write(connection, data, len) == len)
                return ERROR_OK;
-       t_con->closed = 1;
+       t_con->closed = true;
        return ERROR_SERVER_REMOTE_CLOSED;
 }
 
@@ -101,29 +101,36 @@ static void telnet_log_callback(void *priv, const char *file, unsigned line,
 {
        struct connection *connection = priv;
        struct telnet_connection *t_con = connection->priv;
-       int i;
+       size_t i;
+       size_t tmp;
 
-       /* if there is no prompt, simply output the message */
-       if (t_con->line_cursor < 0) {
+       /* If the prompt is not visible, simply output the message. */
+       if (!t_con->prompt_visible) {
                telnet_outputline(connection, string);
                return;
        }
 
-       /* clear the command line */
-       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);
-       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);
+       /* Clear the command line. */
+       tmp = strlen(t_con->prompt) + t_con->line_size;
+
+       for (i = 0; i < tmp; i += 16)
+               telnet_write(connection, "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",
+                       MIN(tmp - i, 16));
+
+       for (i = 0; i < tmp; i += 16)
+               telnet_write(connection, "                ", MIN(tmp - i, 16));
+
+       for (i = 0; i < tmp; i += 16)
+               telnet_write(connection, "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",
+                       MIN(tmp - i, 16));
 
-       /* output the message */
        telnet_outputline(connection, string);
 
-       /* put the command line to its previous state */
+       /* Put the command line to its previous state. */
        telnet_prompt(connection);
        telnet_write(connection, t_con->line, t_con->line_size);
-       for (i = t_con->line_size; i > t_con->line_cursor; i--)
+
+       for (i = t_con->line_cursor; i < t_con->line_size; i++)
                telnet_write(connection, "\b", 1);
 }
 
@@ -219,10 +226,11 @@ static int telnet_new_connection(struct connection *connection)
        connection->priv = telnet_connection;
 
        /* initialize telnet connection information */
-       telnet_connection->closed = 0;
+       telnet_connection->closed = false;
        telnet_connection->line_size = 0;
        telnet_connection->line_cursor = 0;
        telnet_connection->prompt = strdup("> ");
+       telnet_connection->prompt_visible = true;
        telnet_connection->state = TELNET_STATE_DATA;
 
        /* output goes through telnet connection */
@@ -289,7 +297,7 @@ static void telnet_history_up(struct connection *connection)
 {
        struct telnet_connection *t_con = connection->priv;
 
-       int last_history = (t_con->current_history > 0) ?
+       size_t last_history = (t_con->current_history > 0) ?
                                t_con->current_history - 1 :
                                TELNET_LINE_HISTORY_SIZE-1;
        telnet_history_go(connection, last_history);
@@ -298,8 +306,9 @@ static void telnet_history_up(struct connection *connection)
 static void telnet_history_down(struct connection *connection)
 {
        struct telnet_connection *t_con = connection->priv;
+       size_t next_history;
 
-       int next_history = (t_con->current_history + 1) % TELNET_LINE_HISTORY_SIZE;
+       next_history = (t_con->current_history + 1) % TELNET_LINE_HISTORY_SIZE;
        telnet_history_go(connection, next_history);
 }
 
@@ -363,7 +372,7 @@ static int telnet_input(struct connection *connection)
                                                        t_con->line[t_con->line_size++] = *buf_p;
                                                        t_con->line_cursor++;
                                                } else {
-                                                       int i;
+                                                       size_t i;
                                                        memmove(t_con->line + t_con->line_cursor + 1,
                                                                        t_con->line + t_con->line_cursor,
                                                                        t_con->line_size - t_con->line_cursor);
@@ -398,7 +407,7 @@ static int telnet_input(struct connection *connection)
                                                        telnet_write(connection, "\r\n\x00", 3);
 
                                                        if (strcmp(t_con->line, "history") == 0) {
-                                                               int i;
+                                                               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 */
@@ -444,7 +453,7 @@ static int telnet_input(struct connection *connection)
                                                        t_con->line_size = 0;
 
                                                        /* to suppress prompt in log callback during command execution */
-                                                       t_con->line_cursor = -1;
+                                                       t_con->prompt_visible = false;
 
                                                        if (strcmp(t_con->line, "shutdown") == 0)
                                                                telnet_save_history(t_con);
@@ -452,6 +461,7 @@ static int telnet_input(struct connection *connection)
                                                        retval = command_run_line(command_context, t_con->line);
 
                                                        t_con->line_cursor = 0;
+                                                       t_con->prompt_visible = true;
 
                                                        if (retval == ERROR_COMMAND_CLOSE_CONNECTION)
                                                                return ERROR_SERVER_REMOTE_CLOSED;
@@ -466,7 +476,7 @@ static int telnet_input(struct connection *connection)
                                                } else if ((*buf_p == 0x7f) || (*buf_p == 0x8)) {       /* delete character */
                                                        if (t_con->line_cursor > 0) {
                                                                if (t_con->line_cursor != t_con->line_size) {
-                                                                       int i;
+                                                                       size_t i;
                                                                        telnet_write(connection, "\b", 1);
                                                                        t_con->line_cursor--;
                                                                        t_con->line_size--;
@@ -566,7 +576,7 @@ static int telnet_input(struct connection *connection)
                                        /* Remove character */
                                        if (*buf_p == '~') {
                                                if (t_con->line_cursor < t_con->line_size) {
-                                                       int i;
+                                                       size_t i;
                                                        t_con->line_size--;
                                                        /* remove char from line buffer */
                                                        memmove(t_con->line + t_con->line_cursor,

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)