diff options
author | jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-06-11 10:52:18 +0000 |
---|---|---|
committer | jb <jb@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-06-11 10:52:18 +0000 |
commit | f22f0b38ad0198eec2c2a7d559fffd11ac224d7a (patch) | |
tree | 52efaae296e32e1cb15ce5aac3ccf45942fdb8fe /libgfortran | |
parent | 9bfd25a7df9b8143fda651de2a4f9622cbae595c (diff) | |
download | gcc-f22f0b38ad0198eec2c2a7d559fffd11ac224d7a.tar.gz |
Return error when trying to seek a non-seekable buffered file
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174947 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 5 | ||||
-rw-r--r-- | libgfortran/io/unix.c | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index d54878b189f..9d5337513e2 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,5 +1,10 @@ 2011-06-11 Janne Blomqvist <jb@gcc.gnu.org> + * io/unix.c (buf_seek): Return error if file is not seekable. + (buf_tell): Call buf_seek. + +2011-06-11 Janne Blomqvist <jb@gcc.gnu.org> + * io/unix.c (fd_to_stream): Figure out if a fd is seekable by trying lseek(). diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index e3ae6072290..25cb559db01 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -560,6 +560,11 @@ buf_write (unix_stream * s, const void * buf, ssize_t nbyte) static gfc_offset buf_seek (unix_stream * s, gfc_offset offset, int whence) { + if (s->file_length == -1) + { + errno = ESPIPE; + return -1; + } switch (whence) { case SEEK_SET: @@ -585,7 +590,7 @@ buf_seek (unix_stream * s, gfc_offset offset, int whence) static gfc_offset buf_tell (unix_stream * s) { - return s->logical_offset; + return buf_seek (s, 0, SEEK_CUR); } static int |