From 5768cc2b5dd6460065f779d248139f6c679c0d27 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Tue, 27 Oct 2015 16:33:43 +0900 Subject: [PATCH] Proper size return from output buffers Signed-off-by: Jens Axboe --- lib/output_buffer.c | 13 +++++++++---- lib/output_buffer.h | 4 ++-- log.c | 13 ++++++------- log.h | 10 +++++----- parse.c | 4 ++-- 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/lib/output_buffer.c b/lib/output_buffer.c index 7a8d792f..145272a0 100644 --- a/lib/output_buffer.c +++ b/lib/output_buffer.c @@ -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; } diff --git a/lib/output_buffer.h b/lib/output_buffer.h index 4a35839b..0dfc3e25 100644 --- a/lib/output_buffer.h +++ b/lib/output_buffer.h @@ -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 78b3e7a7..e3ca29cd 100644 --- 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 d71fdc07..aeabca9c 100644 --- 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 3e94c7d5..e330deae 100644 --- 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; -- 2.25.1