This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.12-237-g07eb4b7
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 25 Dec 2010 00:30:38 -0000
- Subject: 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