- rename log functions to stop conflicts under win32 (wingdi)
[openocd.git] / src / helper / log.c
index 5127a3731ab28fd06f0bb6193a1ad286c98ad5e7..d0f0e3ddb4ba615727a72c82c0bb34d450850af0 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "log.h"
 #include "configuration.h"
+#include "time_support.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -35,7 +36,7 @@ int debug_level = -1;
 static FILE* log_output;
 static log_callback_t *log_callbacks = NULL;
 
-static time_t start;
+static long long start;
 
 static char *log_strings[5] =
 {
@@ -60,7 +61,7 @@ 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)
+       if (level == LOG_LVL_OUTPUT)
        {
                /* do not prepend any headers, just print out what we were given and return */
                fputs(string, log_output);
@@ -74,10 +75,10 @@ static void log_puts(enum log_levels level, const char *file, int line, const ch
 
        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)(time(NULL)-start);
+                       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);
                }
                else
@@ -93,8 +94,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;
@@ -119,7 +120,7 @@ void log_printf(enum log_levels level, const char *file, int line, const char *f
        va_list ap;
        va_start(ap, format);
 
-       string = alloc_printf(format, ap);
+       string = alloc_vprintf(format, ap);
        if (string != NULL)
        {
                log_puts(level, file, line, function, string);
@@ -140,10 +141,10 @@ void log_printf_lf(enum log_levels level, const char *file, int line, const char
        va_list ap;
        va_start(ap, format);
        
-       string = alloc_printf(format, ap);
+       string = alloc_vprintf(format, ap);
        if (string != NULL)
        {
-               strcat(string, "\n"); /* alloc_printf guaranteed the buffer to be at least one char longer */
+               strcat(string, "\n"); /* alloc_vprintf guaranteed the buffer to be at least one char longer */
                log_puts(level, file, line, function, string);
                free(string);
        }
@@ -191,7 +192,7 @@ int handle_log_output_command(struct command_context_s *cmd_ctx, char *cmd, char
 
 int log_register_commands(struct command_context_s *cmd_ctx)
 {
-       start = time(NULL);
+       start = timeval_ms();
        register_command(cmd_ctx, NULL, "log_output", handle_log_output_command,
                COMMAND_ANY, "redirect logging to <file> (default: stderr)");
        register_command(cmd_ctx, NULL, "debug_level", handle_debug_level_command,
@@ -204,7 +205,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)
        {
@@ -264,29 +265,27 @@ int log_remove_callback(log_callback_fn fn, void *priv)
 }
 
 /* return allocated string w/printf() result */
-char *alloc_printf(const char *fmt, va_list ap)
+char *alloc_vprintf(const char *fmt, va_list ap)
 {
        /* no buffer at the beginning, force realloc to do the job */
        char *string = NULL;
        
-       /* start with minimal length to exercise all the code paths */
-       int size = 1;
+       /* start with buffer size suitable for typical messages */
+       int size = 128;
 
        for (;;)
        {
-               size *= 2; /* double the buffer size */
-
-                       char *t = string;
-                       string = realloc(string, size);
-                       if (string == NULL)
-                       {
-                               if (t != NULL)
-                                       free(t);
-                               return NULL;
-                       }
+               char *t = string;
+               string = realloc(string, size);
+               if (string == NULL)
+               {
+                       if (t != NULL)
+                               free(t);
+                       return NULL;
+               }
 
-               va_list ap_copy;                
-               va_copy(ap_copy, ap);
+               va_list ap_copy;
+               va_copy(ap_copy, ap);
 
                int ret;
                ret = vsnprintf(string, size, fmt, ap_copy);
@@ -295,8 +294,19 @@ char *alloc_printf(const char *fmt, va_list ap)
                        break;
 
                /* there was just enough or not enough space, allocate more in the next round */
+               size *= 2; /* double the buffer size */
        }
        
        /* the returned buffer is by principle guaranteed to be at least one character longer */
        return string;
 }
+
+char *alloc_printf(const char *format, ...)
+{
+       char *string;
+       va_list ap;
+       va_start(ap, format);
+       string = alloc_vprintf(format, ap);
+       va_end(ap);
+       return string;
+}

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)