openocd: src/helper: replace the GPL-2.0-or-later license tag
[fw/openocd] / src / helper / log.c
index b39cb9136ae70de8ea5c608c33e053dcaf66f1c4..f3872b5411e2750a65bc63203132a727f5dc4ada 100644 (file)
@@ -1,3 +1,5 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
 /***************************************************************************
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
@@ -7,19 +9,6 @@
  *                                                                         *
  *   Copyright (C) 2008 by Spencer Oliver                                  *
  *   spen@spen-soft.co.uk                                                  *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -30,6 +19,7 @@
 #include "command.h"
 #include "replacements.h"
 #include "time_support.h"
+#include <server/server.h>
 
 #include <stdarg.h>
 
@@ -47,7 +37,6 @@ static FILE *log_output;
 static struct log_callback *log_callbacks;
 
 static int64_t last_time;
-static int64_t current_time;
 
 static int64_t start;
 
@@ -108,35 +97,30 @@ static void log_puts(enum log_levels level,
        }
 
        f = strrchr(file, '/');
-       if (f != NULL)
+       if (f)
                file = f + 1;
 
-       if (strlen(string) > 0) {
-               if (debug_level >= LOG_LVL_DEBUG) {
-                       /* print with count and time information */
-                       int64_t t = timeval_ms() - start;
+       if (debug_level >= LOG_LVL_DEBUG) {
+               /* print with count and time information */
+               int64_t t = timeval_ms() - start;
 #ifdef _DEBUG_FREE_SPACE_
-                       struct mallinfo info;
-                       info = mallinfo();
+               struct mallinfo info;
+               info = mallinfo();
 #endif
-                       fprintf(log_output, "%s%d %" PRId64 " %s:%d %s()"
+               fprintf(log_output, "%s%d %" PRId64 " %s:%d %s()"
 #ifdef _DEBUG_FREE_SPACE_
-                               " %d"
+                       " %d"
 #endif
-                               ": %s", log_strings[level + 1], count, t, file, line, function,
+                       ": %s", log_strings[level + 1], count, t, file, line, function,
 #ifdef _DEBUG_FREE_SPACE_
-                               info.fordblks,
+                       info.fordblks,
 #endif
-                               string);
-               } else {
-                       /* if we are using gdb through pipes then we do not want any output
-                        * to the pipe otherwise we get repeated strings */
-                       fprintf(log_output, "%s%s",
-                               (level > LOG_LVL_USER) ? log_strings[level + 1] : "", string);
-               }
+                       string);
        } else {
-               /* Empty strings are sent to log callbacks to keep e.g. gdbserver alive, here we do
-                *nothing. */
+               /* if we are using gdb through pipes then we do not want any output
+                * to the pipe otherwise we get repeated strings */
+               fprintf(log_output, "%s%s",
+                       (level > LOG_LVL_USER) ? log_strings[level + 1] : "", string);
        }
 
        fflush(log_output);
@@ -163,7 +147,7 @@ void log_printf(enum log_levels level,
        va_start(ap, format);
 
        string = alloc_vprintf(format, ap);
-       if (string != NULL) {
+       if (string) {
                log_puts(level, file, line, function, string);
                free(string);
        }
@@ -230,7 +214,7 @@ COMMAND_HANDLER(handle_debug_level_command)
 COMMAND_HANDLER(handle_log_output_command)
 {
        if (CMD_ARGC == 0 || (CMD_ARGC == 1 && strcmp(CMD_ARGV[0], "default") == 0)) {
-               if (log_output != stderr && log_output != NULL) {
+               if (log_output != stderr && log_output) {
                        /* Close previous log file, if it was open and wasn't stderr. */
                        fclose(log_output);
                }
@@ -240,11 +224,11 @@ COMMAND_HANDLER(handle_log_output_command)
        }
        if (CMD_ARGC == 1) {
                FILE *file = fopen(CMD_ARGV[0], "w");
-               if (file == NULL) {
+               if (!file) {
                        LOG_ERROR("failed to open output log '%s'", CMD_ARGV[0]);
                        return ERROR_FAIL;
                }
-               if (log_output != stderr && log_output != NULL) {
+               if (log_output != stderr && log_output) {
                        /* Close previous log file, if it was open and wasn't stderr. */
                        fclose(log_output);
                }
@@ -287,7 +271,7 @@ void log_init(void)
        /* set defaults for daemon configuration,
         * if not set by cmdline or cfgfile */
        char *debug_env = getenv("OPENOCD_DEBUG_LEVEL");
-       if (NULL != debug_env) {
+       if (debug_env) {
                int value;
                int retval = parse_int(debug_env, &value);
                if (retval == ERROR_OK &&
@@ -296,12 +280,21 @@ void log_init(void)
                                debug_level = value;
        }
 
-       if (log_output == NULL)
+       if (!log_output)
                log_output = stderr;
 
        start = last_time = timeval_ms();
 }
 
+void log_exit(void)
+{
+       if (log_output && log_output != stderr) {
+               /* Close log file, if it was open and wasn't stderr. */
+               fclose(log_output);
+       }
+       log_output = NULL;
+}
+
 int set_log_output(struct command_context *cmd_ctx, FILE *output)
 {
        log_output = output;
@@ -322,7 +315,7 @@ int log_add_callback(log_callback_fn fn, void *priv)
        /* alloc memory, it is safe just to return in case of an error, no need for the caller to
         *check this */
        cb = malloc(sizeof(struct log_callback));
-       if (cb == NULL)
+       if (!cb)
                return ERROR_BUF_TOO_SMALL;
 
        /* add item to the beginning of the linked list */
@@ -367,7 +360,7 @@ char *alloc_vprintf(const char *fmt, va_list ap)
         * other code depend on that. They should be probably be fixed, but for
         * now reserve the extra byte. */
        string = malloc(len + 2);
-       if (string == NULL)
+       if (!string)
                return NULL;
 
        /* do the real work */
@@ -431,8 +424,7 @@ static void gdb_timeout_warning(int64_t delta_time)
 
 void keep_alive(void)
 {
-       current_time = timeval_ms();
-
+       int64_t current_time = timeval_ms();
        int64_t delta_time = current_time - last_time;
 
        if (delta_time > KEEP_ALIVE_TIMEOUT_MS) {
@@ -445,7 +437,7 @@ void keep_alive(void)
                last_time = current_time;
 
                /* this will keep the GDB connection alive */
-               LOG_USER_N("%s", "");
+               server_keep_clients_alive();
 
                /* DANGER!!!! do not add code to invoke e.g. target event processing,
                 * jim timer processing, etc. it can cause infinite recursion +
@@ -460,7 +452,7 @@ void keep_alive(void)
 /* reset keep alive timer without sending message */
 void kept_alive(void)
 {
-       current_time = timeval_ms();
+       int64_t current_time = timeval_ms();
 
        int64_t delta_time = current_time - last_time;