This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[gfortran] ping PATCH PR 19678 and 19679
- From: FranÃois-Xavier Coudert <Francois-Xavier dot Coudert at lcp dot u-psud dot fr>
- To: FranÃois-Xavier Coudert<Francois-Xavier dot Coudert at lcp dot u-psud dot fr>
- Cc: gfortran <fortran at gcc dot gnu dot org>, gcc-patches at gcc dot gnu dot org
- Date: Thu, 03 Mar 2005 17:52:45 +0100
- Subject: [gfortran] ping PATCH PR 19678 and 19679
- Organization: Laboratoire de Chimie Physique
- References: <421DD9EF.70904@lcp.u-psud.fr>
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)