Proper size return from output buffers
authorJens Axboe <axboe@fb.com>
Tue, 27 Oct 2015 07:33:43 +0000 (16:33 +0900)
committerJens Axboe <axboe@fb.com>
Tue, 27 Oct 2015 07:33:43 +0000 (16:33 +0900)
Signed-off-by: Jens Axboe <axboe@fb.com>
lib/output_buffer.c
lib/output_buffer.h
log.c
log.h
parse.c

index 7a8d792f26294c1afc956ba57dfa7acca2a4769a..145272a00d60e4ed067ac404c1a1966a4bb98668 100644 (file)
@@ -20,25 +20,30 @@ void buf_output_free(struct buf_output *out)
        free(out->buf);
 }
 
-void buf_output_add(struct buf_output *out, const char *buf, size_t len)
+size_t buf_output_add(struct buf_output *out, const char *buf, size_t len)
 {
        while (out->max_buflen - out->buflen < len) {
                size_t newlen = out->max_buflen + BUF_INC - out->buflen;
 
-               out->buf = realloc(out->buf, out->max_buflen + BUF_INC);
                out->max_buflen += BUF_INC;
+               out->buf = realloc(out->buf, out->max_buflen);
                memset(&out->buf[out->buflen], 0, newlen);
        }
 
        memcpy(&out->buf[out->buflen], buf, len);
        out->buflen += len;
+       return len;
 }
 
-void buf_output_flush(struct buf_output *out)
+size_t buf_output_flush(struct buf_output *out)
 {
+       size_t ret = 0;
+
        if (out->buflen) {
-               log_local_buf(out->buf, out->buflen);
+               ret = log_local_buf(out->buf, out->buflen);
                memset(out->buf, 0, out->max_buflen);
                out->buflen = 0;
        }
+
+       return ret;
 }
index 4a35839b62e7bb59b7d507cc6ca1f333f278b407..0dfc3e254cbbdbf61e4199e29a5dfe97caf55aeb 100644 (file)
@@ -11,7 +11,7 @@ struct buf_output {
 
 void buf_output_init(struct buf_output *out, int index);
 void buf_output_free(struct buf_output *out);
-void buf_output_add(struct buf_output *out, const char *buf, size_t len);
-void buf_output_flush(struct buf_output *out);
+size_t buf_output_add(struct buf_output *out, const char *buf, size_t len);
+size_t buf_output_flush(struct buf_output *out);
 
 #endif
diff --git a/log.c b/log.c
index 78b3e7a79c05fb84d5be8594d46344a6ed927c21..e3ca29cd2c388f1c861e1663599f39acebad650c 100644 (file)
--- a/log.c
+++ b/log.c
@@ -6,7 +6,7 @@
 
 #include "fio.h"
 
-int log_valist(const char *str, va_list args)
+size_t log_valist(const char *str, va_list args)
 {
        char buffer[1024];
        size_t len;
@@ -24,7 +24,7 @@ int log_valist(const char *str, va_list args)
        return len;
 }
 
-int log_local_buf(const char *buf, size_t len)
+size_t log_local_buf(const char *buf, size_t len)
 {
        if (log_syslog)
                syslog(LOG_INFO, "%s", buf);
@@ -34,7 +34,7 @@ int log_local_buf(const char *buf, size_t len)
        return len;
 }
 
-int log_info(const char *format, ...)
+size_t log_info(const char *format, ...)
 {
        char buffer[1024];
        va_list args;
@@ -54,7 +54,7 @@ int log_info(const char *format, ...)
                return fwrite(buffer, len, 1, f_out);
 }
 
-int __log_buf(struct buf_output *buf, const char *format, ...)
+size_t __log_buf(struct buf_output *buf, const char *format, ...)
 {
        char buffer[1024];
        va_list args;
@@ -65,8 +65,7 @@ int __log_buf(struct buf_output *buf, const char *format, ...)
        va_end(args);
        len = min(len, sizeof(buffer) - 1);
 
-       buf_output_add(buf, buffer, len);
-       return 0;
+       return buf_output_add(buf, buffer, len);
 }
 
 int log_info_flush(void)
@@ -77,7 +76,7 @@ int log_info_flush(void)
        return fflush(f_out);
 }
 
-int log_err(const char *format, ...)
+size_t log_err(const char *format, ...)
 {
        char buffer[1024];
        va_list args;
diff --git a/log.h b/log.h
index d71fdc0795a8c4196124e83dfe3a52cc640892a3..aeabca9c7533d180887f89a152399b56aee3b810 100644 (file)
--- a/log.h
+++ b/log.h
@@ -9,11 +9,11 @@
 extern FILE *f_out;
 extern FILE *f_err;
 
-extern int log_err(const char *format, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
-extern int log_info(const char *format, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
-extern int __log_buf(struct buf_output *, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-extern int log_valist(const char *str, va_list);
-extern int log_local_buf(const char *buf, size_t);
+extern size_t log_err(const char *format, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
+extern size_t log_info(const char *format, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
+extern size_t __log_buf(struct buf_output *, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
+extern size_t log_valist(const char *str, va_list);
+extern size_t log_local_buf(const char *buf, size_t);
 extern int log_info_flush(void);
 
 #define log_buf(buf, format, args...)          \
diff --git a/parse.c b/parse.c
index 3e94c7d577746e251845245ce4fad018b76829ef..e330deae2c805602be5b5df5f4c462c0f773c9e0 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -52,7 +52,7 @@ static void posval_sort(struct fio_option *o, struct value_pair *vpmap)
 }
 
 static void show_option_range(struct fio_option *o,
-                               int (*logger)(const char *format, ...))
+                             size_t (*logger)(const char *format, ...))
 {
        if (o->type == FIO_OPT_FLOAT_LIST) {
                if (o->minfp == DBL_MIN && o->maxfp == DBL_MAX)
@@ -109,7 +109,7 @@ static void show_option_help(struct fio_option *o, int is_err)
                "no argument (opt)",
                "deprecated",
        };
-       int (*logger)(const char *format, ...);
+       size_t (*logger)(const char *format, ...);
 
        if (is_err)
                logger = log_err;