Fix conditions on checking versions of dprintf (bug 13775)

Joseph S. Myers joseph@codesourcery.com
Wed May 2 19:34:00 GMT 2012


Bug 13775 was an issue with inconsistency in the conditions applied to
declarations of dprintf and vdprintf in different headers.  This was
fixed for the stdio-ldbl.h declarations - but not for the checking
versions of the functions.  I propose this patch to move the checking
versions also from __USE_GNU to __USE_XOPEN2K8.  Tested x86_64.

2012-05-02  Joseph Myers  <joseph@codesourcery.com>

	[BZ #13775]
	* libio/bits/stdio-ldbl.h [__USE_XOPEN2K8] (__dprintf_chk):
	Redirect under this condition.
	[__USE_XOPEN2K8] (__vdprintf_chk): Likewise.
	[__USE_GNU] (__dprintf_chk): Not under this condition.
	[__USE_GNU] (__vdprintf_chk): Likewise.
	* libio/bits/stdio2.h [__USE_XOPEN2K8] (__dprintf_chk): Declare
	under this condition.
	[__USE_XOPEN2K8] (__vdprintf_chk): Likewise.
	[__USE_XOPEN2K8] (dprintf): Define under this condition.
	[__USE_XOPEN2K8] (vdprintf): Likewise.
	[__USE_GNU] (__dprintf_chk): Not under this condition.
	[__USE_GNU] (__vdprintf_chk): Likewise.
	[__USE_GNU] (dprintf): Likewise.
	[__USE_GNU] (vdprintf): Likewise.

diff --git a/libio/bits/stdio-ldbl.h b/libio/bits/stdio-ldbl.h
index 3cc6ec4..4ee043e 100644
--- a/libio/bits/stdio-ldbl.h
+++ b/libio/bits/stdio-ldbl.h
@@ -87,11 +87,13 @@ __LDBL_REDIR_DECL (__fprintf_chk)
 __LDBL_REDIR_DECL (__printf_chk)
 __LDBL_REDIR_DECL (__vfprintf_chk)
 __LDBL_REDIR_DECL (__vprintf_chk)
+#  ifdef __USE_XOPEN2K8
+__LDBL_REDIR_DECL (__dprintf_chk)
+__LDBL_REDIR_DECL (__vdprintf_chk)
+#  endif
 #  ifdef __USE_GNU
 __LDBL_REDIR_DECL (__asprintf_chk)
 __LDBL_REDIR_DECL (__vasprintf_chk)
-__LDBL_REDIR_DECL (__dprintf_chk)
-__LDBL_REDIR_DECL (__vdprintf_chk)
 __LDBL_REDIR_DECL (__obstack_printf_chk)
 __LDBL_REDIR_DECL (__obstack_vprintf_chk)
 #  endif
diff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h
index 2aca88d..7383604 100644
--- a/libio/bits/stdio2.h
+++ b/libio/bits/stdio2.h
@@ -127,6 +127,32 @@ vfprintf (FILE *__restrict __stream,
   return __vfprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
 }
 
+# ifdef __USE_XOPEN2K8
+extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
+			  ...) __attribute__ ((__format__ (__printf__, 3, 4)));
+extern int __vdprintf_chk (int __fd, int __flag,
+			   const char *__restrict __fmt, _G_va_list __arg)
+     __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#  ifdef __va_arg_pack
+__fortify_function int
+dprintf (int __fd, const char *__restrict __fmt, ...)
+{
+  return __dprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt,
+			__va_arg_pack ());
+}
+#  elif !defined __cplusplus
+#   define dprintf(fd, ...) \
+  __dprintf_chk (fd, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#  endif
+
+__fortify_function int
+vdprintf (int __fd, const char *__restrict __fmt, _G_va_list __ap)
+{
+  return __vdprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
+# endif
+
 # ifdef __USE_GNU
 
 extern int __asprintf_chk (char **__restrict __ptr, int __flag,
@@ -135,11 +161,6 @@ extern int __asprintf_chk (char **__restrict __ptr, int __flag,
 extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
 			    const char *__restrict __fmt, _G_va_list __arg)
      __THROW __attribute__ ((__format__ (__printf__, 3, 0))) __wur;
-extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
-			  ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-extern int __vdprintf_chk (int __fd, int __flag,
-			   const char *__restrict __fmt, _G_va_list __arg)
-     __attribute__ ((__format__ (__printf__, 3, 0)));
 extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
 				 int __flag, const char *__restrict __format,
 				 ...)
@@ -167,13 +188,6 @@ __NTH (__asprintf (char **__restrict __ptr, const char *__restrict __fmt,
 }
 
 __fortify_function int
-dprintf (int __fd, const char *__restrict __fmt, ...)
-{
-  return __dprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt,
-			__va_arg_pack ());
-}
-
-__fortify_function int
 __NTH (obstack_printf (struct obstack *__restrict __obstack,
 		       const char *__restrict __fmt, ...))
 {
@@ -185,8 +199,6 @@ __NTH (obstack_printf (struct obstack *__restrict __obstack,
   __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
 #   define __asprintf(ptr, ...) \
   __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
-#   define dprintf(fd, ...) \
-  __dprintf_chk (fd, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
 #   define obstack_printf(obstack, ...) \
   __obstack_printf_chk (obstack, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
 #  endif
@@ -199,12 +211,6 @@ __NTH (vasprintf (char **__restrict __ptr, const char *__restrict __fmt,
 }
 
 __fortify_function int
-vdprintf (int __fd, const char *__restrict __fmt, _G_va_list __ap)
-{
-  return __vdprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
-}
-
-__fortify_function int
 __NTH (obstack_vprintf (struct obstack *__restrict __obstack,
 			const char *__restrict __fmt, _G_va_list __ap))
 {
-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Libc-alpha mailing list