OSDN Git Service

2008-11-16 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Nov 2008 16:12:16 +0000 (16:12 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Nov 2008 16:12:16 +0000 (16:12 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141919 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/read.c
libgfortran/io/transfer.c
libgfortran/io/unit.c

index 42aca0c..1fd0263 100644 (file)
@@ -1,3 +1,11 @@
+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>
 
        PR libfortran/37294
index 5fb1e3c..fb39877 100644 (file)
@@ -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
      the d parameter before explict conversion takes place. */
  exp2:
-  if (!isdigit (*p))
-    goto bad_float;
-
-  exponent = *p - '0';
-  p++;
-  w--;
-
-  if (dtp->u.p.blank_status == BLANK_UNSPECIFIED) /* Normal processing of exponent */
+  /* Normal processing of exponent */
+  exponent = 0;
+  if (dtp->u.p.blank_status == BLANK_UNSPECIFIED)
     {
       while (w > 0 && isdigit (*p))
         {
@@ -984,7 +979,7 @@ read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
     }    
   else  /* BZ or BN status is enabled */
     {
-      while (w > 0)
+      while (w > 0 && (isdigit (*p) || *p == ' '))
         {
           if (*p == ' ')
             {
index 8d4f785..500cce9 100644 (file)
@@ -2102,7 +2102,7 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag)
   
   if (dtp->u.p.blank_status == BLANK_UNSPECIFIED)
        dtp->u.p.blank_status = dtp->u.p.current_unit->flags.blank;
-  
+
   /* Check the delim mode.  */
   dtp->u.p.current_unit->delim_status
        = !(cf & IOPARM_DT_HAS_DELIM) ? DELIM_UNSPECIFIED :
index 6956318..a5d660c 100644 (file)
@@ -437,6 +437,7 @@ get_internal_unit (st_parameter_dt *dtp)
 
   iunit->flags.access = ACCESS_SEQUENTIAL;
   iunit->flags.action = ACTION_READWRITE;
+  iunit->flags.blank = BLANK_UNSPECIFIED;
   iunit->flags.form = FORM_FORMATTED;
   iunit->flags.pad = PAD_YES;
   iunit->flags.status = STATUS_UNSPECIFIED;
@@ -448,7 +449,6 @@ get_internal_unit (st_parameter_dt *dtp)
   /* Initialize the data transfer parameters.  */
 
   dtp->u.p.advance_status = ADVANCE_YES;
-  dtp->u.p.blank_status = BLANK_UNSPECIFIED;
   dtp->u.p.seen_dollar = 0;
   dtp->u.p.skips = 0;
   dtp->u.p.pending_spaces = 0;