openocd: remove last NULL comparisons
[fw/openocd] / src / server / server.c
index 539bdaf8257f69a0da8aff51b4a03d270548499b..64acd36894ab666f82c1667cf32a7d07baa213d0 100644 (file)
@@ -33,6 +33,7 @@
 #include "openocd.h"
 #include "tcl_server.h"
 #include "telnet_server.h"
+#include "time_support.h"
 
 #include <signal.h>
 
@@ -76,7 +77,7 @@ static int add_connection(struct service *service, struct command_context *cmd_c
        memset(&c->sin, 0, sizeof(c->sin));
        c->cmd_ctx = copy_command_context(cmd_ctx);
        c->service = service;
-       c->input_pending = 0;
+       c->input_pending = false;
        c->priv = NULL;
        c->next = NULL;
 
@@ -262,11 +263,11 @@ int add_service(char *name,
                memset(&c->sin, 0, sizeof(c->sin));
                c->sin.sin_family = AF_INET;
 
-               if (bindto_name == NULL)
+               if (!bindto_name)
                        c->sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
                else {
                        hp = gethostbyname(bindto_name);
-                       if (hp == NULL) {
+                       if (!hp) {
                                LOG_ERROR("couldn't resolve bindto address: %s", bindto_name);
                                close_socket(c->fd);
                                free_service(c);
@@ -325,7 +326,7 @@ int add_service(char *name,
 #endif
        } else if (c->type == CONNECTION_PIPE) {
 #ifdef _WIN32
-               /* we currenty do not support named pipes under win32
+               /* we currently do not support named pipes under win32
                 * so exit openocd for now */
                LOG_ERROR("Named pipes currently not supported under this os");
                free_service(c);
@@ -403,19 +404,14 @@ static int remove_services(void)
 
                remove_connections(c);
 
-               if (c->name)
-                       free(c->name);
+               free(c->name);
 
                if (c->type == CONNECTION_PIPE) {
                        if (c->fd != -1)
                                close(c->fd);
                }
-               if (c->port)
-                       free(c->port);
-
-               if (c->priv)
-                       free(c->priv);
-
+               free(c->port);
+               free(c->priv);
                /* delete service */
                free(c);
 
@@ -441,6 +437,8 @@ int server_loop(struct command_context *command_context)
        /* used in accept() */
        int retval;
 
+       int64_t next_event = timeval_ms() + polling_period;
+
 #ifndef _WIN32
        if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
                LOG_ERROR("couldn't set SIGPIPE to SIG_IGN");
@@ -482,7 +480,12 @@ int server_loop(struct command_context *command_context)
                        retval = socket_select(fd_max + 1, &read_fds, NULL, NULL, &tv);
                } else {
                        /* Every 100ms, can be changed with "poll_period" command */
-                       tv.tv_usec = polling_period * 1000;
+                       int timeout_ms = next_event - timeval_ms();
+                       if (timeout_ms < 0)
+                               timeout_ms = 0;
+                       else if (timeout_ms > polling_period)
+                               timeout_ms = polling_period;
+                       tv.tv_usec = timeout_ms * 1000;
                        /* Only while we're sleeping we'll let others run */
                        openocd_sleep_prelude();
                        kept_alive();
@@ -515,7 +518,8 @@ int server_loop(struct command_context *command_context)
                if (retval == 0) {
                        /* We only execute these callbacks when there was nothing to do or we timed
                         *out */
-                       target_call_timer_callbacks();
+                       target_call_timer_callbacks_now();
+                       next_event = target_timer_next_event();
                        process_jim_events(command_context);
 
                        FD_ZERO(&read_fds);     /* eCos leaves read_fds unchanged in this case!  */
@@ -562,7 +566,7 @@ int server_loop(struct command_context *command_context)
                                struct connection *c;
 
                                for (c = service->connections; c; ) {
-                                       if ((FD_ISSET(c->fd, &read_fds)) || c->input_pending) {
+                                       if ((c->fd >= 0 && FD_ISSET(c->fd, &read_fds)) || c->input_pending) {
                                                retval = service->input(c);
                                                if (retval != ERROR_OK) {
                                                        struct connection *next = c->next;
@@ -600,7 +604,7 @@ int server_loop(struct command_context *command_context)
        return shutdown_openocd == SHUTDOWN_WITH_ERROR_CODE ? ERROR_FAIL : ERROR_OK;
 }
 
-void sig_handler(int sig)
+static void sig_handler(int sig)
 {
        /* store only first signal that hits us */
        if (shutdown_openocd == CONTINUE_MAIN_LOOP) {
@@ -613,7 +617,7 @@ void sig_handler(int sig)
 
 
 #ifdef _WIN32
-BOOL WINAPI ControlHandler(DWORD dwCtrlType)
+BOOL WINAPI control_handler(DWORD ctrl_type)
 {
        shutdown_openocd = SHUTDOWN_WITH_SIGNAL_CODE;
        return TRUE;
@@ -631,25 +635,39 @@ static void sigkey_handler(int sig)
 #endif
 
 
-int server_preinit(void)
+int server_host_os_entry(void)
 {
        /* this currently only calls WSAStartup on native win32 systems
         * before any socket operations are performed.
         * This is an issue if you call init in your config script */
 
 #ifdef _WIN32
-       WORD wVersionRequested;
-       WSADATA wsaData;
+       WORD version_requested;
+       WSADATA wsadata;
 
-       wVersionRequested = MAKEWORD(2, 2);
+       version_requested = MAKEWORD(2, 2);
 
-       if (WSAStartup(wVersionRequested, &wsaData) != 0) {
+       if (WSAStartup(version_requested, &wsadata) != 0) {
                LOG_ERROR("Failed to Open Winsock");
                return ERROR_FAIL;
        }
+#endif
+       return ERROR_OK;
+}
 
+int server_host_os_close(void)
+{
+#ifdef _WIN32
+       WSACleanup();
+#endif
+       return ERROR_OK;
+}
+
+int server_preinit(void)
+{
+#ifdef _WIN32
        /* register ctrl-c handler */
-       SetConsoleCtrlHandler(ControlHandler, TRUE);
+       SetConsoleCtrlHandler(control_handler, TRUE);
 
        signal(SIGBREAK, sig_handler);
        signal(SIGINT, sig_handler);
@@ -688,8 +706,7 @@ int server_quit(void)
        target_quit();
 
 #ifdef _WIN32
-       WSACleanup();
-       SetConsoleCtrlHandler(ControlHandler, FALSE);
+       SetConsoleCtrlHandler(control_handler, FALSE);
 
        return ERROR_OK;
 #endif
@@ -769,7 +786,7 @@ COMMAND_HANDLER(handle_bindto_command)
 {
        switch (CMD_ARGC) {
                case 0:
-                       command_print(CMD_CTX, "bindto name: %s", bindto_name);
+                       command_print(CMD, "bindto name: %s", bindto_name);
                        break;
                case 1:
                        free(bindto_name);
@@ -799,7 +816,7 @@ static const struct command_registration server_command_handlers[] = {
        {
                .name = "bindto",
                .handler = &handle_bindto_command,
-               .mode = COMMAND_ANY,
+               .mode = COMMAND_CONFIG,
                .usage = "[name]",
                .help = "Specify address by name on which to listen for "
                        "incoming TCP/IP connections",
@@ -810,15 +827,15 @@ static const struct command_registration server_command_handlers[] = {
 int server_register_commands(struct command_context *cmd_ctx)
 {
        int retval = telnet_register_commands(cmd_ctx);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        retval = tcl_register_commands(cmd_ctx);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        retval = jsp_register_commands(cmd_ctx);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        return register_commands(cmd_ctx, NULL, server_command_handlers);
@@ -828,7 +845,7 @@ COMMAND_HELPER(server_port_command, unsigned short *out)
 {
        switch (CMD_ARGC) {
                case 0:
-                       command_print(CMD_CTX, "%d", *out);
+                       command_print(CMD, "%d", *out);
                        break;
                case 1:
                {
@@ -847,7 +864,7 @@ COMMAND_HELPER(server_pipe_command, char **out)
 {
        switch (CMD_ARGC) {
                case 0:
-                       command_print(CMD_CTX, "%s", *out);
+                       command_print(CMD, "%s", *out);
                        break;
                case 1:
                {