diff options
author | Thomas Koenig <Thomas.Koenig@online.de> | 2005-07-12 19:52:19 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2005-07-12 19:52:19 +0000 |
commit | 5133e4b923b5648cc7fc2f27bb03f02855dbbe94 (patch) | |
tree | da374bb9ec1399b596949ba90944c887ee748ce6 | |
parent | 04be5ce5ec84b1dab39372f89d59888988a3195e (diff) | |
download | gcc-5133e4b923b5648cc7fc2f27bb03f02855dbbe94.zip gcc-5133e4b923b5648cc7fc2f27bb03f02855dbbe94.tar.gz gcc-5133e4b923b5648cc7fc2f27bb03f02855dbbe94.tar.bz2 |
io/unix.c: Add member special_file to type unix_stream.
2005-07-12 Thomas Koenig <Thomas.Koenig@online.de>
io/unix.c: Add member special_file to type unix_stream.
(fd_truncate): Don't call ftruncate or chsize if
s refers to a special file.
(fd_to_stream): initialize s->special_file.
2005-07-12 Thomas Koenig <Thomas.Koenig@online.de>
gfortran.dg/dev_null.f90: Remove targets.
From-SVN: r101937
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/dev_null.f90 | 2 | ||||
-rw-r--r-- | libgfortran/ChangeLog | 7 | ||||
-rw-r--r-- | libgfortran/io/unix.c | 12 |
4 files changed, 20 insertions, 5 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 914f9a5..8cead7d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-07-11 Thomas Koenig <Thomas.Koenig@online.de> + + gfortran.dg/dev_null.f90: Remove targets. + 2005-07-12 Andrew Pinski <pinskia@physics.uc.edu> PR tree-opt/22335 diff --git a/gcc/testsuite/gfortran.dg/dev_null.f90 b/gcc/testsuite/gfortran.dg/dev_null.f90 index f9703bc..c8db001 100644 --- a/gcc/testsuite/gfortran.dg/dev_null.f90 +++ b/gcc/testsuite/gfortran.dg/dev_null.f90 @@ -1,4 +1,4 @@ -! { dg-do run { target *-*-linux* *-*-solaris* } } +! { dg-do run } ! This test currently only runs on systems where using ftruncate on ! /dev/null fails (errno set to EINVAL). See PR 21593 for details. ! diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 28ee7dc..e96c422 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,10 @@ +2005-07-12 Thomas Koenig <Thomas.Koenig@online.de> + + io/unix.c: Add member special_file to type unix_stream. + (fd_truncate): Don't call ftruncate or chsize if + s refers to a special file. + (fd_to_stream): initialize s->special_file. + 2005-07-11 David Edelsohn <edelsohn@gnu.org> PR libgfortran/22412 diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 1158458..b35182d 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -138,6 +138,8 @@ typedef struct int prot; int ndirty; /* Dirty bytes starting at dirty_offset */ + int special_file; /* =1 if the fd refers to a special file */ + unsigned unbuffered:1, mmaped:1; char small_buffer[BUFFER_SIZE]; @@ -509,13 +511,14 @@ fd_truncate (unix_stream * s) return FAILURE; /* non-seekable files, like terminals and fifo's fail the lseek. - the fd is a regular file at this point */ - + Using ftruncate on a seekable special file (like /dev/null) + is undefined, so we treat it as if the ftruncate failed. + */ #ifdef HAVE_FTRUNCATE - if (ftruncate (s->fd, s->logical_offset)) + if (s->special_file || ftruncate (s->fd, s->logical_offset)) #else #ifdef HAVE_CHSIZE - if (chsize (s->fd, s->logical_offset)) + if (s->special_file || chsize (s->fd, s->logical_offset)) #endif #endif { @@ -915,6 +918,7 @@ fd_to_stream (int fd, int prot, int avoid_mmap) fstat (fd, &statbuf); s->file_length = S_ISREG (statbuf.st_mode) ? statbuf.st_size : -1; + s->special_file = !S_ISREG (statbuf.st_mode); #if HAVE_MMAP if (avoid_mmap) |