From: Bruno Haible Date: Tue, 24 Nov 2020 00:32:51 +0000 (+0100) Subject: Use the correct printf format attribute for mingw. X-Git-Tag: v1.0~3471 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=387d654cabd7bc1594b1fc8d195cd9b66f820296;p=gnulib.git Use the correct printf format attribute for mingw. Reported by Reuben Thomas in . * modules/vfprintf-posix (configure.ac): Define GNULIB_VFPRINTF_POSIX. * modules/vprintf-posix (configure.ac): Define GNULIB_VPRINTF_POSIX. * lib/stdio.in.h (_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM): New macros. (_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD): Renamed from _GL_ATTRIBUTE_FORMAT_PRINTF. Use _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. (_GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM): Use _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. * modules/vasnprintf (Depends-on): Add stdio. * lib/vasnprintf.h: Include . (asnprintf, vasnprintf): Use the standard printf format attribute. * modules/xvasprintf (Depends-on): Add stdio. * lib/xvasprintf.h: Include . (xasprintf, xvasprintf): Use the standard printf format attribute. * modules/xprintf (Depends-on): List stdio first. * lib/xprintf.h (xprintf, xvprintf): Use a printf format attribute that depends on GNULIB_VPRINTF_POSIX. (xfprintf, xvfprintf): Use a printf format attribute that depends on GNULIB_VFPRINTF_POSIX. * modules/c-vasnprintf (Depends-on): Add stdio. * lib/c-vasnprintf.h: Include . (c_vasnprintf): Use the standard printf format attribute. * modules/c-vasprintf (Depends-on): Add stdio. * lib/c-vasprintf.h: Include . (c_asprintf, c_vasprintf): Use the standard printf format attribute. * modules/c-vsnprintf (Depends-on): Add stdio. * lib/c-vsnprintf.h: Include . (c_vsnprintf): Use the standard printf format attribute. * modules/c-snprintf (Depends-on): Add stdio. * lib/c-snprintf.h: Include . (c_snprintf): Use the standard printf format attribute. * modules/c-xvasprintf (Depends-on): Add stdio. * lib/c-xvasprintf.h: Include . (c_xasprintf, c_xvasprintf): Use the standard printf format attribute. * modules/error (Depends-on): Depend on stdio always. * lib/error.h: Include . (_GL_ATTRIBUTE_SPEC_PRINTF): Remove macro. (error, error_at_line): Use a printf format attribute that depends on GNULIB_VFPRINTF_POSIX. * lib/error.c (_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD): Renamed from _GL_ATTRIBUTE_FORMAT_PRINTF. * modules/verror (Depends-on): Add stdio. * lib/verror.h: Include . Don't include "error.h". (verror, verror_at_line): Use the standard printf format attribute. * lib/verror.c: Include "error.h". * modules/argp (Depends-on): Add stdio. * lib/argp.h (argp_error, __argp_error, argp_failure, __argp_failure): Use a printf format attribute that depends on GNULIB_VFPRINTF_POSIX. * modules/libtextstyle-optional (Depends-on): Add stdio. * lib/textstyle.in.h (ostream_printf, ostream_vprintf): Use the standard printf format attribute. * tests/test-nonblocking-misc.h (dbgfprintf): Use the standard printf format attribute. --- diff --git a/ChangeLog b/ChangeLog index a17f2b208b..7dbd31739d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,77 @@ +2020-11-23 Bruno Haible + + Use the correct printf format attribute for mingw. + Reported by Reuben Thomas in + . + + * modules/vfprintf-posix (configure.ac): Define GNULIB_VFPRINTF_POSIX. + * modules/vprintf-posix (configure.ac): Define GNULIB_VPRINTF_POSIX. + + * lib/stdio.in.h (_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, + _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM): New macros. + (_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD): Renamed from + _GL_ATTRIBUTE_FORMAT_PRINTF. Use _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. + (_GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM): Use + _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. + + * modules/vasnprintf (Depends-on): Add stdio. + * lib/vasnprintf.h: Include . + (asnprintf, vasnprintf): Use the standard printf format attribute. + + * modules/xvasprintf (Depends-on): Add stdio. + * lib/xvasprintf.h: Include . + (xasprintf, xvasprintf): Use the standard printf format attribute. + + * modules/xprintf (Depends-on): List stdio first. + * lib/xprintf.h (xprintf, xvprintf): Use a printf format attribute that + depends on GNULIB_VPRINTF_POSIX. + (xfprintf, xvfprintf): Use a printf format attribute that depends on + GNULIB_VFPRINTF_POSIX. + + * modules/c-vasnprintf (Depends-on): Add stdio. + * lib/c-vasnprintf.h: Include . + (c_vasnprintf): Use the standard printf format attribute. + + * modules/c-vasprintf (Depends-on): Add stdio. + * lib/c-vasprintf.h: Include . + (c_asprintf, c_vasprintf): Use the standard printf format attribute. + + * modules/c-vsnprintf (Depends-on): Add stdio. + * lib/c-vsnprintf.h: Include . + (c_vsnprintf): Use the standard printf format attribute. + + * modules/c-snprintf (Depends-on): Add stdio. + * lib/c-snprintf.h: Include . + (c_snprintf): Use the standard printf format attribute. + + * modules/c-xvasprintf (Depends-on): Add stdio. + * lib/c-xvasprintf.h: Include . + (c_xasprintf, c_xvasprintf): Use the standard printf format attribute. + + * modules/error (Depends-on): Depend on stdio always. + * lib/error.h: Include . + (_GL_ATTRIBUTE_SPEC_PRINTF): Remove macro. + (error, error_at_line): Use a printf format attribute that depends on + GNULIB_VFPRINTF_POSIX. + * lib/error.c (_GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD): Renamed from + _GL_ATTRIBUTE_FORMAT_PRINTF. + + * modules/verror (Depends-on): Add stdio. + * lib/verror.h: Include . Don't include "error.h". + (verror, verror_at_line): Use the standard printf format attribute. + * lib/verror.c: Include "error.h". + + * modules/argp (Depends-on): Add stdio. + * lib/argp.h (argp_error, __argp_error, argp_failure, __argp_failure): + Use a printf format attribute that depends on GNULIB_VFPRINTF_POSIX. + + * modules/libtextstyle-optional (Depends-on): Add stdio. + * lib/textstyle.in.h (ostream_printf, ostream_vprintf): Use the standard + printf format attribute. + + * tests/test-nonblocking-misc.h (dbgfprintf): Use the standard printf + format attribute. + 2020-11-23 Pádraig Brady selinux-at, selinux-h: use const correct declarations diff --git a/lib/argp.h b/lib/argp.h index c71dd963d8..77a6bd2310 100644 --- a/lib/argp.h +++ b/lib/argp.h @@ -521,10 +521,20 @@ extern void __argp_usage (const struct argp_state *__state); message, then exit (1). */ extern void argp_error (const struct argp_state *__restrict __state, const char *__restrict __fmt, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) +#endif + ; extern void __argp_error (const struct argp_state *__restrict __state, const char *__restrict __fmt, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) +#endif + ; /* Similar to the standard gnu error-reporting function error(), but will respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print @@ -537,11 +547,21 @@ extern void __argp_error (const struct argp_state *__restrict __state, extern void argp_failure (const struct argp_state *__restrict __state, int __status, int __errnum, const char *__restrict __fmt, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 4, 5)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 4, 5)) +#endif + ; extern void __argp_failure (const struct argp_state *__restrict __state, int __status, int __errnum, const char *__restrict __fmt, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 4, 5)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 4, 5)) +#endif + ; #if _LIBC /* Returns true if the option OPT is a valid short option. */ diff --git a/lib/c-snprintf.h b/lib/c-snprintf.h index e03ef8897f..43e5a05fc4 100644 --- a/lib/c-snprintf.h +++ b/lib/c-snprintf.h @@ -20,13 +20,16 @@ /* Get size_t. */ #include +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + #ifdef __cplusplus extern "C" { #endif extern int c_snprintf (char *restrict str, size_t size, const char *format, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); #ifdef __cplusplus } diff --git a/lib/c-vasnprintf.h b/lib/c-vasnprintf.h index b9853f6a4c..9411ba8125 100644 --- a/lib/c-vasnprintf.h +++ b/lib/c-vasnprintf.h @@ -23,6 +23,9 @@ /* Get size_t. */ #include +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -56,7 +59,7 @@ extern "C" { */ extern char *c_vasnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); #ifdef __cplusplus } diff --git a/lib/c-vasprintf.h b/lib/c-vasprintf.h index 588fbf01d9..c14b62e3ab 100644 --- a/lib/c-vasprintf.h +++ b/lib/c-vasprintf.h @@ -20,6 +20,9 @@ /* Get va_list. */ #include +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -28,9 +31,9 @@ extern "C" { is, the decimal point used in floating-point formatting directives is always '.'. */ int c_asprintf (char **resultp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)); int c_vasprintf (char **resultp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 0)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0)); #ifdef __cplusplus } diff --git a/lib/c-vsnprintf.h b/lib/c-vsnprintf.h index 6e39102b85..f6be1643bd 100644 --- a/lib/c-vsnprintf.h +++ b/lib/c-vsnprintf.h @@ -23,13 +23,16 @@ /* Get va_list. */ #include +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + #ifdef __cplusplus extern "C" { #endif extern int c_vsnprintf (char *restrict str, size_t size, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); #ifdef __cplusplus } diff --git a/lib/c-xvasprintf.h b/lib/c-xvasprintf.h index 1d3a551ffc..238bcf3c8b 100644 --- a/lib/c-xvasprintf.h +++ b/lib/c-xvasprintf.h @@ -20,6 +20,9 @@ /* Get va_list. */ #include +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -35,9 +38,9 @@ extern "C" { Formatting takes place in the C locale, that is, the decimal point used in floating-point formatting directives is always '.'. */ extern char *c_xasprintf (const char *format, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)); extern char *c_xvasprintf (const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 0)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)); #ifdef __cplusplus } diff --git a/lib/error.c b/lib/error.c index 3657b51cdf..2fc7901b30 100644 --- a/lib/error.c +++ b/lib/error.c @@ -40,7 +40,7 @@ # include # define mbsrtowcs __mbsrtowcs # define USE_UNLOCKED_IO 0 -# define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b) +# define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b) # define _GL_ARG_NONNULL(a) #else # include "getprogname.h" @@ -202,7 +202,7 @@ print_errno_message (int errnum) #endif } -static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3)) +static void _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC diff --git a/lib/error.h b/lib/error.h index a351606f81..6f6c90e402 100644 --- a/lib/error.h +++ b/lib/error.h @@ -19,15 +19,8 @@ #ifndef _ERROR_H #define _ERROR_H 1 -/* On mingw, the flavor of printf depends on whether the extensions module - * is in use; the check for determines the witness macro. */ -#ifndef _GL_ATTRIBUTE_SPEC_PRINTF -# if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU -# define _GL_ATTRIBUTE_SPEC_PRINTF __gnu_printf__ -# else -# define _GL_ATTRIBUTE_SPEC_PRINTF __printf__ -# endif -#endif +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */ +#include #ifdef __cplusplus extern "C" { @@ -38,11 +31,21 @@ extern "C" { If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ extern void error (int __status, int __errnum, const char *__format, ...) - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 3, 4)); +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 3, 4)) +#endif + ; extern void error_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, ...) - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 5, 6)); +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 5, 6)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 5, 6)) +#endif + ; /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this diff --git a/lib/stdio.in.h b/lib/stdio.in.h index 0db5111a04..341246af2b 100644 --- a/lib/stdio.in.h +++ b/lib/stdio.in.h @@ -70,30 +70,44 @@ # endif #endif -/* _GL_ATTRIBUTE_FORMAT_PRINTF - indicates to GCC that the function takes a format string and arguments, - where the format string directives are the ones standardized by ISO C99 - and POSIX. */ +/* An __attribute__ __format__ specifier for a function that takes a format + string and arguments, where the format string directives are the ones + standardized by ISO C99 and POSIX. + _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD */ +/* __gnu_printf__ is supported in GCC >= 4.4. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) -# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) +# define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __gnu_printf__ #else -# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) +# define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __printf__ #endif -/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, - except that it indicates to GCC that the supported format string directives - are the ones of the system printf(), rather than the ones standardized by - ISO C99 and POSIX. */ +/* An __attribute__ __format__ specifier for a function that takes a format + string and arguments, where the format string directives are the ones of the + system printf(), rather than the ones standardized by ISO C99 and POSIX. + _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM */ +/* On mingw, Gnulib sets __USE_MINGW_ANSI_STDIO in order to get closer to + the standards. The macro GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU indicates + whether this change is effective. On older mingw, it is not. */ #if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU -# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument) +# define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD #else -# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) +# define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM __printf__ #endif +/* _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, formatstring_parameter, first_argument)) + +/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD, + except that it indicates to GCC that the supported format string directives + are the ones of the system printf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, formatstring_parameter, first_argument)) + /* _GL_ATTRIBUTE_FORMAT_SCANF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 @@ -174,13 +188,13 @@ # define dprintf rpl_dprintf # endif _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *restrict format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *restrict format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...)); @@ -351,7 +365,7 @@ _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX complian # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, @@ -861,7 +875,7 @@ struct obstack; # endif _GL_FUNCDECL_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...)); @@ -869,7 +883,7 @@ _GL_CXXALIAS_RPL (obstack_printf, int, # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_printf, int, @@ -882,7 +896,7 @@ _GL_CXXALIASWARN (obstack_printf); # endif _GL_FUNCDECL_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); @@ -890,7 +904,7 @@ _GL_CXXALIAS_RPL (obstack_vprintf, int, # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_vprintf, int, @@ -974,7 +988,7 @@ _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) - _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, @@ -991,7 +1005,7 @@ _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); # endif _GL_FUNCDECL_RPL (printf, int, (const char *restrict format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *restrict format, ...)); # endif @@ -1182,7 +1196,7 @@ _GL_CXXALIASWARN (scanf); _GL_FUNCDECL_RPL (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *restrict str, size_t size, @@ -1192,7 +1206,7 @@ _GL_CXXALIAS_RPL (snprintf, int, _GL_FUNCDECL_SYS (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, @@ -1226,7 +1240,7 @@ _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " # endif _GL_FUNCDECL_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...)); @@ -1282,7 +1296,7 @@ _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " # endif _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (asprintf, int, (char **result, const char *format, ...)); @@ -1290,7 +1304,7 @@ _GL_CXXALIAS_RPL (asprintf, int, # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (asprintf, int, (char **result, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (asprintf, int, @@ -1303,7 +1317,7 @@ _GL_CXXALIASWARN (asprintf); # endif _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vasprintf, int, (char **result, const char *format, va_list args)); @@ -1311,7 +1325,7 @@ _GL_CXXALIAS_RPL (vasprintf, int, # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (vasprintf, int, (char **result, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (vasprintf, int, @@ -1327,7 +1341,7 @@ _GL_CXXALIASWARN (vasprintf); # endif _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args)); @@ -1335,7 +1349,7 @@ _GL_CXXALIAS_RPL (vdprintf, int, # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *restrict format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be @@ -1365,7 +1379,7 @@ _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " _GL_FUNCDECL_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, @@ -1432,7 +1446,7 @@ _GL_CXXALIASWARN (vfscanf); # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) @@ -1487,7 +1501,7 @@ _GL_CXXALIASWARN (vscanf); _GL_FUNCDECL_RPL (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *restrict str, size_t size, @@ -1497,7 +1511,7 @@ _GL_CXXALIAS_RPL (vsnprintf, int, _GL_FUNCDECL_SYS (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, @@ -1523,7 +1537,7 @@ _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " _GL_FUNCDECL_RPL (vsprintf, int, (char *restrict str, const char *restrict format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *restrict str, diff --git a/lib/textstyle.in.h b/lib/textstyle.in.h index b888378f00..ffcd332360 100644 --- a/lib/textstyle.in.h +++ b/lib/textstyle.in.h @@ -116,7 +116,7 @@ ostream_write_str (ostream_t stream, const char *string) static inline ptrdiff_t ostream_printf (ostream_t stream, const char *format, ...) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined __clang__ - __attribute__ ((__format__ (__printf__, 2, 3))) + __attribute__ ((__format__ (_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3))) #endif ; static inline ptrdiff_t @@ -141,7 +141,7 @@ ostream_printf (ostream_t stream, const char *format, ...) static inline ptrdiff_t ostream_vprintf (ostream_t stream, const char *format, va_list args) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined __clang__ - __attribute__ ((__format__ (__printf__, 2, 0))) + __attribute__ ((__format__ (_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0))) #endif ; static inline ptrdiff_t diff --git a/lib/vasnprintf.h b/lib/vasnprintf.h index 5be0553987..c6fee3c703 100644 --- a/lib/vasnprintf.h +++ b/lib/vasnprintf.h @@ -23,6 +23,9 @@ /* Get size_t. */ #include +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -57,10 +60,10 @@ extern "C" { #endif extern char * asnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); extern char * vasnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); #ifdef __cplusplus } diff --git a/lib/verror.c b/lib/verror.c index 6bd365e4f5..38d5880bee 100644 --- a/lib/verror.c +++ b/lib/verror.c @@ -18,13 +18,16 @@ #include +/* Specification. */ #include "verror.h" -#include "xvasprintf.h" #include #include #include +#include "error.h" +#include "xvasprintf.h" + #if ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) diff --git a/lib/verror.h b/lib/verror.h index 3343585e69..6c228664a3 100644 --- a/lib/verror.h +++ b/lib/verror.h @@ -19,7 +19,8 @@ #include -#include "error.h" /* for _GL_ATTRIBUTE_FORMAT */ +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include #ifdef __cplusplus extern "C" { @@ -33,7 +34,7 @@ extern "C" { extern void verror (int __status, int __errnum, const char *__format, va_list __args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); /* Print a message with 'vfprintf (stderr, FORMAT, ARGS)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). @@ -45,7 +46,7 @@ extern void verror (int __status, int __errnum, const char *__format, extern void verror_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, va_list __args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 5, 0)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 5, 0)); #ifdef __cplusplus } diff --git a/lib/xprintf.h b/lib/xprintf.h index d0615b4f90..8931638710 100644 --- a/lib/xprintf.h +++ b/lib/xprintf.h @@ -21,13 +21,36 @@ #include extern int xprintf (char const *restrict format, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)); +#if GNULIB_VPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 1, 2)) +#endif + ; + extern int xvprintf (char const *restrict format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 0)); +#if GNULIB_VPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 1, 0)) +#endif + ; + extern int xfprintf (FILE *restrict stream, char const *restrict format, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) +#endif + ; + extern int xvfprintf (FILE *restrict stream, char const *restrict format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 0)); +#if GNULIB_VFPRINTF_POSIX + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 0)) +#else + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 0)) +#endif + ; #endif diff --git a/lib/xvasprintf.h b/lib/xvasprintf.h index ff43d1bbc4..a43a901482 100644 --- a/lib/xvasprintf.h +++ b/lib/xvasprintf.h @@ -20,6 +20,9 @@ /* Get va_list. */ #include +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ +#include + #ifdef __cplusplus extern "C" { #endif @@ -32,9 +35,9 @@ extern "C" { - [EILSEQ] error during conversion between wide and multibyte characters, return NULL. */ extern char *xasprintf (const char *format, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 2)); extern char *xvasprintf (const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 0)); + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 1, 0)); #ifdef __cplusplus } diff --git a/modules/argp b/modules/argp index 50fde11904..38a790523c 100644 --- a/modules/argp +++ b/modules/argp @@ -37,6 +37,7 @@ extensions vsnprintf sleep stdalign +stdio strerror memchr memmove diff --git a/modules/c-snprintf b/modules/c-snprintf index 2449b01195..456691d868 100644 --- a/modules/c-snprintf +++ b/modules/c-snprintf @@ -6,6 +6,7 @@ lib/c-snprintf.h lib/c-snprintf.c Depends-on: +stdio c-vasnprintf configure.ac: diff --git a/modules/c-vasnprintf b/modules/c-vasnprintf index 5fe1fa7d6e..129f591d42 100644 --- a/modules/c-vasnprintf +++ b/modules/c-vasnprintf @@ -23,6 +23,7 @@ m4/exponentd.m4 Depends-on: attribute +stdio isnand-nolibm isnanl-nolibm frexpl-nolibm diff --git a/modules/c-vasprintf b/modules/c-vasprintf index 78e411993b..868dc16d10 100644 --- a/modules/c-vasprintf +++ b/modules/c-vasprintf @@ -7,6 +7,7 @@ lib/c-asprintf.c lib/c-vasprintf.c Depends-on: +stdio c-vasnprintf configure.ac: diff --git a/modules/c-vsnprintf b/modules/c-vsnprintf index b227e92a86..eb62fd9691 100644 --- a/modules/c-vsnprintf +++ b/modules/c-vsnprintf @@ -7,6 +7,7 @@ lib/c-vsnprintf.h lib/c-vsnprintf.c Depends-on: +stdio c-vasnprintf configure.ac: diff --git a/modules/c-xvasprintf b/modules/c-xvasprintf index 6650ddae8e..b952128fb6 100644 --- a/modules/c-xvasprintf +++ b/modules/c-xvasprintf @@ -7,6 +7,7 @@ lib/c-xasprintf.c lib/c-xvasprintf.c Depends-on: +stdio c-vasprintf xalloc-die diff --git a/modules/error b/modules/error index 15fb94093c..33116ecec4 100644 --- a/modules/error +++ b/modules/error @@ -12,8 +12,8 @@ lib/error.c m4/error.m4 Depends-on: +stdio getprogname -stdio [test $ac_cv_lib_error_at_line = no] strerror [test $ac_cv_lib_error_at_line = no] unistd [test $ac_cv_lib_error_at_line = no] msvc-nothrow [test $ac_cv_lib_error_at_line = no] diff --git a/modules/libtextstyle-optional b/modules/libtextstyle-optional index 1ee82707f1..c0935e1f56 100644 --- a/modules/libtextstyle-optional +++ b/modules/libtextstyle-optional @@ -8,6 +8,7 @@ m4/libtextstyle-optional.m4 Depends-on: libtextstyle stdbool +stdio unistd fsync vasprintf-posix diff --git a/modules/vasnprintf b/modules/vasnprintf index 893ce974b6..96cd300282 100644 --- a/modules/vasnprintf +++ b/modules/vasnprintf @@ -21,6 +21,7 @@ m4/math_h.m4 m4/exponentd.m4 Depends-on: +stdio alloca-opt attribute float diff --git a/modules/verror b/modules/verror index 6b837e9e3c..e183f68ea1 100644 --- a/modules/verror +++ b/modules/verror @@ -11,6 +11,7 @@ lib/verror.h lib/verror.c Depends-on: +stdio error xvasprintf diff --git a/modules/vfprintf-posix b/modules/vfprintf-posix index 0433b292e9..c23fdef317 100644 --- a/modules/vfprintf-posix +++ b/modules/vfprintf-posix @@ -33,6 +33,7 @@ errno [test $REPLACE_VFPRINTF = 1] configure.ac: gl_FUNC_VFPRINTF_POSIX gl_STDIO_MODULE_INDICATOR([vfprintf-posix]) +gl_MODULE_INDICATOR([vfprintf-posix]) Makefile.am: diff --git a/modules/vprintf-posix b/modules/vprintf-posix index 16e6cbe842..afa2de2355 100644 --- a/modules/vprintf-posix +++ b/modules/vprintf-posix @@ -20,6 +20,7 @@ vfprintf-posix [test $REPLACE_VPRINTF = 1] configure.ac: gl_FUNC_VPRINTF_POSIX gl_STDIO_MODULE_INDICATOR([vprintf-posix]) +gl_MODULE_INDICATOR([vprintf-posix]) Makefile.am: diff --git a/modules/xprintf b/modules/xprintf index 186e3b013e..de61260e87 100644 --- a/modules/xprintf +++ b/modules/xprintf @@ -12,11 +12,11 @@ lib/xprintf.h lib/xprintf.c Depends-on: +stdio error exitfail gettext-h stdarg -stdio configure.ac: m4_ifdef([AM_XGETTEXT_OPTION], diff --git a/modules/xvasprintf b/modules/xvasprintf index 59d9a6ec4b..373c1fabc1 100644 --- a/modules/xvasprintf +++ b/modules/xvasprintf @@ -13,6 +13,7 @@ lib/xalloc.h m4/xvasprintf.m4 Depends-on: +stdio vasprintf xalloc xalloc-die diff --git a/tests/test-nonblocking-misc.h b/tests/test-nonblocking-misc.h index 00af630e51..6101a7c6bb 100644 --- a/tests/test-nonblocking-misc.h +++ b/tests/test-nonblocking-misc.h @@ -41,7 +41,7 @@ init_data (size_t data_block_size) #if ENABLE_DEBUGGING # include static int dbgfprintf (FILE *fp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3); + _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3); static int dbgfprintf (FILE *fp, const char *format, ...) {