OSDN Git Service

Return error when trying to seek a non-seekable buffered file
authorjb <jb@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Jun 2011 10:52:18 +0000 (10:52 +0000)
committerjb <jb@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Jun 2011 10:52:18 +0000 (10:52 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174947 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/unix.c

index d54878b..9d53375 100644 (file)
@@ -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().
 
index e3ae607..25cb559 100644 (file)
@@ -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