This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gfortran] ping PATCH PR 19678 and 19679


These two patches fixes PR 19678 and 19679 (adding support to read DOS files). Since last time, I also added a testcase (dos_eol.f) for inclusion in the testsuite.

*strapped and regtested on i686-linux. I hereby donate these patches to the FSF.



2005-02-24 Francois-Xavier Coudert <coudert@clipper.ens.fr>

	PR libfortran/19678
	* list_read.c (next_char, eat_separator, finish_separator, read_real)
	  (namelist_read): Add support for '\r' as well as '\n' as EOL
	  character.


2005-02-24 Francois-Xavier Coudert <coudert@clipper.ens.fr>


	PR libfortran/19679
	* list_read.c (read_sf): Add a '\r' in a test to support DOS
	  line-endings when line length is exceeded.


2005-03-03 Francois-Xavier Coudert <coudert@clipper.ens.fr>


	PR libfortran/19678 and PR libfortran/19679
	* dos_eol.f: New test.
! { dg-do run }
      integer i, j
      
      open (10,status='scratch')
      write (10,'(2A)') '1', achar(13)
      rewind (10)
      read (10,*) i
      if (i .ne. 1) call abort
      close (10)

      open (10,status='scratch')
      write (10,'(2A)') '   1', achar(13)
      write (10,'(2A)') '   2', achar(13)
      rewind (10)
      read (10,'(I4)') i
      read (10,'(I5)') j
      if ((i .ne. 1) .or. (j .ne. 2)) call abort
      end
Index: libgfortran/io/list_read.c
===================================================================
RCS file: /cvsroot/gcc/gcc/libgfortran/io/list_read.c,v
retrieving revision 1.14
diff -p -u -r1.14 list_read.c
--- libgfortran/io/list_read.c  23 Feb 2005 04:09:16 -0000      1.14
+++ libgfortran/io/list_read.c  3 Mar 2005 16:11:36 -0000
@@ -66,12 +66,13 @@ static char value[20];
 #define CASE_DIGITS   case '0': case '1': case '2': case '3': case '4': \
                       case '5': case '6': case '7': case '8': case '9'
 
-#define CASE_SEPARATORS  case ' ': case ',': case '/': case '\n': case '\t'
+#define CASE_SEPARATORS  case ' ': case ',': case '/': case '\n': case '\t': \
+                         case '\r'
 
 /* This macro assumes that we're operating on a variable.  */
 
 #define is_separator(c) (c == '/' ||  c == ',' || c == '\n' || c == ' ' \
-                         || c == '\t')
+                         || c == '\t' || c == '\r')
 
 /* Maximum repeat count.  Less than ten times the maximum signed int32.  */
 
@@ -163,7 +164,7 @@ next_char (void)
     c = *p;
 
 done:
-  at_eol = (c == '\n');
+  at_eol = (c == '\n' || c == '\r');
   return c;
 }
 
@@ -230,6 +231,7 @@ eat_separator (void)
       break;
 
     case '\n':
+    case '\r':
       break;
 
     case '!':
@@ -284,6 +286,7 @@ finish_separator (void)
       break;
 
     case '\n':
+    case '\r':
       goto restart;
 
     case '!':
@@ -1052,6 +1055,8 @@ read_real (int length)
          goto got_repeat;
 
        CASE_SEPARATORS:
+          if (c != '\n' &&  c != ',' && c != '\r')
+            unget_char (c);    /* Real number that is just a digit-string.  */
          goto done;
 
        default:
@@ -1483,6 +1488,7 @@ namelist_read (void)
           return;
         case ' ':
         case '\n':
+       case '\r':
         case '\t':
           break;
         case ',':
Index: libgfortran/io/transfer.c
===================================================================
RCS file: /cvsroot/gcc/gcc/libgfortran/io/transfer.c,v
retrieving revision 1.32
diff -p -u -r1.32 transfer.c
--- libgfortran/io/transfer.c   22 Feb 2005 03:26:25 -0000      1.32
+++ libgfortran/io/transfer.c   3 Mar 2005 16:11:36 -0000
@@ -177,7 +177,7 @@ read_sf (int *length)
          return NULL;
        }
 
-      if (readlen < 1 || *q == '\n')
+      if (readlen < 1 || *q == '\n' || *q == '\r')
        {
          /* ??? What is this for?  */
           if (current_unit->unit_number == options.stdin_unit)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]