mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-29 23:46:02 +08:00
unix.c (fd_alloc_r_at): Use read() instead of do_read() only in case of special files (e.g.
2005-10-13 Thomas Koenig <Thomas.Koenig@online.de> * io/unix.c(fd_alloc_r_at): Use read() instead of do_read() only in case of special files (e.g. terminals). From-SVN: r105373
This commit is contained in:
parent
8c210c4104
commit
c1d70e1a52
@ -1,3 +1,8 @@
|
||||
2005-10-13 Thomas Koenig <Thomas.Koenig@online.de>
|
||||
|
||||
* io/unix.c(fd_alloc_r_at): Use read() instead of do_read()
|
||||
only in case of special files (e.g. terminals).
|
||||
|
||||
2005-20-13 Uros Bizjak <uros@kss-loka.si>
|
||||
|
||||
* config/fpu-387.h (set_fpu): Add "=m" for stmxcsr.
|
||||
@ -26,8 +31,8 @@
|
||||
|
||||
2005-10-12 Janne Blomqvist <jblomqvi@cc.hut.fi>
|
||||
|
||||
* io/unix.c: Remove parts of patch of 2005/10/07 that cause
|
||||
input from the terminal to hang.
|
||||
* io/unix.c(fd_alloc_r_at): Remove parts of patch of 2005/10/07 that
|
||||
cause input from the terminal to hang.
|
||||
|
||||
2005-10-11 Steven G. Kargl <kargls@comcast.net>
|
||||
|
||||
|
@ -440,7 +440,6 @@ static char *
|
||||
fd_alloc_r_at (unix_stream * s, int *len, gfc_offset where)
|
||||
{
|
||||
gfc_offset m;
|
||||
int n;
|
||||
|
||||
if (where == -1)
|
||||
where = s->logical_offset;
|
||||
@ -462,13 +461,32 @@ fd_alloc_r_at (unix_stream * s, int *len, gfc_offset where)
|
||||
if (s->physical_offset != m && lseek (s->fd, m, SEEK_SET) < 0)
|
||||
return NULL;
|
||||
|
||||
/* do_read() hangs on read from terminals for *BSD-systems. Only
|
||||
use read() in that case. */
|
||||
|
||||
if (s->special_file)
|
||||
{
|
||||
ssize_t n;
|
||||
|
||||
n = read (s->fd, s->buffer + s->active, s->len - s->active);
|
||||
if (n < 0)
|
||||
return NULL;
|
||||
|
||||
s->physical_offset = where + n;
|
||||
|
||||
s->active += n;
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t n;
|
||||
|
||||
n = s->len - s->active;
|
||||
if (do_read (s, s->buffer + s->active, &n) != 0)
|
||||
return NULL;
|
||||
|
||||
s->physical_offset = where + n;
|
||||
s->active += n;
|
||||
}
|
||||
|
||||
if (s->active < *len)
|
||||
*len = s->active; /* Bytes actually available */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user