aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2008-07-21 04:44:10 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2008-07-21 04:44:10 +0000
commit302b150e73ef172cbdd9b6735c580746f694618c (patch)
treea258b1d92af9602654e72eacbb1a483b32e2750f /libgfortran
parent8ca7338928eb2a6b871c772b13ffe6911a34deeb (diff)
downloadgcc-302b150e73ef172cbdd9b6735c580746f694618c.zip
gcc-302b150e73ef172cbdd9b6735c580746f694618c.tar.gz
gcc-302b150e73ef172cbdd9b6735c580746f694618c.tar.bz2
re PR libfortran/36857 (Non-English locale breaks gfortran float formatting ("printf is broken"))
2008-07-20 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/36857 * io/write_float.def: Comment out locale dependent code and fix general comments. From-SVN: r138021
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/io/write_float.def53
2 files changed, 34 insertions, 25 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index c845606..48a20e9 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2008-07-20 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/36857
+ * io/write_float.def: Comment out locale dependent code and fix general
+ comments.
+
2008-07-07 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/36341
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def
index 090bd71..ed4c45f 100644
--- a/libgfortran/io/write_float.def
+++ b/libgfortran/io/write_float.def
@@ -99,32 +99,13 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
if (d < 0)
internal_error (&dtp->common, "Unspecified precision");
- /* Use sprintf to print the number in the format +D.DDDDe+ddd
- For an N digit exponent, this gives us (MIN_FIELD_WIDTH-5)-N digits
- after the decimal point, plus another one before the decimal point. */
-
sign = calculate_sign (dtp, sign_bit);
-
- /* # The result will always contain a decimal point, even if no
- * digits follow it
- *
- * - The converted value is to be left adjusted on the field boundary
- *
- * + A sign (+ or -) always be placed before a number
- *
- * MIN_FIELD_WIDTH minimum field width
- *
- * * (ndigits-1) is used as the precision
- *
- * e format: [-]d.ddde±dd where there is one digit before the
- * decimal-point character and the number of digits after it is
- * equal to the precision. The exponent always contains at least two
- * digits; if the value is zero, the exponent is 00.
- */
-
- /* Check the given string has punctuation in the correct places. */
- if (d != 0 && (buffer[2] != '.' || buffer[ndigits + 2] != 'e'))
- internal_error (&dtp->common, "printf is broken");
+
+ /* The following code checks the given string has punctuation in the correct
+ places. Uncomment if needed for debugging.
+ if (d != 0 && ((buffer[2] != '.' && buffer[2] != ',')
+ || buffer[ndigits + 2] != 'e'))
+ internal_error (&dtp->common, "printf is broken"); */
/* Read the exponent back in. */
e = atoi (&buffer[ndigits + 3]) + 1;
@@ -702,8 +683,30 @@ OUTPUT_FLOAT_FMT_G(16)
#undef OUTPUT_FLOAT_FMT_G
+
/* Define a macro to build code for write_float. */
+ /* Note: Before output_float is called, sprintf is used to print to buffer the
+ number in the format +D.DDDDe+ddd. For an N digit exponent, this gives us
+ (MIN_FIELD_WIDTH-5)-N digits after the decimal point, plus another one
+ before the decimal point.
+
+ # The result will always contain a decimal point, even if no
+ digits follow it
+
+ - The converted value is to be left adjusted on the field boundary
+
+ + A sign (+ or -) always be placed before a number
+
+ MIN_FIELD_WIDTH minimum field width
+
+ * (ndigits-1) is used as the precision
+
+ e format: [-]d.ddde±dd where there is one digit before the
+ decimal-point character and the number of digits after it is
+ equal to the precision. The exponent always contains at least two
+ digits; if the value is zero, the exponent is 00. */
+
#ifdef HAVE_SNPRINTF
#define DTOA \