The override in stdio.in.h of fprintf, printf, vfprintf, vprintf introduced on 2008-09-26 was suboptimal. Now that we use _GL_WARN_ON_USE, since 2010-01-20, it can be improved. I'm applying this:
2010-02-20 Bruno Haible <br...@clisp.org> Improve *printf warning condition. * lib/stdio.in.h (fprintf, printf, vfprintf, vprintf): Emit warning also if GNULIB_POSIXCHECK is defined, the *-posix module is not used, and the function is overridden due to SIGPIPE emulation. *** lib/stdio.in.h.orig Sun Feb 21 00:56:35 2010 --- lib/stdio.in.h Sun Feb 21 00:52:35 2010 *************** *** 133,152 **** "use gnulib module fopen for portability"); #endif ! #if @GNULIB_FPRINTF_POSIX@ ! # if @REPLACE_FPRINTF@ # define fprintf rpl_fprintf extern int fprintf (FILE *fp, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3))) _GL_ARG_NONNULL ((1, 2)); # endif ! #elif @GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ ! # define fprintf rpl_fprintf ! extern int fprintf (FILE *fp, const char *format, ...) ! __attribute__ ((__format__ (__printf__, 2, 3))) ! _GL_ARG_NONNULL ((1, 2)); ! #elif defined GNULIB_POSIXCHECK ! # undef fprintf /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " --- 133,152 ---- "use gnulib module fopen for portability"); #endif ! #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ ! # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ ! || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@) # define fprintf rpl_fprintf + # define GNULIB_overrides_fprintf 1 extern int fprintf (FILE *fp, const char *format, ...) __attribute__ ((__format__ (__printf__, 2, 3))) _GL_ARG_NONNULL ((1, 2)); # endif ! #endif ! #if !...@gnulib_fprintf_posix@ && defined GNULIB_POSIXCHECK ! # if !GNULIB_overrides_fprintf ! # undef fprintf ! # endif /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " *************** *** 439,458 **** # endif #endif ! #if @GNULIB_PRINTF_POSIX@ ! # if @REPLACE_PRINTF@ /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ extern int printf (const char *format, ...) __attribute__ ((__format__ (__printf__, 1, 2))) _GL_ARG_NONNULL ((1)); # endif ! #elif @GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ ! /* Don't break __attribute__((format(printf,M,N))). */ ! # define printf __printf__ ! extern int printf (const char *format, ...) ! __attribute__ ((__format__ (__printf__, 1, 2))) _GL_ARG_NONNULL ((1)); ! #elif defined GNULIB_POSIXCHECK ! # undef printf /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " --- 439,458 ---- # endif #endif ! #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ ! # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ ! || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@) /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ + # define GNULIB_overrides_printf 1 extern int printf (const char *format, ...) __attribute__ ((__format__ (__printf__, 1, 2))) _GL_ARG_NONNULL ((1)); # endif ! #endif ! #if !...@gnulib_printf_posix@ && defined GNULIB_POSIXCHECK ! # if !GNULIB_overrides_printf ! # undef printf ! # endif /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " *************** *** 595,632 **** # endif #endif ! #if @GNULIB_VFPRINTF_POSIX@ ! # if @REPLACE_VFPRINTF@ # define vfprintf rpl_vfprintf extern int vfprintf (FILE *fp, const char *format, va_list args) __attribute__ ((__format__ (__printf__, 2, 0))) _GL_ARG_NONNULL ((1, 2)); # endif ! #elif @GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ ! # define vfprintf rpl_vfprintf ! extern int vfprintf (FILE *fp, const char *format, va_list args) ! __attribute__ ((__format__ (__printf__, 2, 0))) ! _GL_ARG_NONNULL ((1, 2)); ! #elif defined GNULIB_POSIXCHECK ! # undef vfprintf /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif ! #if @GNULIB_VPRINTF_POSIX@ ! # if @REPLACE_VPRINTF@ # define vprintf rpl_vprintf extern int vprintf (const char *format, va_list args) __attribute__ ((__format__ (__printf__, 1, 0))) _GL_ARG_NONNULL ((1)); # endif ! #elif @GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ ! # define vprintf rpl_vprintf ! extern int vprintf (const char *format, va_list args) ! __attribute__ ((__format__ (__printf__, 1, 0))) _GL_ARG_NONNULL ((1)); ! #elif defined GNULIB_POSIXCHECK ! # undef vprintf /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable " --- 595,633 ---- # endif #endif ! #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ ! # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ ! || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@) # define vfprintf rpl_vfprintf + # define GNULIB_overrides_vfprintf 1 extern int vfprintf (FILE *fp, const char *format, va_list args) __attribute__ ((__format__ (__printf__, 2, 0))) _GL_ARG_NONNULL ((1, 2)); # endif ! #endif ! #if !...@gnulib_vfprintf_posix@ && defined GNULIB_POSIXCHECK ! # if !GNULIB_overrides_vfprintf ! # undef vfprintf ! # endif /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif ! #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ ! # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ ! || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@) # define vprintf rpl_vprintf + # define GNULIB_overrides_vprintf 1 extern int vprintf (const char *format, va_list args) __attribute__ ((__format__ (__printf__, 1, 0))) _GL_ARG_NONNULL ((1)); # endif ! #endif ! #if !...@gnulib_vprintf_posix@ && defined GNULIB_POSIXCHECK ! # if !GNULIB_overrides_vprintf ! # undef vprintf ! # endif /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable "