Commit 264a5255 by Jerry DeLisle

re PR libfortran/38097 (I/O with blanks in exponent fails; blank="NULL", BN edit descriptor)

2008-11-16  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libfortran/38097
	* io/read.c (read_f): Initialize exponent. Fix comment. Set loop
	conditions for BZ/BN.
	* io/unit.c (get_internal_unit): Initialize flags.blank.
	* io/transfer.c (data_transfer_init): Fix whitespace.

From-SVN: r141919
parent 459348d4
2008-11-16 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/38097
* io/read.c (read_f): Initialize exponent. Fix comment. Set loop
conditions for BZ/BN.
* io/unit.c (get_internal_unit): Initialize flags.blank.
* io/transfer.c (data_transfer_init): Fix whitespace.
2008-11-15 Jerry DeLisle <jvdelisle@gcc.gnu.org> 2008-11-15 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/37294 PR libfortran/37294
......
...@@ -956,14 +956,9 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length) ...@@ -956,14 +956,9 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
of the exponent in order to take account of the scale factor and of the exponent in order to take account of the scale factor and
the d parameter before explict conversion takes place. */ the d parameter before explict conversion takes place. */
exp2: exp2:
if (!isdigit (*p)) /* Normal processing of exponent */
goto bad_float; exponent = 0;
if (dtp->u.p.blank_status == BLANK_UNSPECIFIED)
exponent = *p - '0';
p++;
w--;
if (dtp->u.p.blank_status == BLANK_UNSPECIFIED) /* Normal processing of exponent */
{ {
while (w > 0 && isdigit (*p)) while (w > 0 && isdigit (*p))
{ {
...@@ -984,7 +979,7 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length) ...@@ -984,7 +979,7 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
} }
else /* BZ or BN status is enabled */ else /* BZ or BN status is enabled */
{ {
while (w > 0) while (w > 0 && (isdigit (*p) || *p == ' '))
{ {
if (*p == ' ') if (*p == ' ')
{ {
......
...@@ -2102,7 +2102,7 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag) ...@@ -2102,7 +2102,7 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag)
if (dtp->u.p.blank_status == BLANK_UNSPECIFIED) if (dtp->u.p.blank_status == BLANK_UNSPECIFIED)
dtp->u.p.blank_status = dtp->u.p.current_unit->flags.blank; dtp->u.p.blank_status = dtp->u.p.current_unit->flags.blank;
/* Check the delim mode. */ /* Check the delim mode. */
dtp->u.p.current_unit->delim_status dtp->u.p.current_unit->delim_status
= !(cf & IOPARM_DT_HAS_DELIM) ? DELIM_UNSPECIFIED : = !(cf & IOPARM_DT_HAS_DELIM) ? DELIM_UNSPECIFIED :
......
...@@ -437,6 +437,7 @@ get_internal_unit (st_parameter_dt *dtp) ...@@ -437,6 +437,7 @@ get_internal_unit (st_parameter_dt *dtp)
iunit->flags.access = ACCESS_SEQUENTIAL; iunit->flags.access = ACCESS_SEQUENTIAL;
iunit->flags.action = ACTION_READWRITE; iunit->flags.action = ACTION_READWRITE;
iunit->flags.blank = BLANK_UNSPECIFIED;
iunit->flags.form = FORM_FORMATTED; iunit->flags.form = FORM_FORMATTED;
iunit->flags.pad = PAD_YES; iunit->flags.pad = PAD_YES;
iunit->flags.status = STATUS_UNSPECIFIED; iunit->flags.status = STATUS_UNSPECIFIED;
...@@ -448,7 +449,6 @@ get_internal_unit (st_parameter_dt *dtp) ...@@ -448,7 +449,6 @@ get_internal_unit (st_parameter_dt *dtp)
/* Initialize the data transfer parameters. */ /* Initialize the data transfer parameters. */
dtp->u.p.advance_status = ADVANCE_YES; dtp->u.p.advance_status = ADVANCE_YES;
dtp->u.p.blank_status = BLANK_UNSPECIFIED;
dtp->u.p.seen_dollar = 0; dtp->u.p.seen_dollar = 0;
dtp->u.p.skips = 0; dtp->u.p.skips = 0;
dtp->u.p.pending_spaces = 0; dtp->u.p.pending_spaces = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment