aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/generic
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/generic')
-rw-r--r--sysdeps/generic/printf_fphex.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/sysdeps/generic/printf_fphex.c b/sysdeps/generic/printf_fphex.c
index 00dd8eed1d..b30622080c 100644
--- a/sysdeps/generic/printf_fphex.c
+++ b/sysdeps/generic/printf_fphex.c
@@ -405,7 +405,11 @@ __printf_fphex (FILE *fp,
}
}
else
- numend = numstr;
+ {
+ if (precision == -1)
+ precision = 0;
+ numend = numstr;
+ }
/* Now we can compute the exponent string. */
expstr = _itoa_word (exponent, expbuf + sizeof expbuf, 10, 0);
@@ -420,7 +424,7 @@ __printf_fphex (FILE *fp,
/* A special case when the mantissa or the precision is zero and the `#'
is not given. In this case we must not print the decimal point. */
- if ((zero_mantissa || precision == 0) && !info->alt)
+ if (precision == 0 && !info->alt)
++width; /* This nihilates the +1 for the decimal-point
character in the following equation. */
@@ -435,13 +439,16 @@ __printf_fphex (FILE *fp,
outchar (' ');
outchar ('0');
- outchar (info->spec == 'A' ? 'X' : 'x');
+ if ('X' - 'A' == 'x' - 'a')
+ outchar (info->spec + ('x' - 'a'));
+ else
+ outchar (info->spec == 'A' ? 'X' : 'x');
outchar (leading);
- if ((!zero_mantissa && precision > 0) || info->alt)
+ if (precision > 0 || info->alt)
outchar (decimal);
- if (!zero_mantissa && precision > 0)
+ if (precision > 0)
{
PRINT (numstr, MIN (numend - numstr, precision));
if (precision > numend - numstr)
@@ -451,7 +458,10 @@ __printf_fphex (FILE *fp,
if (info->left && info->pad == '0' && width > 0)
PADN ('0', width);
- outchar (info->spec == 'A' ? 'P' : 'p');
+ if ('P' - 'A' == 'p' - 'a')
+ outchar (info->spec + ('p' - 'a'));
+ else
+ outchar (info->spec == 'A' ? 'P' : 'p');
outchar (expnegative ? '-' : '+');