summaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-24 18:54:50 +0000
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-24 18:54:50 +0000
commitc704db51e487a466c5974e4c6d29125ee8f9432c (patch)
tree1be284e226d0a6941565b8506e8d35683325b5ca /libgfortran
parent899aa0f5b99527056ddfbfb9d6b6898ddd211e44 (diff)
downloadgcc-c704db51e487a466c5974e4c6d29125ee8f9432c.tar.gz
2007-06-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/32446 * io/write.c (output_float): Calculate ndigits correctly for large numbered formats that must pad zeros before the decimal point. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125985 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/io/write.c19
2 files changed, 18 insertions, 7 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 8df6b35529b..fc31e65a6ec 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2007-06-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libgfortran/32446
+ * io/write.c (output_float): Calculate ndigits correctly for large
+ numbered formats that must pad zeros before the decimal point.
+
2007-06-15 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
PR libfortran/32345
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index e0c507f4750..f156d19862b 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -810,16 +810,21 @@ output_float (st_parameter_dt *dtp, const fnode *f, GFC_REAL_LARGEST value)
if (nbefore > 0)
{
if (nbefore > ndigits)
- i = ndigits;
+ {
+ i = ndigits;
+ memcpy (out, digits, i);
+ ndigits = 0;
+ while (i < nbefore)
+ out[i++] = '0';
+ }
else
- i = nbefore;
-
- memcpy (out, digits, i);
- while (i < nbefore)
- out[i++] = '0';
+ {
+ i = nbefore;
+ memcpy (out, digits, i);
+ ndigits -= i;
+ }
digits += i;
- ndigits -= i;
out += nbefore;
}
/* Output the decimal point. */