X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fserver%2Ftcl_server.c;h=458d7eada3df34dd3f892de646b2dfab5a9d43b8;hb=e6505b04892ccacf75603c3d173616f5d92809e7;hp=1ec45ffbb1856f13b980090f1b768858c454afd3;hpb=5202d82a954627c6706529a82447aad4c63aefcc;p=fw%2Fopenocd diff --git a/src/server/tcl_server.c b/src/server/tcl_server.c index 1ec45ffbb..458d7eada 100644 --- a/src/server/tcl_server.c +++ b/src/server/tcl_server.c @@ -145,12 +145,12 @@ static int tcl_new_connection(struct connection *connection) struct tcl_connection *tclc; tclc = calloc(1, sizeof(struct tcl_connection)); - if (tclc == NULL) + if (!tclc) return ERROR_CONNECTION_REJECTED; tclc->tc_line_size = TCL_LINE_INITIAL; tclc->tc_line = malloc(tclc->tc_line_size); - if (tclc->tc_line == NULL) { + if (!tclc->tc_line) { free(tclc); return ERROR_CONNECTION_REJECTED; } @@ -158,7 +158,7 @@ static int tcl_new_connection(struct connection *connection) connection->priv = tclc; struct target *target = get_current_target_or_null(connection->cmd_ctx); - if (target != NULL) + if (target) tclc->tc_laststate = target->state; /* store the connection object on cmd_ctx so we can access it from command handlers */ @@ -192,14 +192,14 @@ static int tcl_input(struct connection *connection) } tclc = connection->priv; - if (tclc == NULL) + if (!tclc) return ERROR_CONNECTION_REJECTED; /* push as much data into the line as possible */ for (i = 0; i < rlen; i++) { /* buffer the data */ tclc->tc_line[tclc->tc_lineoffset] = in[i]; - if (tclc->tc_lineoffset < tclc->tc_line_size) { + if (tclc->tc_lineoffset + 1 < tclc->tc_line_size) { tclc->tc_lineoffset++; } else if (tclc->tc_line_size >= TCL_LINE_MAX) { /* maximum line size reached, drop line */ @@ -215,7 +215,7 @@ static int tcl_input(struct connection *connection) tc_line_size_new = TCL_LINE_MAX; tc_line_new = realloc(tclc->tc_line, tc_line_size_new); - if (tc_line_new == NULL) { + if (!tc_line_new) { tclc->tc_linedrop = 1; } else { tclc->tc_line = tc_line_new; @@ -276,6 +276,15 @@ static int tcl_closed(struct connection *connection) return ERROR_OK; } +static const struct service_driver tcl_service_driver = { + .name = "tcl", + .new_connection_during_keep_alive_handler = NULL, + .new_connection_handler = tcl_new_connection, + .input_handler = tcl_input, + .connection_closed_handler = tcl_closed, + .keep_client_alive_handler = NULL, +}; + int tcl_init(void) { if (strcmp(tcl_port, "disabled") == 0) { @@ -283,9 +292,7 @@ int tcl_init(void) return ERROR_OK; } - return add_service("tcl", tcl_port, CONNECTION_LIMIT_UNLIMITED, - &tcl_new_connection, &tcl_input, - &tcl_closed, NULL); + return add_service(&tcl_service_driver, tcl_port, CONNECTION_LIMIT_UNLIMITED, NULL); } COMMAND_HANDLER(handle_tcl_port_command) @@ -298,10 +305,10 @@ COMMAND_HANDLER(handle_tcl_notifications_command) struct connection *connection = NULL; struct tcl_connection *tclc = NULL; - if (CMD_CTX->output_handler_priv != NULL) + if (CMD_CTX->output_handler_priv) connection = CMD_CTX->output_handler_priv; - if (connection != NULL && !strcmp(connection->service->name, "tcl")) { + if (connection && !strcmp(connection->service->name, "tcl")) { tclc = connection->priv; return CALL_COMMAND_HANDLER(handle_command_parse_bool, &tclc->tc_notify, "Target Notification output "); } else { @@ -315,10 +322,10 @@ COMMAND_HANDLER(handle_tcl_trace_command) struct connection *connection = NULL; struct tcl_connection *tclc = NULL; - if (CMD_CTX->output_handler_priv != NULL) + if (CMD_CTX->output_handler_priv) connection = CMD_CTX->output_handler_priv; - if (connection != NULL && !strcmp(connection->service->name, "tcl")) { + if (connection && !strcmp(connection->service->name, "tcl")) { tclc = connection->priv; return CALL_COMMAND_HANDLER(handle_command_parse_bool, &tclc->tc_trace, "Target trace output "); } else { @@ -331,7 +338,7 @@ static const struct command_registration tcl_command_handlers[] = { { .name = "tcl_port", .handler = handle_tcl_port_command, - .mode = COMMAND_ANY, + .mode = COMMAND_CONFIG, .help = "Specify port on which to listen " "for incoming Tcl syntax. " "Read help on 'gdb_port'.",