X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fhelper%2Flog.c;h=e9c1fa205d2a5aa5273a3b2fa445593aa6d5ee88;hb=36c8c0a069cae58ab802e190e98e62a863588923;hp=2e985d03c0f4a996eff8001aa989aa35a19342be;hpb=6de8c33c38aed8af47299439a268855fd0471136;p=openocd.git diff --git a/src/helper/log.c b/src/helper/log.c index 2e985d03c0..e9c1fa205d 100644 --- a/src/helper/log.c +++ b/src/helper/log.c @@ -29,7 +29,11 @@ #include #include #include -#include + +#define PRINT_MEM() 0 +#if PRINT_MEM() +#include +#endif int debug_level = -1; @@ -61,7 +65,8 @@ static int count = 0; */ static void log_puts(enum log_levels level, const char *file, int line, const char *function, const char *string) { - if (level == LOG_OUTPUT) + char *f; + if (level == LOG_LVL_OUTPUT) { /* do not prepend any headers, just print out what we were given and return */ fputs(string, log_output); @@ -69,17 +74,29 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch return; } - char *f = strrchr(file, '/'); + f = strrchr(file, '/'); if (f != NULL) file = f + 1; if (strchr(string, '\n')!=NULL) { - if (debug_level >= LOG_DEBUG) + if (debug_level >= LOG_LVL_DEBUG) { /* print with count and time information */ int t=(int)(timeval_ms()-start); - fprintf(log_output, "%s %d %d %s:%d %s(): %s", log_strings[level+1], count, t, file, line, function, string); +#if PRINT_MEM() + struct mallinfo info; + info = mallinfo(); +#endif + fprintf(log_output, "%s %d %d %s:%d %s()" +#if PRINT_MEM() + " %d" +#endif + ": %s", log_strings[level+1], count, t, file, line, function, +#if PRINT_MEM() + info.fordblks, +#endif + string); } else { @@ -94,8 +111,8 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch fflush(log_output); - /* Never forward LOG_DEBUG, too verbose and they can be found in the log if need be */ - if (level <= LOG_INFO) + /* Never forward LOG_LVL_DEBUG, too verbose and they can be found in the log if need be */ + if (level <= LOG_LVL_INFO) { log_callback_t *cb, *next; cb = log_callbacks; @@ -112,12 +129,12 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch void log_printf(enum log_levels level, const char *file, int line, const char *function, const char *format, ...) { char *string; + va_list ap; count++; if (level > debug_level) return; - va_list ap; va_start(ap, format); string = alloc_vprintf(format, ap); @@ -133,12 +150,12 @@ void log_printf(enum log_levels level, const char *file, int line, const char *f void log_printf_lf(enum log_levels level, const char *file, int line, const char *function, const char *format, ...) { char *string; + va_list ap; count++; if (level > debug_level) return; - va_list ap; va_start(ap, format); string = alloc_vprintf(format, ap); @@ -205,7 +222,7 @@ int log_init(struct command_context_s *cmd_ctx) { /* set defaults for daemon configuration, if not set by cmdline or cfgfile */ if (debug_level == -1) - debug_level = LOG_INFO; + debug_level = LOG_LVL_INFO; if (log_output == NULL) { @@ -276,6 +293,8 @@ char *alloc_vprintf(const char *fmt, va_list ap) for (;;) { char *t = string; + va_list ap_copy; + int ret; string = realloc(string, size); if (string == NULL) { @@ -284,10 +303,8 @@ char *alloc_vprintf(const char *fmt, va_list ap) return NULL; } - va_list ap_copy; va_copy(ap_copy, ap); - int ret; ret = vsnprintf(string, size, fmt, ap_copy); /* NB! The result of the vsnprintf() might be an *EMPTY* string! */ if ((ret >= 0) && ((ret + 1) < size))