diff options
author | ntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-02-16 14:05:32 +0000 |
---|---|---|
committer | ntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-02-16 14:05:32 +0000 |
commit | a32de76d61304b310d4ef16278ef3f50f6402d85 (patch) | |
tree | 3b6e9976973e0e92e175ebb33c4af1ce1908a4e7 | |
parent | 8f773624324a69473d0160b6918feea300714e64 (diff) | |
download | openocd_libswd-a32de76d61304b310d4ef16278ef3f50f6402d85.tar.gz openocd_libswd-a32de76d61304b310d4ef16278ef3f50f6402d85.tar.bz2 openocd_libswd-a32de76d61304b310d4ef16278ef3f50f6402d85.tar.xz openocd_libswd-a32de76d61304b310d4ef16278ef3f50f6402d85.zip |
- fix issue with telnet prompt while gdb running
git-svn-id: svn://svn.berlios.de/openocd/trunk@298 b42882b7-edfa-0310-969c-e2dbd0fdcd60
-rw-r--r-- | src/server/telnet_server.c | 20 | ||||
-rw-r--r-- | src/server/telnet_server.h | 1 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/server/telnet_server.c b/src/server/telnet_server.c index af49050a..4d91902e 100644 --- a/src/server/telnet_server.c +++ b/src/server/telnet_server.c @@ -76,9 +76,9 @@ int telnet_output(struct command_context_s *cmd_ctx, char* line) void telnet_log_callback(void *privData, const char *file, int line, const char *function, const char *format, va_list args) { - connection_t *connection=(connection_t *)privData; - char *t=allocPrintf(format, args); - if (t==NULL) + connection_t *connection = (connection_t *)privData; + char *t = allocPrintf(format, args); + if (t == NULL) return; telnet_outputline(connection, t); @@ -89,6 +89,8 @@ void telnet_log_callback(void *privData, const char *file, int line, int telnet_target_callback_event_handler(struct target_s *target, enum target_event event, void *priv) { struct command_context_s *cmd_ctx = priv; + connection_t *connection = cmd_ctx->output_handler_priv; + telnet_connection_t *t_con = connection->priv; char buffer[512]; switch (event) @@ -98,9 +100,13 @@ int telnet_target_callback_event_handler(struct target_s *target, enum target_ev target->type->arch_state(target, buffer, 512); buffer[511] = 0; command_print(cmd_ctx, "%s", buffer); + if (!t_con->suppress_prompt) + telnet_prompt(connection); break; case TARGET_EVENT_RESUMED: command_print(cmd_ctx, "Target %i resumed", get_num_by_target(target)); + if (!t_con->suppress_prompt) + telnet_prompt(connection); break; default: break; @@ -122,6 +128,7 @@ int telnet_new_connection(connection_t *connection) telnet_connection->line_cursor = 0; telnet_connection->option_size = 0; telnet_connection->prompt = strdup("> "); + telnet_connection->suppress_prompt = 0; telnet_connection->state = TELNET_STATE_DATA; /* output goes through telnet connection */ @@ -263,9 +270,8 @@ int telnet_input(connection_t *connection) continue; } - - log_setCallback(telnet_log_callback, connection); + t_con->suppress_prompt = 1; if ((retval = command_run_line(command_context, t_con->line)) != ERROR_OK) { @@ -274,7 +280,9 @@ int telnet_input(connection_t *connection) return ERROR_SERVER_REMOTE_CLOSED; } } - + + t_con->suppress_prompt = 0; + /* Save only non-blank lines in the history */ if (t_con->line_size > 0) { diff --git a/src/server/telnet_server.h b/src/server/telnet_server.h index 738efa56..7b4b4a22 100644 --- a/src/server/telnet_server.h +++ b/src/server/telnet_server.h @@ -44,6 +44,7 @@ enum telnet_states typedef struct telnet_connection_s { char *prompt; + int suppress_prompt; enum telnet_states state; char line[TELNET_LINE_MAX_SIZE]; int line_size; |