diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index d54878b189fb59a7d6328f353c813b6ac5fad63e..9d5337513e2dfb1400322f93af6ccdb5b9cdd8ae 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index e3ae607229031f843bbaa23e476b4aa4e0b6b37a..25cb559db014ee9a87f5348851bb03f005f4335f 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