re PR fortran/32554 ([4.2 Only] Bug in P formatting)
2007-07-01 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/32554 * io/write.c (output_float): Set edigits to a fixed size, avoiding variation in field width calculation and eliminate buffer overrun. From-SVN: r126173
This commit is contained in:
parent
36bd43039b
commit
c767280aa7
|
@ -1,3 +1,9 @@
|
|||
2007-07-01 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR libgfortran/32554
|
||||
* io/write.c (output_float): Set edigits to a fixed size, avoiding
|
||||
variation in field width calculation and eliminate buffer overrun.
|
||||
|
||||
2007-07-01 Janne Blomqvist <jb@gcc.gnu.org>
|
||||
|
||||
* runtime/memory.c (internal_realloc): Use index_type for size
|
||||
|
|
|
@ -466,7 +466,6 @@ output_float (st_parameter_dt *dtp, const fnode *f, GFC_REAL_LARGEST value)
|
|||
int nblanks;
|
||||
int i;
|
||||
sign_t sign;
|
||||
double abslog;
|
||||
|
||||
ft = f->format;
|
||||
w = f->u.real.w;
|
||||
|
@ -495,21 +494,9 @@ output_float (st_parameter_dt *dtp, const fnode *f, GFC_REAL_LARGEST value)
|
|||
value = value + 0.5;
|
||||
}
|
||||
|
||||
/* Printf always prints at least two exponent digits. */
|
||||
if (value == 0)
|
||||
edigits = 2;
|
||||
else
|
||||
{
|
||||
#if defined(HAVE_GFC_REAL_10) || defined(HAVE_GFC_REAL_16)
|
||||
abslog = fabs((double) log10l(value));
|
||||
#else
|
||||
abslog = fabs(log10(value));
|
||||
#endif
|
||||
if (abslog < 100)
|
||||
edigits = 2;
|
||||
else
|
||||
edigits = 1 + (int) log10(abslog);
|
||||
}
|
||||
/* printf pads blanks for us on the exponent so we just need it big enough
|
||||
to handle the largest number of exponent digits expected. */
|
||||
edigits=4;
|
||||
|
||||
if (ft == FMT_F || ft == FMT_EN
|
||||
|| ((ft == FMT_D || ft == FMT_E) && dtp->u.p.scale_factor != 0))
|
||||
|
|
Loading…
Reference in New Issue