X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fhelper%2Flog.c;h=da227bd72f279c3980c0cc7d9647238a1e83b6c0;hb=9f26aff39c047d813047b4f4bae1f5de3cfc56b1;hp=3799fb322b91cf00a9120d51c27ea64170edc682;hpb=29772ec37293e7fbc6f11cc8a73b5d4d820707c7;p=openocd diff --git a/src/helper/log.c b/src/helper/log.c index 3799fb32..da227bd7 100644 --- a/src/helper/log.c +++ b/src/helper/log.c @@ -29,7 +29,7 @@ #include "time_support.h" // @todo the inclusion of server.h here is a layering violation -#include "server.h" +#include #include @@ -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,42 +279,52 @@ 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 = "", + .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 = "", + .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 }; int log_register_commands(struct command_context *cmd_ctx) { - start = timeval_ms(); - return register_commands(cmd_ctx, NULL, log_command_handlers); } -int log_init(struct command_context *cmd_ctx) +void log_init(void) { - /* set defaults for daemon configuration, if not set by cmdline or cfgfile */ + /* set defaults for daemon configuration, + * if not set by cmdline or cfgfile */ if (debug_level == -1) debug_level = LOG_LVL_INFO; - if (log_output == NULL) + char *debug_env = getenv("OPENOCD_DEBUG_LEVEL"); + if (NULL != debug_env) { - log_output = stderr; + int value; + int retval = parse_int(debug_env, &value); + if (ERROR_OK == retval && + debug_level >= LOG_LVL_SILENT && + debug_level <= LOG_LVL_DEBUG) + { + debug_level = value; + } } - start = last_time = timeval_ms(); + if (log_output == NULL) + log_output = stderr; - return ERROR_OK; + start = last_time = timeval_ms(); } int set_log_output(struct command_context *cmd_ctx, FILE *output)