aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io/read.c
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2008-09-26 06:19:42 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2008-09-26 06:19:42 +0000
commit105b7136967d687fbb900a2d25e4fe6a876db57d (patch)
tree43e49465ce4691d29bcfe44a26c6ad96f9dac836 /libgfortran/io/read.c
parent5e1bdeb75f6f1f724a5e046c4ac39254dbf8ab0f (diff)
downloadgcc-105b7136967d687fbb900a2d25e4fe6a876db57d.zip
gcc-105b7136967d687fbb900a2d25e4fe6a876db57d.tar.gz
gcc-105b7136967d687fbb900a2d25e4fe6a876db57d.tar.bz2
re PR fortran/37498 (Incorrect array value returned - 4.3 ABI Broken)
2008-09-25 Jerry DeLisle <jvdelisle@gcc.gnu.org PR libfortran/37498 * list_read.c (eat_separator): Revert previous patch and move delim_status, decimal_status, and pad_status to gfc_unit. (parse_real): Ditto. (read_real): Ditto. * read.c (read_a): Likewise. (read_a_char4): Likewise. (read_f): Likewise. * inquire.c (inquire_via_unit): Add missing check for IOPARM_INQUIRE_HAS_FLAGS2. (inquire_via_filename): Likewise. * io.h (unit_sign_s): Move delim_status, decimal_status, and pad_status to gfc_unit. * transfer.c (read_sf): Ditto. (read_block_form): Ditto. (formatted_transfer_scalar): Ditto. (data_transfer_init): Ditto. * write.c (write_default_char4): Ditto. (write_utf8_char4): Ditto. (write_character): Ditto. (write_real_g0): Ditto. (list_formatted_write_scalar): Ditto. (nml_write_obj): Ditto. (namelist_write): Ditto. * write_float.def (calculate_sign): Ditto. (output_float): Ditto. From-SVN: r140684
Diffstat (limited to 'libgfortran/io/read.c')
-rw-r--r--libgfortran/io/read.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c
index e35a7b1..5fb1e3c 100644
--- a/libgfortran/io/read.c
+++ b/libgfortran/io/read.c
@@ -440,9 +440,8 @@ read_a (st_parameter_dt *dtp, const fnode *f, char *p, int length)
else
read_default_char1 (dtp, p, length, w);
- dtp->u.p.sf_read_comma = 1;
- if (dtp->common.flags & IOPARM_DT_HAS_F2003)
- dtp->u.p.sf_read_comma = dtp->u.p.decimal_status == DECIMAL_COMMA ? 0 : 1;
+ dtp->u.p.sf_read_comma =
+ dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA ? 0 : 1;
}
@@ -468,9 +467,8 @@ read_a_char4 (st_parameter_dt *dtp, const fnode *f, char *p, int length)
else
read_default_char4 (dtp, p, length, w);
- dtp->u.p.sf_read_comma = 1;
- if (dtp->common.flags & IOPARM_DT_HAS_F2003)
- dtp->u.p.sf_read_comma = dtp->u.p.decimal_status == DECIMAL_COMMA ? 0 : 1;
+ dtp->u.p.sf_read_comma =
+ dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA ? 0 : 1;
}
/* eat_leading_spaces()-- Given a character pointer and a width,
@@ -842,9 +840,9 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
switch (*p)
{
case ',':
- if ((dtp->common.flags & IOPARM_DT_HAS_F2003)
- && (dtp->u.p.decimal_status == DECIMAL_COMMA && *p == ','))
- *p = '.';
+ if (dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA
+ && *p == ',')
+ *p = '.';
else
goto bad_float;
/* Fall through */
@@ -1079,17 +1077,9 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
void
read_x (st_parameter_dt * dtp, int n)
{
- if (dtp->common.flags & IOPARM_DT_HAS_F2003)
- {
- if ((dtp->u.p.pad_status == PAD_NO || is_internal_unit (dtp))
- && dtp->u.p.current_unit->bytes_left < n)
- n = dtp->u.p.current_unit->bytes_left;
- }
- else
- {
- if (is_internal_unit (dtp) && dtp->u.p.current_unit->bytes_left < n)
- n = dtp->u.p.current_unit->bytes_left;
- }
+ if ((dtp->u.p.current_unit->pad_status == PAD_NO || is_internal_unit (dtp))
+ && dtp->u.p.current_unit->bytes_left < n)
+ n = dtp->u.p.current_unit->bytes_left;
dtp->u.p.sf_read_comma = 0;
if (n > 0)