From 6e19032aa4c34a5c6c900e558d8bfa88f8382bc0 Mon Sep 17 00:00:00 2001 Message-Id: <6e19032aa4c34a5c6c900e558d8bfa88f8382bc0.1714711794.git.mdw@distorted.org.uk> From: Mark Wooding Date: Tue, 5 May 2020 19:53:45 +0100 Subject: [PATCH] lib/printf.h, libtests/t-printf.c: Bodge to inhibit warning from GCC 9. Organization: Straylight/Edgeware From: Mark Wooding It seems that GCC 9 now peers closely at field-width specifiers in `printf' format strings to make sure that they're sensible. This is a good thing except when you're trying to test how your `printf'-like function copes with out-of-range field width specifiers. Add a new macro `INHIBIT_PRINTF_FORMAT_CHECKING' to turn off the magic GCC attribute, and use it in `t-printf.c' to prevent GCC from breaking the build. --- lib/printf.h | 20 ++++++++++++++++---- libtests/t-printf.c | 1 + 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/printf.h b/lib/printf.h index 9adb9ab..1451fc2 100644 --- a/lib/printf.h +++ b/lib/printf.h @@ -41,7 +41,10 @@ int byte_snprintf(char buffer[], size_t bufsize, const char *fmt, ...) - attribute((format (printf, 3, 4))); +#ifndef INHIBIT_PRINTF_FORMAT_CHECKING + attribute((format (printf, 3, 4))) +#endif + ; /* analogues of [v]snprintf */ int byte_vasprintf(char **ptrp, @@ -50,7 +53,10 @@ int byte_vasprintf(char **ptrp, int byte_asprintf(char **ptrp, const char *fmt, ...) - attribute((format (printf, 2, 3))); +#ifndef INHIBIT_PRINTF_FORMAT_CHECKING + attribute((format (printf, 2, 3))) +#endif + ; /* analogues of [v]asprintf (uses xmalloc/xrealloc) */ int byte_xvasprintf(char **ptrp, @@ -59,12 +65,18 @@ int byte_xvasprintf(char **ptrp, int byte_xasprintf(char **ptrp, const char *fmt, ...) - attribute((format (printf, 2, 3))); +#ifndef INHIBIT_PRINTF_FORMAT_CHECKING + attribute((format (printf, 2, 3))) +#endif + ; /* same but terminate on error */ int byte_vfprintf(FILE *fp, const char *fmt, va_list ap); int byte_fprintf(FILE *fp, const char *fmt, ...) - attribute((format (printf, 2, 3))); +#ifndef INHIBIT_PRINTF_FORMAT_CHECKING + attribute((format (printf, 2, 3))) +#endif + ; /* analogues of [v]fprintf */ #endif /* PRINTF_H */ diff --git a/libtests/t-printf.c b/libtests/t-printf.c index d9c22af..fbbf5e7 100644 --- a/libtests/t-printf.c +++ b/libtests/t-printf.c @@ -15,6 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +#define INHIBIT_PRINTF_FORMAT_CHECKING #include "test.h" /* launder a string constant to stop gcc warnings */ -- [mdw]