From: fxcoudert Date: Sun, 11 Sep 2005 13:34:57 +0000 (+0000) Subject: PR libfortran/20179 X-Git-Tag: upstream/4.9.2~58702 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=353c8a953bd109cd9f3358f32e1cdfc69b79bd54;p=platform%2Fupstream%2Flinaro-gcc.git PR libfortran/20179 * io/unix.c (is_preconnected): Add function to test if a stream corresponds to a preconnected unit. * io/io.h: Add prototype for is_preconnected. * io/transfer.c (data_transfer_init): Do not truncate preconnected units. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104141 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 5dd311a..d36e500 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,12 @@ +2005-09-11 Francois-Xavier Coudert + + PR libfortran/20179 + * io/unix.c (is_preconnected): Add function to test if a stream + corresponds to a preconnected unit. + * io/io.h: Add prototype for is_preconnected. + * io/transfer.c (data_transfer_init): Do not truncate + preconnected units. + 2005-09-10 Janne Blomqvist * io/unix.c: Remove mmap code. diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h index 6f4023b..fc8b887 100644 --- a/libgfortran/io/io.h +++ b/libgfortran/io/io.h @@ -493,6 +493,9 @@ internal_proto(file_position); extern int is_seekable (stream *); internal_proto(is_seekable); +extern int is_preconnected (stream *); +internal_proto(is_preconnected); + extern void empty_internal_buffer(stream *); internal_proto(empty_internal_buffer); diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 9251cf8..cb06a79 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -1183,7 +1183,7 @@ data_transfer_init (int read_flag) it is always safe to truncate the file on the first write */ if (g.mode == WRITING && current_unit->flags.access == ACCESS_SEQUENTIAL - && current_unit->last_record == 0) + && current_unit->last_record == 0 && !is_preconnected(current_unit->s)) struncate(current_unit->s); current_unit->mode = g.mode; diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 1a4bedd..ca96c22 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -218,6 +218,17 @@ fix_fd (int fd) return fd; } +int +is_preconnected (stream * s) +{ + int fd; + + fd = ((unix_stream *) s)->fd; + if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) + return 1; + else + return 0; +} /* write()-- Write a buffer to a descriptor, allowing for short writes */