lib/printf.h, libtests/t-printf.c: Bodge to inhibit warning from GCC 9.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 5 May 2020 18:53:45 +0000 (19:53 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Tue, 5 May 2020 22:17:44 +0000 (23:17 +0100)
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
libtests/t-printf.c

index 9adb9ab..1451fc2 100644 (file)
@@ -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 */
index d9c22af..fbbf5e7 100644 (file)
@@ -15,6 +15,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
+#define INHIBIT_PRINTF_FORMAT_CHECKING
 #include "test.h"
 
 /* launder a string constant to stop gcc warnings */