jim: fix bug in tcl "puts"
[fw/openocd] / src / helper / log.c
index 3067ecc56180fadcdbbc797c784cdecb0147eceb..da227bd72f279c3980c0cc7d9647238a1e83b6c0 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "time_support.h"
 // @todo the inclusion of server.h here is a layering violation
-#include "server.h"
+#include <server/server.h>
 
 #include <stdarg.h>
 
@@ -114,44 +114,6 @@ static void log_forward(const char *file, unsigned line, const char *function, c
        }
 }
 
-void log_try(void)
-{
-       log_forward_count++;
-}
-
-void log_catch(void)
-{
-       assert(log_forward_count>0);
-       log_forward_count--;
-}
-
-void log_rethrow(void)
-{
-       log_catch();
-       if (log_forward_count==0)
-       {
-               struct store_log_forward *log;
-
-               log = log_head;
-               while (log != NULL)
-               {
-                       log_forward(log->file, log->line, log->function, log->string);
-
-                       struct store_log_forward *t=log;
-                       log = log->next;
-
-                       free((void *)t->file);
-                       free((void *)t->function);
-                       free((void *)t->string);
-                       free(t);
-
-               }
-
-               log_head = NULL;
-       }
-}
-
-
 /* The log_puts() serves to somewhat different goals:
  *
  * - logging
@@ -177,7 +139,7 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch
        if (f != NULL)
                file = f + 1;
 
-       if (strchr(string, '\n') != NULL)
+       if (strlen(string) > 0)
        {
                if (debug_level >= LOG_LVL_DEBUG)
                {
@@ -201,17 +163,12 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch
                {
                        /* if we are using gdb through pipes then we do not want any output
                         * to the pipe otherwise we get repeated strings */
-                       if (strcmp(string, "\n") != 0)
-                       {
-                               /* print human readable output - but skip empty lines */
-                               fprintf(log_output, "%s%s",
-                                               (level > LOG_LVL_USER)?log_strings[level + 1]:"", string);
-                       }
+                       fprintf(log_output, "%s%s",
+                                       (level > LOG_LVL_USER)?log_strings[level + 1]:"", string);
                }
        } else
        {
-               /* only entire lines are logged. Otherwise it's
-                * single chars intended for the log callbacks. */
+               /* Empty strings are sent to log callbacks to keep e.g. gdbserver alive, here we do nothing. */
        }
 
        fflush(log_output);
@@ -286,13 +243,16 @@ COMMAND_HANDLER(handle_debug_level_command)
 
        if (debug_level >= LOG_LVL_DEBUG && server_use_pipes == 1)
        {
-               /* if we are enabling debug info then we need to write to a log file
-                * otherwise the pipe will get full and cause issues with gdb */
+               /* if we are enabling debug info then we need to write to a
+                * log file otherwise the pipe will get full and cause issues
+                * with gdb
+                */
                FILE* file = fopen("openocd.log", "w");
                if (file)
                {
                        log_output = file;
-                       LOG_WARNING("enabling log output as we are using pipes");
+                       LOG_WARNING("enabling logfile output because "
+                               "we are using pipes to talk to GDB.");
                }
        }
 
@@ -319,17 +279,19 @@ COMMAND_HANDLER(handle_log_output_command)
 static struct command_registration log_command_handlers[] = {
        {
                .name = "log_output",
-               .handler = &handle_log_output_command,
+               .handler = handle_log_output_command,
                .mode = COMMAND_ANY,
                .help = "redirect logging to a file (default: stderr)",
-               .usage = "<file_name>",
+               .usage = "file_name",
        },
        {
                .name = "debug_level",
-               .handler = &handle_debug_level_command,
+               .handler = handle_debug_level_command,
                .mode = COMMAND_ANY,
-               .help = "sets the verbosity level of debugging output",
-               .usage = "<level:0-3>",
+               .help = "Sets the verbosity level of debugging output. "
+                       "0 shows errors only; 1 adds warnings; "
+                       "2 (default) adds other info; 3 adds debugging.",
+               .usage = "number",
        },
        COMMAND_REGISTRATION_DONE
 };