This is the mail archive of the glibc-cvs@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]

GNU C Library master sources branch, master, updated. glibc-2.12-237-g07eb4b7


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  07eb4b716ea5041bceb47b38ac8ab989a10b3afd (commit)
      from  14b697f75a5f039a0e3155c62399ee217c0f17dc (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=07eb4b716ea5041bceb47b38ac8ab989a10b3afd

commit 07eb4b716ea5041bceb47b38ac8ab989a10b3afd
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Fri Dec 24 19:28:32 2010 -0500

    Always allow overwriting printf modifiers etc.

diff --git a/ChangeLog b/ChangeLog
index 9f83056..958c76a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-12-24  Ulrich Drepper  <drepper@gmail.com>
+
+	* stdio-common/vfprintf.c (vfprintf): If printf handlers are installed
+	always use the slow path.
+
 2010-12-15  Ryan S. Arnold  <rsa@us.ibm.com>
 
 	* elf/Makefile: (check-execstack): Replace $(native-compile) with a
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
index 6e0e85c..fc370e8 100644
--- a/stdio-common/vfprintf.c
+++ b/stdio-common/vfprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2008, 2009   Free Software Foundation, Inc.
+/* Copyright (C) 1991-2008, 2009, 2010   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -329,7 +329,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
       REF (form_floathex),	/* for 'A', 'a' */			      \
       REF (mod_ptrdiff_t),      /* for 't' */				      \
       REF (mod_intmax_t),       /* for 'j' */				      \
-      REF (flag_i18n),	        /* for 'I' */				      \
+      REF (flag_i18n),		/* for 'I' */				      \
     };									      \
     /* Step 1: after processing width.  */				      \
     static JUMP_TABLE_TYPE step1_jumps[30] =				      \
@@ -540,7 +540,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 	      if (is_long_num)						      \
 		signed_number = va_arg (ap, long int);			      \
 	      else if (is_char)						      \
-	        signed_number = (signed char) va_arg (ap, unsigned int);      \
+		signed_number = (signed char) va_arg (ap, unsigned int);      \
 	      else if (!is_short)					      \
 		signed_number = va_arg (ap, int);			      \
 	      else							      \
@@ -636,7 +636,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 	      if (is_long_num)						      \
 		number.word = va_arg (ap, unsigned long int);		      \
 	      else if (is_char)						      \
-	        number.word = (unsigned char) va_arg (ap, unsigned int);      \
+		number.word = (unsigned char) va_arg (ap, unsigned int);      \
 	      else if (!is_short)					      \
 		number.word = va_arg (ap, unsigned int);		      \
 	      else							      \
@@ -830,7 +830,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 									      \
     LABEL (form_floathex):						      \
       {									      \
-        /* Floating point number printed as hexadecimal number.  */	      \
+	/* Floating point number printed as hexadecimal number.  */	      \
 	const void *ptr;						      \
 	int function_done;						      \
 									      \
@@ -987,7 +987,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 	--width;							      \
 	if (!left)							      \
 	  PAD (L' ');							      \
-        if (fspec == NULL)						      \
+	if (fspec == NULL)						      \
 	  outchar (va_arg (ap, wchar_t));				      \
 	else								      \
 	  outchar (args_value[fspec->data_arg].pa_wchar);		      \
@@ -1241,7 +1241,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
 									      \
 	    if (len == (size_t) -1)					      \
 	      {								      \
-	        /* Illegal wide-character string.  */			      \
+		/* Illegal wide-character string.  */			      \
 		done = -1;						      \
 		goto all_done;						      \
 	      }								      \
@@ -1318,6 +1318,12 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
   if (*f == L_('\0'))
     goto all_done;
 
+  /* Use the slow path in case any printf handler is registered.  */
+  if (__builtin_expect (__printf_function_table != NULL
+			|| __printf_modifier_table != NULL
+			|| __printf_va_arg_table != NULL, 0))
+    goto do_positional;
+
   /* Process whole format string.  */
   do
     {

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog               |    5 +++++
 stdio-common/vfprintf.c |   20 +++++++++++++-------
 2 files changed, 18 insertions(+), 7 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


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