Commit c5418dcb by Jerry DeLisle

re PR libfortran/26423 (Error on binary I/O for large array)

2006-02-24  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/26423
	* io/unix.c (fd_seek): Revert change from 25949.
	(fd_read): Same.
	(fd_write): Same.

From-SVN: r111420
parent 69ca3549
2006-02-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/26423
* io/unix.c (fd_seek): Revert change from 25949.
(fd_read): Same.
(fd_write): Same.
2006-02-19 Francois-Xavier Coudert <coudert@clipper.ens.fr>
* io/open.c (edit_modes): Correct abusive copy-pasting.
......
......@@ -562,9 +562,15 @@ fd_sfree (unix_stream * s)
static try
fd_seek (unix_stream * s, gfc_offset offset)
{
s->logical_offset = offset;
if (s->physical_offset == offset) /* Are we lucky and avoid syscall? */
{
s->logical_offset = offset;
return SUCCESS;
}
return SUCCESS;
s->physical_offset = s->logical_offset = offset;
return (lseek (s->fd, offset, SEEK_SET) < 0) ? FAILURE : SUCCESS;
}
......@@ -666,8 +672,7 @@ fd_read (unix_stream * s, void * buf, size_t * nbytes)
return errno;
}
if (is_seekable ((stream *) s) && s->physical_offset != s->logical_offset
&& lseek (s->fd, s->logical_offset, SEEK_SET) < 0)
if (is_seekable ((stream *) s) && fd_seek (s, s->logical_offset) == FAILURE)
{
*nbytes = 0;
return errno;
......@@ -715,8 +720,7 @@ fd_write (unix_stream * s, const void * buf, size_t * nbytes)
return errno;
}
if (is_seekable ((stream *) s) && s->physical_offset != s->logical_offset
&& lseek (s->fd, s->logical_offset, SEEK_SET) < 0)
if (is_seekable ((stream *) s) && fd_seek (s, s->logical_offset) == FAILURE)
{
*nbytes = 0;
return errno;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment