From bb8077d7e3a3b8cab3fb3c3065c99fce9aeed2bc Mon Sep 17 00:00:00 2001 From: Arnaud Lacombe Date: Wed, 23 Nov 2011 13:05:53 -0500 Subject: [PATCH] kbuild: Fix compiler warning with assertion when calling 'fwrite' Reinhard Tartler discovered a corner case of calling xfwrite() where the length of the string is zero. Arnaud Lacombe suggested to use assertion for the corner case, as fwrite(3) is currently used: 1) in comment printers. Empty comment are not allowed. 2) in a callback passed to expr_print(), where the string printed is either NULL OR non-empty. 3) in the lexer, auto-generated, and unused. I feel using assertion is a good solution: 1) It cleanly takes care of the above-mentioned corner case. 2) It can be easily disabled by defining NDEBUG. 3) It asserts xfwrite() is simply a wrapper for fwrite(). Reported-by: Reinhard Tartler Signed-off-by: Arnaud Lacombe Signed-off-by: Jean Sacren Signed-off-by: Michal Marek Signed-off-by: Christian Lamparter --- config/expr.h | 1 + config/lkc.h | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/config/expr.h b/config/expr.h index 80fce57..d4ecce8 100644 --- a/config/expr.h +++ b/config/expr.h @@ -10,6 +10,7 @@ extern "C" { #endif +#include #include #ifndef __cplusplus #include diff --git a/config/lkc.h b/config/lkc.h index b633bdb..c18f2bd 100644 --- a/config/lkc.h +++ b/config/lkc.h @@ -90,8 +90,10 @@ struct conf_printer { /* confdata.c and expr.c */ static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out) { - if (fwrite(str, len, count, out) < count) - fprintf(stderr, "\nError in writing or end of file.\n"); + assert(len != 0); + + if (fwrite(str, len, count, out) != count) + fprintf(stderr, "Error in writing or end of file.\n"); } /* menu.c */ -- 2.31.1