log: unify the logging handlers
authorJens Axboe <axboe@fb.com>
Wed, 24 May 2017 16:15:20 +0000 (10:15 -0600)
committerJens Axboe <axboe@fb.com>
Wed, 24 May 2017 16:15:20 +0000 (10:15 -0600)
Just provide one handler that does the va args and buffer
printing/allocation, and make the rest of them use that.

Signed-off-by: Jens Axboe <axboe@fb.com>
log.c

diff --git a/log.c b/log.c
index c7856eb74f6266e364951c4320e25ee95688e2c4..95351d57d96ca4fd0ea97e43d38352f9b7b3dde1 100644 (file)
--- a/log.c
+++ b/log.c
@@ -29,78 +29,66 @@ size_t log_info_buf(const char *buf, size_t len)
                return fwrite(buf, len, 1, f_out);
 }
 
-size_t log_valist(const char *str, va_list args)
+static size_t valist_to_buf(char **buffer, const char *fmt, va_list src_args)
 {
        size_t len, cur = LOG_START_SZ;
-       char *buffer;
+       va_list args;
 
        do {
-               buffer = calloc(1, cur);
+               *buffer = calloc(1, cur);
+
+               va_copy(args, src_args);
+               len = vsnprintf(*buffer, cur, fmt, args);
+               va_end(args);
 
-               len = vsnprintf(buffer, cur, str, args);
                if (len < cur)
                        break;
 
                cur = len + 1;
-               free(buffer);
+               free(*buffer);
        } while (1);
 
-       cur = log_info_buf(buffer, len);
-       free(buffer);
-
-       return cur;
+       return len;
 }
 
-size_t log_info(const char *format, ...)
+size_t log_valist(const char *fmt, va_list args)
 {
-       size_t len, cur = LOG_START_SZ;
        char *buffer;
-       va_list args;
-
-       do {
-               buffer = calloc(1, cur);
+       size_t len;
 
-               va_start(args, format);
-               len = vsnprintf(buffer, cur, format, args);
-               va_end(args);
+       len = valist_to_buf(&buffer, fmt, args);
+       len = log_info_buf(buffer, len);
+       free(buffer);
 
-               if (len < cur)
-                       break;
+       return len;
+}
 
-               cur = len + 1;
-               free(buffer);
-       } while (1);
+size_t log_info(const char *format, ...)
+{
+       va_list args;
+       size_t ret;
 
-       cur = log_info_buf(buffer, len);
-       free(buffer);
+       va_start(args, format);
+       ret = log_valist(format, args);
+       va_end(args);
 
-       return cur;
+       return ret;
 }
 
 size_t __log_buf(struct buf_output *buf, const char *format, ...)
 {
-       size_t len, cur = LOG_START_SZ;
        char *buffer;
        va_list args;
+       size_t len;
 
-       do {
-               buffer = calloc(1, cur);
-
-               va_start(args, format);
-               len = vsnprintf(buffer, cur, format, args);
-               va_end(args);
-
-               if (len < cur)
-                       break;
-
-               cur = len + 1;
-               free(buffer);
-       } while (1);
+       va_start(args, format);
+       len = valist_to_buf(&buffer, format, args);
+       va_end(args);
 
-       cur = buf_output_add(buf, buffer, len);
+       len = buf_output_add(buf, buffer, len);
        free(buffer);
 
-       return cur;
+       return len;
 }
 
 int log_info_flush(void)
@@ -113,24 +101,13 @@ int log_info_flush(void)
 
 size_t log_err(const char *format, ...)
 {
-       size_t ret, len, cur = LOG_START_SZ;
+       size_t ret, len;
        char *buffer;
        va_list args;
 
-       do {
-               buffer = calloc(1, cur);
-
-               va_start(args, format);
-               len = vsnprintf(buffer, cur, format, args);
-               va_end(args);
-
-               if (len < cur)
-                       break;
-
-               cur = len + 1;
-               free(buffer);
-       } while (1);
-
+       va_start(args, format);
+       len = valist_to_buf(&buffer, format, args);
+       va_end(args);
 
        if (is_backend) {
                ret = fio_server_text_output(FIO_LOG_ERR, buffer, len);