+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
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
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. */
/* 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
}
/* Get size_t. */
#include <stddef.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#ifdef __cplusplus
extern "C" {
#endif
*/
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
}
/* Get va_list. */
#include <stdarg.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#ifdef __cplusplus
extern "C" {
#endif
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
}
/* 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
}
/* Get va_list. */
#include <stdarg.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#ifdef __cplusplus
extern "C" {
#endif
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
}
# 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"
#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
#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" {
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
# 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
# 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, ...));
# 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,
# 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, ...));
# 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,
# 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));
# 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,
(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,
# 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
_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,
_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,
# 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, ...));
# 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, ...));
# 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,
# 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));
# 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,
# 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));
# 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
_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,
# 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)
_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,
_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,
_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,
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
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
/* Get size_t. */
#include <stddef.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#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
}
#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)
#include <stdarg.h>
-#include "error.h" /* for _GL_ATTRIBUTE_FORMAT */
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
#ifdef __cplusplus
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).
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
}
#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
/* Get va_list. */
#include <stdarg.h>
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */
+#include <stdio.h>
+
#ifdef __cplusplus
extern "C" {
#endif
- [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
}
vsnprintf
sleep
stdalign
+stdio
strerror
memchr
memmove
lib/c-snprintf.c
Depends-on:
+stdio
c-vasnprintf
configure.ac:
Depends-on:
attribute
+stdio
isnand-nolibm
isnanl-nolibm
frexpl-nolibm
lib/c-vasprintf.c
Depends-on:
+stdio
c-vasnprintf
configure.ac:
lib/c-vsnprintf.c
Depends-on:
+stdio
c-vasnprintf
configure.ac:
lib/c-xvasprintf.c
Depends-on:
+stdio
c-vasprintf
xalloc-die
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]
Depends-on:
libtextstyle
stdbool
+stdio
unistd
fsync
vasprintf-posix
m4/exponentd.m4
Depends-on:
+stdio
alloca-opt
attribute
float
lib/verror.c
Depends-on:
+stdio
error
xvasprintf
configure.ac:
gl_FUNC_VFPRINTF_POSIX
gl_STDIO_MODULE_INDICATOR([vfprintf-posix])
+gl_MODULE_INDICATOR([vfprintf-posix])
Makefile.am:
configure.ac:
gl_FUNC_VPRINTF_POSIX
gl_STDIO_MODULE_INDICATOR([vprintf-posix])
+gl_MODULE_INDICATOR([vprintf-posix])
Makefile.am:
lib/xprintf.c
Depends-on:
+stdio
error
exitfail
gettext-h
stdarg
-stdio
configure.ac:
m4_ifdef([AM_XGETTEXT_OPTION],
m4/xvasprintf.m4
Depends-on:
+stdio
vasprintf
xalloc
xalloc-die
#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, ...)
{