This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix conditions on checking versions of dprintf (bug 13775)


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]