aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io
diff options
context:
space:
mode:
authorpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>2004-08-31 20:37:43 +0000
committerpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>2004-08-31 20:37:43 +0000
commit116a2a74817eca84dfc64bcf21cbc4bb020d8b66 (patch)
treedc7a4ca767a0ceaea51b4b9fda68b21315cdcfa6 /libgfortran/io
parent219626ad06447381178d5b124b3763d631dc110e (diff)
PR libfortran/16805
* io/list_read.c (next_char): Don't signal EOF for internal files. * io/unix.c (mem_alloc_r_at): Don't return NULL for incomplete reads. testsuite/ 2004-08-31 Bud Davis <bdavis9659@comcast.net> * gfortran.dg/list_read_2.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@86844 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran/io')
-rw-r--r--libgfortran/io/list_read.c13
-rw-r--r--libgfortran/io/unix.c3
2 files changed, 11 insertions, 5 deletions
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index 8b00a5e296e..f47d473df91 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -142,8 +142,17 @@ next_char (void)
}
if (length == 0)
- longjmp (g.eof_jump, 1);
- c = *p;
+ {
+ /* For internal files return a newline instead of signalling EOF. */
+ /* ??? This isn't quite right, but we don't handle internal files
+ with multiple records. */
+ if (is_internal_unit ())
+ c = '\n';
+ else
+ longjmp (g.eof_jump, 1);
+ }
+ else
+ c = *p;
done:
at_eol = (c == '\n');
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index 33d7fda4514..377cadd438e 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -746,9 +746,6 @@ mem_alloc_r_at (unix_stream * s, int *len, gfc_offset where)
if (where < s->buffer_offset || where > s->buffer_offset + s->active)
return NULL;
- if (is_internal_unit() && where + *len > s->file_length)
- return NULL;
-
s->logical_offset = where + *len;
n = s->buffer_offset + s->active - where;