aboutsummaryrefslogtreecommitdiff
path: root/stdio-common/printf_fp.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2007-02-20 01:11:40 +0000
committerUlrich Drepper <drepper@redhat.com>2007-02-20 01:11:40 +0000
commit4c02bf1adf285060e809ef5df8f796c8cf3fb04d (patch)
tree2fef9fb77d415728263520fa98dd45c298f4c830 /stdio-common/printf_fp.c
parent3979024a8ce56e0a1ab08088525649d219fc4196 (diff)
downloadglibc-4c02bf1adf285060e809ef5df8f796c8cf3fb04d.zip
glibc-4c02bf1adf285060e809ef5df8f796c8cf3fb04d.tar.gz
glibc-4c02bf1adf285060e809ef5df8f796c8cf3fb04d.tar.bz2
* stdio-common/printf_fp.c (___printf_fp): Cleanups and minor
optimization.
Diffstat (limited to 'stdio-common/printf_fp.c')
-rw-r--r--stdio-common/printf_fp.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c
index e4e32f9..cbc3143 100644
--- a/stdio-common/printf_fp.c
+++ b/stdio-common/printf_fp.c
@@ -1,6 +1,6 @@
/* Floating point output for `printf'.
- Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006
- Free Software Foundation, Inc.
+ Copyright (C) 1995-2003, 2006, 2007 Free Software Foundation, Inc.
+
This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
@@ -811,12 +811,14 @@ ___printf_fp (FILE *fp,
int chars_needed;
int expscale;
int intdig_max, intdig_no = 0;
- int fracdig_min, fracdig_max, fracdig_no = 0;
+ int fracdig_min;
+ int fracdig_max;
int dig_max;
int significant;
int ngroups = 0;
+ char spec = _tolower (info->spec);
- if (_tolower (info->spec) == 'e')
+ if (spec == 'e')
{
type = info->spec;
intdig_max = 1;
@@ -826,7 +828,7 @@ ___printf_fp (FILE *fp,
dig_max = INT_MAX; /* Unlimited. */
significant = 1; /* Does not matter here. */
}
- else if (_tolower (info->spec) == 'f')
+ else if (spec == 'f')
{
type = 'f';
fracdig_min = fracdig_max = info->prec < 0 ? 6 : info->prec;
@@ -887,7 +889,7 @@ ___printf_fp (FILE *fp,
other output. If the amount of memory we have to allocate is too
large use `malloc' instead of `alloca'. */
buffer_malloced = ! __libc_use_alloca (chars_needed * 2 * sizeof (wchar_t));
- if (buffer_malloced)
+ if (__builtin_expect (buffer_malloced, 0))
{
wbuffer = (wchar_t *) malloc ((2 + chars_needed) * sizeof (wchar_t));
if (wbuffer == NULL)
@@ -923,6 +925,7 @@ ___printf_fp (FILE *fp,
}
/* Generate the needed number of fractional digits. */
+ int fracdig_no = 0;
while (fracdig_no < fracdig_min
|| (fracdig_no < fracdig_max && (fracsize > 1 || frac[0] != 0)))
{
@@ -972,7 +975,7 @@ ___printf_fp (FILE *fp,
/* Process fractional digits. Terminate if not rounded or
radix character is reached. */
while (*--wtp != decimalwc && *wtp == L'9')
- *wtp = '0';
+ *wtp = L'0';
if (*wtp != decimalwc)
/* Round up. */
(*wtp)++;