Fix regression when writing formatted sequential to a pipe.

2013-02-21  Janne Blomqvist  <jb@gcc.gnu.org>

	PR libfortran/30162
	* io/open.c (test_endfile): Call stell only if size != 0.
	* io/unix.c (raw_tell): Revert r194679.
	(raw_size): Return size field only for regular files, otherwise 0.

From-SVN: r196210
This commit is contained in:
Janne Blomqvist 2013-02-21 21:03:10 +02:00
parent a4a66330d5
commit 68aab0e225
3 changed files with 18 additions and 12 deletions

View File

@ -1,3 +1,10 @@
2013-02-21 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/30162
* io/open.c (test_endfile): Call stell only if size != 0.
* io/unix.c (raw_tell): Revert r194679.
(raw_size): Return size field only for regular files, otherwise 0.
2013-02-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> 2013-02-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/56347 PR target/56347

View File

@ -152,8 +152,12 @@ static const st_option async_opt[] =
static void static void
test_endfile (gfc_unit * u) test_endfile (gfc_unit * u)
{ {
if (u->endfile == NO_ENDFILE && ssize (u->s) == stell (u->s)) if (u->endfile == NO_ENDFILE)
u->endfile = AT_ENDFILE; {
gfc_offset sz = ssize (u->s);
if (sz == 0 || sz == stell (u->s))
u->endfile = AT_ENDFILE;
}
} }

View File

@ -342,15 +342,7 @@ raw_seek (unix_stream * s, gfc_offset offset, int whence)
static gfc_offset static gfc_offset
raw_tell (unix_stream * s) raw_tell (unix_stream * s)
{ {
gfc_offset x; return lseek (s->fd, 0, SEEK_CUR);
x = lseek (s->fd, 0, SEEK_CUR);
/* Non-seekable files should always be assumed to be at
current position. */
if (x == -1 && errno == ESPIPE)
x = 0;
return x;
} }
static gfc_offset static gfc_offset
@ -360,7 +352,10 @@ raw_size (unix_stream * s)
int ret = fstat (s->fd, &statbuf); int ret = fstat (s->fd, &statbuf);
if (ret == -1) if (ret == -1)
return ret; return ret;
return statbuf.st_size; if (S_ISREG (statbuf.st_mode))
return statbuf.st_size;
else
return 0;
} }
static int static int