aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <coudert@clipper.ens.fr>2005-03-25 14:35:29 +0100
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2005-03-25 13:35:29 +0000
commit94887ef4788e211ffcae25f17018099bf75dbab3 (patch)
treed266bc81427627226c9cf0f342c8ef74a86d6d84 /libgfortran
parentcd928652255d6203f3223a589fff3eed02995850 (diff)
downloadgcc-94887ef4788e211ffcae25f17018099bf75dbab3.zip
gcc-94887ef4788e211ffcae25f17018099bf75dbab3.tar.gz
gcc-94887ef4788e211ffcae25f17018099bf75dbab3.tar.bz2
re PR libfortran/19678 (DOS files don't work for list directed input)
PR libfortran/19678 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. From-SVN: r97041
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog11
-rw-r--r--libgfortran/io/list_read.c12
-rw-r--r--libgfortran/io/transfer.c2
3 files changed, 21 insertions, 4 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 6517e03..32b5454 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -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.
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index 74a6688..384df36 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -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 ',':
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 0e4c619..aed0aa9 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -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)