summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog74
-rw-r--r--lib/argp.h28
-rw-r--r--lib/c-snprintf.h5
-rw-r--r--lib/c-vasnprintf.h5
-rw-r--r--lib/c-vasprintf.h7
-rw-r--r--lib/c-vsnprintf.h5
-rw-r--r--lib/c-xvasprintf.h7
-rw-r--r--lib/error.c4
-rw-r--r--lib/error.h25
-rw-r--r--lib/stdio.in.h92
-rw-r--r--lib/textstyle.in.h4
-rw-r--r--lib/vasnprintf.h7
-rw-r--r--lib/verror.c5
-rw-r--r--lib/verror.h7
-rw-r--r--lib/xprintf.h31
-rw-r--r--lib/xvasprintf.h7
-rw-r--r--modules/argp1
-rw-r--r--modules/c-snprintf1
-rw-r--r--modules/c-vasnprintf1
-rw-r--r--modules/c-vasprintf1
-rw-r--r--modules/c-vsnprintf1
-rw-r--r--modules/c-xvasprintf1
-rw-r--r--modules/error2
-rw-r--r--modules/libtextstyle-optional1
-rw-r--r--modules/vasnprintf1
-rw-r--r--modules/verror1
-rw-r--r--modules/vfprintf-posix1
-rw-r--r--modules/vprintf-posix1
-rw-r--r--modules/xprintf2
-rw-r--r--modules/xvasprintf1
-rw-r--r--tests/test-nonblocking-misc.h2
31 files changed, 251 insertions, 80 deletions
diff --git a/ChangeLog b/ChangeLog
index a17f2b208b..7dbd31739d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,77 @@
+2020-11-23 Bruno Haible <bruno@clisp.org>
+
+ Use the correct printf format attribute for mingw.
+ Reported by Reuben Thomas <rrt@sc3d.org> in
+ <https://lists.gnu.org/archive/html/bug-gnulib/2020-11/msg00133.html>.
+
+ * 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 <stdio.h>.
+ (asnprintf, vasnprintf): Use the standard printf format attribute.
+
+ * modules/xvasprintf (Depends-on): Add stdio.
+ * lib/xvasprintf.h: Include <stdio.h>.
+ (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 <stdio.h>.
+ (c_vasnprintf): Use the standard printf format attribute.
+
+ * modules/c-vasprintf (Depends-on): Add stdio.
+ * lib/c-vasprintf.h: Include <stdio.h>.
+ (c_asprintf, c_vasprintf): Use the standard printf format attribute.
+
+ * modules/c-vsnprintf (Depends-on): Add stdio.
+ * lib/c-vsnprintf.h: Include <stdio.h>.
+ (c_vsnprintf): Use the standard printf format attribute.
+
+ * modules/c-snprintf (Depends-on): Add stdio.
+ * lib/c-snprintf.h: Include <stdio.h>.
+ (c_snprintf): Use the standard printf format attribute.
+
+ * modules/c-xvasprintf (Depends-on): Add stdio.
+ * lib/c-xvasprintf.h: Include <stdio.h>.
+ (c_xasprintf, c_xvasprintf): Use the standard printf format attribute.
+
+ * modules/error (Depends-on): Depend on stdio always.
+ * lib/error.h: Include <stdio.h>.
+ (_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 <stdio.h>. 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 <P@draigBrady.com>
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 <stddef.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#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 <stddef.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#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 <stdarg.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#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 <stdarg.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#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 <stdarg.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#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 <wchar.h>
# 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 <stdio.h> 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 <stdio.h>
#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 <stddef.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#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 <config.h>
+/* Specification. */
#include "verror.h"
-#include "xvasprintf.h"
#include <errno.h>
#include <stdarg.h>
#include <stdlib.h>
+#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 <stdarg.h>
-#include "error.h" /* for _GL_ATTRIBUTE_FORMAT */
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
#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 <stdio.h>
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 <stdarg.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#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 <stdarg.h>
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, ...)
{