PR libfortran/19678
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Mar 2005 13:35:29 +0000 (13:35 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Mar 2005 13:35:29 +0000 (13:35 +0000)
        PR libfortran/19679
        * gfortran.dg/dos_eol.f: New test.

        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.

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

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

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/dos_eol.f [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/io/list_read.c
libgfortran/io/transfer.c

index ce9e623..77095ca 100644 (file)
@@ -1,3 +1,9 @@
+2005-03-25  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR libfortran/19678
+       PR libfortran/19679
+       * gfortran.dg/dos_eol.f: New test.
+
 2005-03-25  Zdenek Dvorak  <dvorakz@suse.cz>
 
        PR rtl-optimization/20249
diff --git a/gcc/testsuite/gfortran.dg/dos_eol.f b/gcc/testsuite/gfortran.dg/dos_eol.f
new file mode 100644 (file)
index 0000000..3a22a14
--- /dev/null
@@ -0,0 +1,19 @@
+! PR libfortran/19678 and PR libfortran/19679
+! { 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 6517e03..32b5454 100644 (file)
@@ -1,5 +1,16 @@
 2005-03-25  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.
+
+       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-25  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
        PR libfortran/15332
        * io/format.c (parse_format_list): format node for colon edit
        descriptor needs a repeat counter set to 1.
index 74a6688..384df36 100644 (file)
@@ -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);
          goto done;
 
        default:
@@ -1483,6 +1488,7 @@ namelist_read (void)
           return;
         case ' ':
         case '\n':
+       case '\r':
         case '\t':
           break;
         case ',':
index 0e4c619..aed0aa9 100644 (file)
@@ -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)